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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.04.2011, 10:32   #1  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Пакетное задание
Добрый день. Возникли трудности с пакетным заданием. AX2009. Создал пакетный класс:
X++:
class S_RemoveOldRecordsBatch extends RunBaseBatch
{
    anytype dummy;
    #define.CurrentVersion(1)
    #define.Version1(1)
    #localmacro.CurrentList
        dummy
    #endmacro
}
X++:
void DelOldRecords()
{
    S_CustVendCommon s_CustVendCommon;
    ;

    ttsbegin;
    while select forupdate s_CustVendCommon
     where  (s_CustVendCommon.NoYesCombo == NoYesCombo::Yes)
     {
        if( intvNo(Today(), s_CustVendCommon.TransDate, intvScale::YearMonth) >= 1)
        {
            s_CustVendCommon.delete();
        }
     }

    ttscommit;
}
X++:
public container pack()
{
    return connull();
}
X++:
public boolean unpack(container packedClass)
{
   return true;
}
X++:
static void main(Args _args)
{
    S_RemoveOldRecordsBatch s_RemoveOldRecordsBatch = new S_RemoveOldRecordsBatch();
    ;
    s_RemoveOldRecordsBatch.DelOldRecords();

}
Все по сути весь класс, при ручном запуске работает при пакетной обработке нет, в свойствах класса указано запускать на сервере.
Для пакетного задания выбрана пакетная группа,
Указано запускать на сервере,
Указан АОС, который является сервером пакетной обработки и выбранная группа входит в этот АОС. Ошибок в журнале нет.
Старый 08.04.2011, 10:42   #2  
kornix is offline
kornix
MCP
MCBMSS
Злыдни
Ex AND Project
 
414 / 146 (5) +++++
Регистрация: 24.02.2009
Адрес: Санкт-Петербург
Можете поставить точку останова в методе s_RemoveOldRecordsBatch.DelOldRecords() и запустить выполнение в пакетном режиме (т.е. после запуска задание повеситься в пакет, а потом толкните выполнение пакетной группы вручную).
Вообще у вас пустые методы pack и unpack, т.е. при распаковке класса на сервере ничего нет. Попробуйте перекрыть эти методы вот так:
X++:
public container pack()
{
    ;
    return [#CurrentVersion];
}
X++:
public boolean unpack(container packedClass)
{
    Version     version = RunBase::getVersion(packedClass);
    container   queryCon;
    ;

    switch (version)
    {
        case #CurrentVersion:
            [version] = packedClass;
            break;
        default:
            return false;
    }

    return true;
}
Старый 08.04.2011, 10:42   #3  
Damn is offline
Damn
Участник
 
436 / 154 (6) ++++++
Регистрация: 28.05.2003
Адрес: в глуши
Прикольно. Я помню тоже попадал на такую подставу. В классах-наследниках RunBaseBatch нужно все действия вписывать в run(). Именно этот метод вызывается пакетным сервером.
__________________
Дмитрий
За это сообщение автора поблагодарили: AngelDominantes (1).
Старый 08.04.2011, 11:11   #4  
AngelDominantes is offline
AngelDominantes
Участник
 
76 / 9 (1) +
Регистрация: 30.12.2010
Цитата:
Сообщение от Damn Посмотреть сообщение
Прикольно. Я помню тоже попадал на такую подставу. В классах-наследниках RunBaseBatch нужно все действия вписывать в run(). Именно этот метод вызывается пакетным сервером.
Спасибо все заработало)
Старый 08.04.2011, 11:32   #5  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
другой вариант
Аналогичный эффект получается, если в getFromDialog не вызвать super.

--------
понимаю, что не в тему, но вдруг кому понадобится
Старый 08.04.2011, 15:06   #6  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,701 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Если опустить частности, то выполнение класса через пакетное задание происходит следующим образом

X++:
batchClass = classfactory.createClass(classId);
batchClass.parmInBatch(true);
batchClass.unpack(...);
batchClass.run();
Ну, а если надо с частностями, то это метод BatchRun::runJobStatic()

Как видно из общей схемы, при запуске класса из сервера пакетной обработки, переменная inBatch принимает значение true. Опираясь на этот факт можно в самом начале метода run() "вручную" запустить те методы, которые "в обычном" состоянии запускаются из main().
Теги
batch, runbasebatch, как правильно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как сделать: пакетное задание в AX 2009 чаще 3 минут EVGL DAX: Администрирование 14 15.04.2011 10:43
Пакетное задание в статусе "Выполнение" висит больше 4 дней. Poleax DAX: Функционал 4 19.08.2010 14:11
Снять задание сервера пакетной обработки fomenka DAX: Программирование 9 24.04.2007 14:33
заключительное задание в модуле "Производство"... netbas DAX: Функционал 0 16.03.2005 15:42
Как создать задание на транспортировку палет (отгрузки)? mav DAX: Функционал 8 01.10.2004 11:48

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

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

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