16.06.2015, 09:18 | #1 |
Участник
|
Создание пакетного задания DAX 2009
Добрый день!
Товарищи, подскажите информацию в которой черным по белому написано, как создавать пакетные задания? Пробовал создавать вручную в "Основное" - сплошные ошибки и ругань, начиная с выбора класс (вылетает отладчик, ругается, что не инициализирован _args итд итп...) Благодарю! |
|
16.06.2015, 11:11 | #3 |
Участник
|
класс tutorial_runbasebatch
|
|
16.06.2015, 11:26 | #4 |
Участник
|
Благодарю за ответы!
Тем не менее, при попытке выбрать класс (либо свой, либо заводской) выходит ошибка. Что не так? |
|
16.06.2015, 11:53 | #5 |
Участник
|
Цитата:
В общем случае, в методе new() не должно быть вообще никакого кода. Перекрытие этого метода - это "заглушка", чтобы не переписывать кучу классов-наследников. При "штатном" проектировании такого быть не должно! Перепишите Ваш класс таким образом, чтобы параметр передавался ПОСЛЕ создания экземпляра класса. Через специально созданный для этого метод Вашего класса. Обычно это делается в методе main() примерно так X++: static void main(Args args) { MyClass myClass; ; myClass = new MyClass(); // Создается метод, для приема параметра и его обработки myClass.initFromArgs(args); if (myClass.prompt()) myClass.run(); } Если опустить некоторые подробности, то при выполнении пакетного задания выполняются следующие методы (запуск пакетного задания - это метод \Classes\BatchRun\runJobStatic()) X++: myClass = new MyClass(); // БЕЗ передачи параметра!!! myClass.parmInBatch(true); // Признак того, что класс выполняется в пакетном режиме myClass.unpack(); // Передаются те значения, которые были указаны при настройке пакетного режима myClass.run(); // Выполнение класса X++: if (this.h()) { // Выполняется пакетная обработка pivotTableType = (...); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: d_alexe (1). |
16.06.2015, 12:06 | #6 |
Участник
|
Владимир Максимов, я имел ввиду, что я пытаюсь выбрать класс в форме Batch, когда определяю список задач пакета (см. картинку). При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...
причем, я не могу поменять "запустить из местоположения"... может это с этим связано? Последний раз редактировалось Vasiliusis; 16.06.2015 в 12:27. |
|
16.06.2015, 12:10 | #7 |
Участник
|
|
|
16.06.2015, 12:17 | #8 |
Участник
|
Эммм... еще раз... я не могу этот класс выбрать нигде, понимаете! какой смысл что-либо программировать? объясните, почему вылетает дебаггер на заводских классах?
|
|
16.06.2015, 12:34 | #9 |
Участник
|
не понимаю. честно.
я не могу сопоставить ваш термин "класс выбрать" ни с одним действием в реальной жизни. тем более, в связке со словом "нигде". Что значит, "объясните"? вам же черным по белому на скриншоте написано "Args Объект не инициализирован" вы зачем-то поставили в new аргументы типа Args. в коде зачем-то пытаетесь обратиться к методу этого аргумента. но наверняка показанный метод new() вызываете с объектом, который в свою очередь не прошел через new. другими словами, где "new Args()" у объекта, который передан в качестве параметра? Vasiliusis, это настолько базовые вещи в ООП программировании... что... в общем, либо вы сейчас сделаете фейс-палм в стиле "Как же это я протупил?", либо вам надо вернуться к очень базовым java-курсам Последний раз редактировалось mazzy; 16.06.2015 в 12:37. |
|
16.06.2015, 12:40 | #10 |
Участник
|
Вот набросились В DAX2009 RPayHRMPivotReportEngine это стандартный класс и именно так он написан.
Но в стандарте он не предназначен для добавления в журнал пакетной обработки. Если Вы сами перекрыли возврат canGoBatchJournal, то придется подгонять класс под стандарт использования в журналах пакетной обработки. В частности, делать метод new без параметров (найдя по перекрестным ссылкам его использование и исправив вызовы), либо обеспечить параметр значением по умолчанию и если параметр передан со значением по умолчанию, как-то изменить код new. |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
16.06.2015, 12:45 | #11 |
Участник
|
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
|
|
16.06.2015, 12:53 | #12 |
Участник
|
Цитата:
Сообщение от mazzy
не понимаю. честно.
я не могу сопоставить ваш термин "класс выбрать" ни с одним действием в реальной жизни. тем более, в связке со словом "нигде". Что значит, "объясните"? вам же черным по белому на скриншоте написано "Args Объект не инициализирован" вы зачем-то поставили в new аргументы типа Args. в коде зачем-то пытаетесь обратиться к методу этого аргумента. но наверняка показанный метод new() вызываете с объектом, который в свою очередь не прошел через new. другими словами, где "new Args()" у объекта, который передан в качестве параметра? Vasiliusis, это настолько базовые вещи в ООП программировании... что... в общем, либо вы сейчас сделаете фейс-палм в стиле "Как же это я протупил?", либо вам надо вернуться к очень базовым java-курсам Последний раз редактировалось Vasiliusis; 16.06.2015 в 13:05. |
|
16.06.2015, 13:02 | #13 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
Последний раз редактировалось Vasiliusis; 16.06.2015 в 13:18. |
|
16.06.2015, 13:07 | #14 |
MCT
|
Цитата:
пример Главная книга / Периодические операции / Пересчитать сальдо по периодам - вы сразу попадаете на закладку пакет. Ставим флаг "Пакетная обработка", выбираем группу пакетов - по ок будет создано пакетное задание. Хотя вручную (через Основное / Запросы / Пакетное задание) вы его вряд ли создадите )
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
16.06.2015, 13:17 | #15 |
Участник
|
Цитата:
Сообщение от d&m
на диалоге многих функций есть закладка Пакет - так и были добавлены
пример Главная книга / Периодические операции / Пересчитать сальдо по периодам - вы сразу попадаете на закладку пакет. Ставим флаг "Пакетная обработка", выбираем группу пакетов - по ок будет создано пакетное задание. Хотя вручную (через Основное / Запросы / Пакетное задание) вы его вряд ли создадите ) |
|
16.06.2015, 13:39 | #16 |
MCT
|
1. в статье 2012 версия - и там это действительно работает (сейчас создал без проблем задачу с вашим классом CustExchAdj)
2. а у вас 2009 версия. у меня тоже вылетает отладчик при попытке открыть лукап с классами. 3. мы сталкивилась с такой проблемой - разработчики доделывали, как именно не знаю но по ощущениям часок-другой максимум ушел, т.е. не долго.
__________________
Sometimes there is a moment as you are awakening - when you become aware of the real world around you, - but you are still dreaming. - You may think you can fly but you do better not try. |
|
16.06.2015, 13:44 | #17 |
Участник
|
ну видимо, придется лезть в кишки...если это баг формы, то ничего страшного (описанным Вами ранее способом же задачи создаются)
|
|
16.06.2015, 14:05 | #18 |
Участник
|
На сколько я помню там при открытии лукапа происходит поиск всех классов унаследованных от RunBaseBatch, и для каждого класса создаётся объект для того чтобы вызвать у него метод description() с описанием класса. Получается если в приложении есть классы наследники RunBaseBatch c неправильной структурой метода new(), то будет ошибка.
|
|
16.06.2015, 14:17 | #19 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
"Тупо" подправить те классы, на которых вылетает debugger. Насколько я помню, RPayHRMPivotReportEngine - это единственный из стандартных классов у которого подобная ошибка. Просто добавь условие X++: // класс RPayHRMPivotReportEngine public void new(Args _args) { ; super (); if (_args) // Исправление ошибки формирования пакетных заданий, 16.06.2015 { pivotTableType = _args.parmEnum(); } pivotTableMetadata = new RPayHRMPivotTableMetaData(); pivotTableData = new RPayHRMPivotTableData(); this.initPivotCodeNameFields(); }
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: Vasiliusis (1). |
16.06.2015, 14:53 | #20 |
Участник
|
Цитата:
Сообщение от Владимир Максимов
"Тупо" подправить те классы, на которых вылетает debugger. Насколько я помню, RPayHRMPivotReportEngine - это единственный из стандартных классов у которого подобная ошибка. Просто добавь условие
X++: // класс RPayHRMPivotReportEngine public void new(Args _args) { ; super (); if (_args) // Исправление ошибки формирования пакетных заданий, 16.06.2015 { pivotTableType = _args.parmEnum(); } pivotTableMetadata = new RPayHRMPivotTableMetaData(); pivotTableData = new RPayHRMPivotTableData(); this.initPivotCodeNameFields(); } |
|
Теги |
batch, пакетная обработка |
|
|