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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2015, 11:53   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 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   #2  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Владимир Максимов, я имел ввиду, что я пытаюсь выбрать класс в форме Batch, когда определяю список задач пакета (см. картинку). При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...

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

Последний раз редактировалось Vasiliusis; 16.06.2015 в 12:27.
Старый 16.06.2015, 12:45   #3  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,164 / 1296 (48) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от Vasiliusis Посмотреть сообщение
[При этом, вылетает дебаггер не дождавшись выпадения лукапа (на скрине ранее)...
Это естествено. Для того чтобы появился лукап в этой форме, DAX перебирает все классы наследники RunBaseBatch и чтобы определить можно ли этот класс использовать в журналах пакетных заданий, пытается создать объект этого класса и вызвать его метод canGoBatchJournal. Вот при создании через SysDictClass вызывается метод new, DAX в этом случае не передает параметры, но как сами видите, у этого класса параметр ожидается.
Старый 16.06.2015, 13:02   #4  
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   #5  
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   #6  
Vasiliusis is offline
Vasiliusis
Участник
 
225 / 13 (1) ++
Регистрация: 30.01.2013
Цитата:
Сообщение от d&m Посмотреть сообщение
на диалоге многих функций есть закладка Пакет - так и были добавлены
пример Главная книга / Периодические операции / Пересчитать сальдо по периодам - вы сразу попадаете на закладку пакет. Ставим флаг "Пакетная обработка", выбираем группу пакетов - по ок будет создано пакетное задание. Хотя вручную (через Основное / Запросы / Пакетное задание) вы его вряд ли создадите )
тут то и оно... зачем тогда предусмотрен функционал в Основном... причем в статье, которую мне скинул skuull идет создание задач через форму Batch
Старый 16.06.2015, 14:17   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,715 / 1204 (44) ++++++++
Регистрация: 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   #8  
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, время: 01:51.