AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Функционал
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2015, 09:18   #1  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Создание пакетного задания DAX 2009
Добрый день!
Товарищи, подскажите информацию в которой черным по белому написано, как создавать пакетные задания? Пробовал создавать вручную в "Основное" - сплошные ошибки и ругань, начиная с выбора класс (вылетает отладчик, ругается, что не инициализирован _args итд итп...)

Благодарю!
Старый 16.06.2015, 11:11   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
класс tutorial_runbasebatch
Старый 16.06.2015, 11:26   #4  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Благодарю за ответы!

Тем не менее, при попытке выбрать класс (либо свой, либо заводской) выходит ошибка. Что не так?
Изображения
 
Старый 16.06.2015, 11:53   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
Благодарю за ответы!

Тем не менее, при попытке выбрать класс (либо свой, либо заводской) выходит ошибка. Что не так?
А вот не надо в метод New() передавать параметр! При пакетной обработке экземпляр класса создается БЕЗ передачи параметра.

В общем случае, в методе new() не должно быть вообще никакого кода. Перекрытие этого метода - это "заглушка", чтобы не переписывать кучу классов-наследников. При "штатном" проектировании такого быть не должно!

Перепишите Ваш класс таким образом, чтобы параметр передавался ПОСЛЕ создания экземпляра класса. Через специально созданный для этого метод Вашего класса. Обычно это делается в методе main() примерно так

X++:
static void main(Args args)
{
    MyClass    myClass;
;
    myClass = new MyClass();

    // Создается метод, для приема параметра и его обработки
    myClass.initFromArgs(args);

    if (myClass.prompt())
        myClass.run();
}
В общем случае, может быть создан еще статический метод Construct() в который и передается параметр, но это просто объединение метода new() и метода обработки параметра в одном месте.


Если опустить некоторые подробности, то при выполнении пакетного задания выполняются следующие методы (запуск пакетного задания - это метод \Classes\BatchRun\runJobStatic())

X++:
myClass = new MyClass();    // БЕЗ передачи параметра!!!
myClass.parmInBatch(true);  // Признак того, что класс выполняется в пакетном режиме
myClass.unpack();           // Передаются те значения, которые были указаны при настройке пакетного режима
myClass.run();              // Выполнение класса
Это значит, что если Вы хотите инициализировать какие-либо значения, которые не сохраняются в методе pack(), то их формирование надо выполнять в методе run() добавив условие выполнения пакета. Как-то так

