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:10   #7  
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   #8  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ооооо, как все запущено.


добавлю: скопируйте класс tutorial_runbasebatch, измените имя и конструктор, измените содержимое под ваши нужды.
Эммм... еще раз... я не могу этот класс выбрать нигде, понимаете! какой смысл что-либо программировать? объясните, почему вылетает дебаггер на заводских классах?
Старый 16.06.2015, 12:34   #9  
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, 12:40   #10  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1293 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Вот набросились В DAX2009 RPayHRMPivotReportEngine это стандартный класс и именно так он написан.
Но в стандарте он не предназначен для добавления в журнал пакетной обработки. Если Вы сами перекрыли возврат canGoBatchJournal, то придется подгонять класс под стандарт использования в журналах пакетной обработки. В частности, делать метод new без параметров (найдя по перекрестным ссылкам его использование и исправив вызовы), либо обеспечить параметр значением по умолчанию и если параметр передан со значением по умолчанию, как-то изменить код new.
За это сообщение автора поблагодарили: mazzy (2).
Старый 16.06.2015, 12:45   #11  
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:53   #12  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от mazzy Посмотреть сообщение
не понимаю. честно.
я не могу сопоставить ваш термин "класс выбрать" ни с одним действием в реальной жизни. тем более, в связке со словом "нигде".


Что значит, "объясните"?
вам же черным по белому на скриншоте написано "Args Объект не инициализирован"

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

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

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

Последний раз редактировалось Vasiliusis; 16.06.2015 в 13:05.
Старый 16.06.2015, 13:02   #13  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
слава яхве, вы посмотрели на картинки, в отличие от других.... хорошо, понятно. а как быть то? в других пакетных заданиях задачи есть, в них указаны классы, как-то же они (задачи) были добавлены? например, я пытаюсь вручную добавить класс "CustExchAdj" - вылетает дебаггер, хотя он наследован от RunBaseBatch и имеет canGoBatchJournal... (2 Mazzy: наследован от RunBaseBatch и имеет canGoBatchJournal не дебаггер, а класс CustExchAdj)

Последний раз редактировалось Vasiliusis; 16.06.2015 в 13:18.
Старый 16.06.2015, 13:07   #14  
d&m is offline
d&m
MCT
Аватар для d&m
MCP
Manzana Group
MCBMSS
 
459 / 186 (7) ++++++
Регистрация: 11.09.2007
Записей в блоге: 6
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
в других пакетных заданиях задачи есть, в них указаны классы, как-то же они (задачи) были добавлены? .
на диалоге многих функций есть закладка Пакет - так и были добавлены
пример Главная книга / Периодические операции / Пересчитать сальдо по периодам - вы сразу попадаете на закладку пакет. Ставим флаг "Пакетная обработка", выбираем группу пакетов - по ок будет создано пакетное задание. Хотя вручную (через Основное / Запросы / Пакетное задание) вы его вряд ли создадите )
__________________
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  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от d&m Посмотреть сообщение
на диалоге многих функций есть закладка Пакет - так и были добавлены
пример Главная книга / Периодические операции / Пересчитать сальдо по периодам - вы сразу попадаете на закладку пакет. Ставим флаг "Пакетная обработка", выбираем группу пакетов - по ок будет создано пакетное задание. Хотя вручную (через Основное / Запросы / Пакетное задание) вы его вряд ли создадите )
тут то и оно... зачем тогда предусмотрен функционал в Основном... причем в статье, которую мне скинул skuull идет создание задач через форму Batch
Старый 16.06.2015, 13:39   #16  
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   #17  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
ну видимо, придется лезть в кишки...если это баг формы, то ничего страшного (описанным Вами ранее способом же задачи создаются)
Старый 16.06.2015, 14:05   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,438 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На сколько я помню там при открытии лукапа происходит поиск всех классов унаследованных от RunBaseBatch, и для каждого класса создаётся объект для того чтобы вызвать у него метод description() с описанием класса. Получается если в приложении есть классы наследники RunBaseBatch c неправильной структурой метода new(), то будет ошибка.
Старый 16.06.2015, 14:17   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
а как быть то?

"Тупо" подправить те классы, на которых вылетает 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  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от Владимир Максимов Посмотреть сообщение
"Тупо" подправить те классы, на которых вылетает 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, пакетная обработка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
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, время: 02:18.