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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 30.04.2008, 13:15   #1  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Передача временной таблицы в batch
Есть форма, ДС которой - временная таблица редактируемая пользователем. По окончанию редактирования, пользователь жмет кнопку ОК, в класс-наследник RunBaseBatch передается текущий экземпляр таблицы, и дальше собственно идет обработка.

При выборе опции пакетной обработки, джоб успешно добавляeтся в batch list, но при выполнении таблица оказывается пустой. Проблема в том что в джоб нельзя передать просто критерии типа даты и AccountNum, а именно результаты выборки (пользователь удаляeт некоторые записи в процессе перебора).

Последняя попытка, само собой не работает при пакетной обработке, больше идeй пока нет :

X++:
class ProcessRecords extends RunBaseBatch
{
    TmpTable tmpTable;

    #DEFINE.CurrentVersion(1)
    #LOCALMACRO.CurrentList
        tmpTable
    #ENDMACRO
}
X++:
public static void main(Args args)
{
    ProcessRecords    processRecords  = ProcessRecords ::construct();
    ;

    if (args && args.record())
        processRecords .tmpTable(args.record());

    if (processRecords .prompt())
        processRecords.run();

}
help !
__________________
_databaseTransDelete ... bl@$ !
Старый 30.04.2008, 13:20   #2  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Ни чё не понял.
При чём здесь job.
job не для того чтоб из него пакетное задание делать.
Старый 30.04.2008, 13:21   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Разве что запаковать таблицу в класс а-ля RecordSortedList, или List, или Set.

Потом запаковать в контейнер методом .pack(). И сохранить как переменную, как сохраняются обычные переменные в диалоге.
__________________
С уважением,
glibs®
Старый 30.04.2008, 13:22   #4  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Но лучше что-нибудь придумать, чтобы не заниматься таким извращением.
__________________
С уважением,
glibs®
Старый 30.04.2008, 13:24   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Временная таблица таким образом не передастся, т.к. живет на клиенте а не в БД.
IMHO нужно всю таблицу паковать в контейнер и сунуть в CurrentList, затем при выполнении на сервере восстанавливать эту таблицу из контейнера
За это сообщение автора поблагодарили: DTD (1).
Старый 30.04.2008, 13:32   #6  
eugene egorov is offline
eugene egorov
Участник
Аватар для eugene egorov
 
273 / 97 (4) ++++
Регистрация: 05.06.2002
Адрес: Москва
\Data Dictionary\Tables\SalesParm* - вот пример решения подобной проблемы в стандартном функционале
__________________
любитель портвейна и снов с прокисшей капустой в усах
Старый 30.04.2008, 13:41   #7  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от miklenew Посмотреть сообщение
Ни чё не понял.
При чём здесь job.
job не для того чтоб из него пакетное задание делать.
В англ интерфейсе пакетные задания называются Jobs
__________________
_databaseTransDelete ... bl@$ !
Старый 30.04.2008, 13:42   #8  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от eugene egorov Посмотреть сообщение
\Data Dictionary\Tables\SalesParm* - вот пример решения подобной проблемы в стандартном функционале
да это единств. подобие которые нашел в стандартной Аксапте, но там имхо слишком уж сложно все рализовано чтобы быстро скопировать
__________________
_databaseTransDelete ... bl@$ !
Старый 30.04.2008, 13:44   #9  
DTD is offline
DTD
Участник
 
183 / 18 (1) ++
Регистрация: 09.08.2005
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Временная таблица таким образом не передастся, т.к. живет на клиенте а не в БД.
IMHO нужно всю таблицу паковать в контейнер и сунуть в CurrentList, затем при выполнении на сервере восстанавливать эту таблицу из контейнера
да похоже что прийдется что то подобное делать, или временную таблицу сделать постоянной и учесть мультипользовательское использование
__________________
_databaseTransDelete ... bl@$ !
Старый 30.04.2008, 13:53   #10  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от DTD
...
и учесть мультипользовательское использование
...
Не забудьте учесть, что под одним и тем же пользователем можно зайти в Аксапту несколько раз одновременно.

Например, сопоставление открытых проводок по клиентам и поставщикам в таком случае забавно работает. Можно из нескольких клиентов ставить галочки, но сопоставит все это безобразие тот, кто первый нажмет кнопку.

Я тут исключительно для поддержания "спортивной формы" джоб набросал, который реализует вариант с упаковкой в класс. Если интересно, то можете посмотреть для общеобразовательных целей.

X++:
static server void glibs(Args _args)
{
    List            list;
    LedgerTable     ledgerTable;
    container       pack;
    ListEnumerator  listEnumerator;
    ;

    list = new List(Types::Record);

    select ledgerTable
        where ledgerTable.AccountNum == "00.000";
    list.addEnd(ledgerTable.data());
    select ledgerTable
        where ledgerTable.AccountNum == "00.001";
    list.addEnd(ledgerTable.data());

    pack = list.pack();

    listEnumerator = List::create(pack).getEnumerator();

    ledgerTable = null;
    while (listEnumerator.moveNext())
    {
        ledgerTable = listEnumerator.current();
        info (strfmt("%1", ledgerTable.AccountNum));
    }

}
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: DTD (1).
Старый 30.04.2008, 13:55   #11  
e@gle is offline
e@gle
MCTS
MCBMSS
 
164 / 72 (3) ++++
Регистрация: 11.04.2005
Адрес: Минск
Цитата:
да это единств. подобие которые нашел в стандартной Аксапте, но там имхо слишком уж сложно все рализовано чтобы быстро скопировать
Подумайте еще раз над предложением eugene egorov.
Вроде ничего сложного нет. Переводите свою таблицу с временной на постоянную и добавляете идентификатор ParmId.
И вместо целой запакованний таблицы пакуете одну переменную ParmId. И потом легко получаете нужную выборку по ParmId.
__________________
С уважением, Павел Цераниди.
На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.
За это сообщение автора поблагодарили: DTD (1).
Теги
временная таблица, пакетная обработка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
axaptapedia: Batch processing Blog bot DAX Blogs 0 29.01.2009 17:05
Динамическое связывание временной таблицы Paul_ST DAX: Программирование 8 25.09.2007 16:17
Проблема с очисткой временной таблицы v.fedorov DAX: Программирование 13 26.10.2006 23:02
Передача временной таблицы 6apcyk DAX: Программирование 11 09.08.2006 17:32
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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