|
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:45 | #7 |
Участник
|
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
|
|
16.06.2015, 12:10 | #8 |
Участник
|
|
|
16.06.2015, 12:17 | #9 |
Участник
|
Эммм... еще раз... я не могу этот класс выбрать нигде, понимаете! какой смысл что-либо программировать? объясните, почему вылетает дебаггер на заводских классах?
|
|
16.06.2015, 12:34 | #10 |
Участник
|
не понимаю. честно.
я не могу сопоставить ваш термин "класс выбрать" ни с одним действием в реальной жизни. тем более, в связке со словом "нигде". Что значит, "объясните"? вам же черным по белому на скриншоте написано "Args Объект не инициализирован" вы зачем-то поставили в new аргументы типа Args. в коде зачем-то пытаетесь обратиться к методу этого аргумента. но наверняка показанный метод new() вызываете с объектом, который в свою очередь не прошел через new. другими словами, где "new Args()" у объекта, который передан в качестве параметра? Vasiliusis, это настолько базовые вещи в ООП программировании... что... в общем, либо вы сейчас сделаете фейс-палм в стиле "Как же это я протупил?", либо вам надо вернуться к очень базовым java-курсам Последний раз редактировалось mazzy; 16.06.2015 в 12:37. |
|
16.06.2015, 13:39 | #11 |
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 | #12 |
Участник
|
ну видимо, придется лезть в кишки...если это баг формы, то ничего страшного (описанным Вами ранее способом же задачи создаются)
|
|
16.06.2015, 14:05 | #13 |
Участник
|
На сколько я помню там при открытии лукапа происходит поиск всех классов унаследованных от RunBaseBatch, и для каждого класса создаётся объект для того чтобы вызвать у него метод description() с описанием класса. Получается если в приложении есть классы наследники RunBaseBatch c неправильной структурой метода new(), то будет ошибка.
|
|
23.07.2018, 15:18 | #14 |
Участник
|
Воскрешу старый тред, чтобы не создавать новый.
При запуске пакетного задания в axapta 2012, используя копию класса Tutorial_RunbaseBatch, получаю ошибку Невозможно создать объект из класса CopyOfTutorial_RunbaseBatch в пакетной среде. Убедитесь, что код Х++ скомпилирован для CIL Microsoft .NET Framework и для конструктора не требуются параметры. Microsoft.Dynamics.Ax.Xpp.ErrorException: Выдано исключение типа "Microsoft.Dynamics.Ax.Xpp.ErrorException". в Dynamics.Ax.Application.BatchRun.runJobStaticCode(Int64 batchId) в BatchRun.runJobStaticCode.xpp:строка 34 в Dynamics.Ax.Application.BatchRun.runJobStatic(Int64 batchId) в BatchRun.runJobStatic.xpp:строка 13 в BatchRun::runJobStatic(Object[] ) в Microsoft.Dynamics.Ax.Xpp.ReflectionCallHelper.MakeStaticCall(Type type, String MethodName, Object[] parameters) в BatchIL.taskThreadEntry(Object threadArg) В чем может быть дело? |
|
24.07.2018, 05:37 | #15 |
Участник
|
Цитата:
Убедитесь, что код Х++ скомпилирован для CIL Microsoft .NET Framework
если делали просто инкрементный - попробуйте полный, или даже полный с удалением папки XPPIL и очисткой таблицей кеша XPPIL |
|
24.07.2018, 10:29 | #16 |
Участник
|
Сделали компиляции с удалением и очисткой, теперь просто пишет:
Произошла ошибка при обработке пакетного задания test Microsoft.Dynamics.Ax.Xpp.ErrorException: Выдано исключение типа "Microsoft.Dynamics.Ax.Xpp.ErrorException". в Dynamics.Ax.Application.BatchRun.runJobStaticCode(Int64 batchId) в BatchRun.runJobStaticCode.xpp:строка 42 в Dynamics.Ax.Application.BatchRun.runJobStatic(Int64 batchId) в BatchRun.runJobStatic.xpp:строка 13 в BatchRun::runJobStatic(Object[] ) в Microsoft.Dynamics.Ax.Xpp.ReflectionCallHelper.MakeStaticCall(Type type, String MethodName, Object[] parameters) в BatchIL.taskThreadEntry(Object threadArg) Есть ещё мнения? |
|
24.07.2018, 11:30 | #17 |
Участник
|
При копировании класса точно везде поменяли названия класса на свои?
Еще настройки пользователя, возможно, стоит почистить.
__________________
Ivanhoe as is.. |
|
24.07.2018, 11:56 | #18 |
Участник
|
Настройки почистил. И такая ошибка возникает даже для самого Tutorial_RunbaseBatch, хотя копия и корректна. Мб есть какой то секрет? )
|
|
13.08.2018, 14:56 | #19 |
Участник
|
Повторил шаг за шагом эту процедуру - все равно ошибка при выполнении пакетного задания.
https://docs.microsoft.com/ru-ru/dyn...nd-run-a-batch НО! Выполнил пункт "Making Your Batch Dependent on a Client Session", переопределил метод runsImpersonated(), зашел в "Управление организацией/Периодические операции/Пакетная обработка", нажал ОК и задание выполнилось! Убрал метод, попробовал снова просто поставить задание в очередь - снова ошибка. Я чувствую что причина ошибки какая то очевидная. Может у кого было такое? |
|
13.08.2018, 16:03 | #20 |
MS Dynamics AX 2012 R3
|
Ну, тут всё просто:
1. Cделать простой CIL; 2. Перезапустить AOS, где должен работать пакетник; 3. Пересоздать пакетник.
__________________
"Человек человеку волк, а зомби зомби зомби." (с) С Уважением, Алексей Кабанов |
|
|
За это сообщение автора поблагодарили: vizir (1). |
Теги |
batch, пакетная обработка |
|
|