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
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,843 / 3751 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
класс 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,398 / 885 (32) +++++++
Регистрация: 13.01.2004
Цитата:
Сообщение от 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 = (...);
}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 16.06.2015, 12:06   #6  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Владимир Максимов, я имел ввиду, что я пытаюсь выбрать класс в форме Batch, когда определяю список задач пакета (см. картинку). При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...

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

Последний раз редактировалось Vasiliusis; 16.06.2015 в 12:27.
Старый 16.06.2015, 12:10   #7  
mazzy is offline
mazzy
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,843 / 3751 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от 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
Administrator
Аватар для mazzy
Most Valuable Professional
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
28,843 / 3751 (183) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Цитата:
Сообщение от 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
 
1,724 / 892 (33) +++++++
Регистрация: 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
 
1,724 / 892 (33) +++++++
Регистрация: 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
 
455 / 183 (7) ++++++
Регистрация: 11.09.2007
Цитата:
Сообщение от 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
 
455 / 183 (7) ++++++
Регистрация: 11.09.2007
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,136 / 1545 (58) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
На сколько я помню там при открытии лукапа происходит поиск всех классов унаследованных от RunBaseBatch, и для каждого класса создаётся объект для того чтобы вызвать у него метод description() с описанием класса. Получается если в приложении есть классы наследники RunBaseBatch c неправильной структурой метода new(), то будет ошибка.
Старый 16.06.2015, 14:17   #19  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,398 / 885 (32) +++++++
Регистрация: 13.01.2004
Цитата:
Сообщение от 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, время: 17:26.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.