X++:
if (this.h())
{
    // Выполняется пакетная обработка
    pivotTableType = (...);
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
За это сообщение автора поблагодарили: d_alexe (1).
Старый 16.06.2015, 12:06   #6  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Владимир Максимов, я имел ввиду, что я пытаюсь выбрать класс в форме Batch, когда определяю список задач пакета (см. картинку). При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...

причем, я не могу поменять "запустить из местоположения"... может это с этим связано?
Миниатюры
Нажмите на изображение для увеличения
Название: Безымянный.png
Просмотров: 462
Размер:	40.8 Кб
ID:	9303  

Последний раз редактировалось Vasiliusis; 16.06.2015 в 12:27.
Старый 16.06.2015, 12:45   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
[При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
Старый 16.06.2015, 12:10   #8  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
...выходит ошибка. Что не так?
Ооооо, как все запущено.

Цитата:
Сообщение от mazzy Посмотреть сообщение
класс tutorial_runbasebatch
добавлю: скопируйте класс tutorial_runbasebatch, измените имя и конструктор, измените содержимое под ваши нужды.
Старый 16.06.2015, 12:17   #9  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ооооо, как все запущено.


добавлю: скопируйте класс tutorial_runbasebatch, измените имя и конструктор, измените содержимое под ваши нужды.
Эммм... еще раз... я не могу этот класс выбрать нигде, понимаете! какой смысл что-либо программировать? объясните, почему вылетает дебаггер на заводских классах?
Старый 16.06.2015, 12:34   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
я не могу этот класс выбрать нигде, понимаете!
не понимаю. честно.
я не могу сопоставить ваш термин "класс выбрать" ни с одним действием в реальной жизни. тем более, в связке со словом "нигде".

Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
объясните, почему вылетает дебаггер на заводских классах?
Что значит, "объясните"?
вам же черным по белому на скриншоте написано "Args Объект не инициализирован"

вы зачем-то поставили в new аргументы типа Args.
в коде зачем-то пытаетесь обратиться к методу этого аргумента.
но наверняка показанный метод new() вызываете с объектом, который в свою очередь не прошел через new.

другими словами, где "new Args()" у объекта, который передан в качестве параметра?

Vasiliusis, это настолько базовые вещи в ООП программировании... что... в общем, либо вы сейчас сделаете фейс-палм в стиле "Как же это я протупил?", либо вам надо вернуться к очень базовым java-курсам

Последний раз редактировалось mazzy; 16.06.2015 в 12:37.
Старый 16.06.2015, 13:39   #11  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
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  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
ну видимо, придется лезть в кишки...если это баг формы, то ничего страшного (описанным Вами ранее способом же задачи создаются)
Старый 16.06.2015, 14:05   #13  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На сколько я помню там при открытии лукапа происходит поиск всех классов унаследованных от RunBaseBatch, и для каждого класса создаётся объект для того чтобы вызвать у него метод description() с описанием класса. Получается если в приложении есть классы наследники RunBaseBatch c неправильной структурой метода new(), то будет ошибка.
Старый 23.07.2018, 15:18   #14  
vizir is offline
vizir
Участник
 
43 / 10 (1) +
Регистрация: 08.09.2017
Воскрешу старый тред, чтобы не создавать новый.

При запуске пакетного задания в 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  
Pandasama is offline
Pandasama
Участник
 
457 / 134 (5) +++++
Регистрация: 11.08.2014
Адрес: Барнаул
Цитата:
Убедитесь, что код Х++ скомпилирован для CIL Microsoft .NET Framework
Это вы проделали?
если делали просто инкрементный - попробуйте полный, или даже полный с удалением папки XPPIL и очисткой таблицей кеша XPPIL
Старый 24.07.2018, 10:29   #16  
vizir is offline
vizir
Участник
 
43 / 10 (1) +
Регистрация: 08.09.2017
Сделали компиляции с удалением и очисткой, теперь просто пишет:

Произошла ошибка при обработке пакетного задания 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 is offline
Ivanhoe
Участник
Аватар для Ivanhoe
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
4,143 / 2156 (80) +++++++++
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
При копировании класса точно везде поменяли названия класса на свои?
Еще настройки пользователя, возможно, стоит почистить.
__________________
Ivanhoe as is..
Старый 24.07.2018, 11:56   #18  
vizir is offline
vizir
Участник
 
43 / 10 (1) +
Регистрация: 08.09.2017
Настройки почистил. И такая ошибка возникает даже для самого Tutorial_RunbaseBatch, хотя копия и корректна. Мб есть какой то секрет? )
Старый 13.08.2018, 14:56   #19  
vizir is offline
vizir
Участник
 
43 / 10 (1) +
Регистрация: 08.09.2017
Повторил шаг за шагом эту процедуру - все равно ошибка при выполнении пакетного задания.
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  
ZornFire is offline
ZornFire
MS Dynamics AX 2012 R3
Аватар для ZornFire
Oracle
Злыдни
Ex AND Project
 
333 / 76 (3) ++++
Регистрация: 12.01.2009
Адрес: Москва
Ну, тут всё просто:

1. Cделать простой CIL;
2. Перезапустить AOS, где должен работать пакетник;
3. Пересоздать пакетник.
__________________
"Человек человеку волк, а зомби зомби зомби." (с)
С Уважением, Алексей Кабанов
За это сообщение автора поблагодарили: vizir (1).
Теги
batch, пакетная обработка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
DAX 2009. Создание журналов ГК по налоговым регистрам. zhan DAX: Функционал 4 27.01.2010 17:13
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
msdynamicsax: DAX 2009 and MS SQL 2008 Blog bot DAX Blogs 0 09.08.2008 14:05
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
msdynamicsax: Enterprise Portal development in DAX 2009 Blog bot DAX Blogs 0 18.04.2008 07:06

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:57.