30.04.2008, 13:15 | #1 |
Участник
|
Передача временной таблицы в 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(); }
__________________
_databaseTransDelete ... bl@$ ! |
|
30.04.2008, 13:20 | #2 |
Участник
|
Ни чё не понял.
При чём здесь job. job не для того чтоб из него пакетное задание делать. |
|
30.04.2008, 13:21 | #3 |
Member
|
Разве что запаковать таблицу в класс а-ля RecordSortedList, или List, или Set.
Потом запаковать в контейнер методом .pack(). И сохранить как переменную, как сохраняются обычные переменные в диалоге.
__________________
С уважением, glibs® |
|
30.04.2008, 13:22 | #4 |
Member
|
Но лучше что-нибудь придумать, чтобы не заниматься таким извращением.
__________________
С уважением, glibs® |
|
30.04.2008, 13:24 | #5 |
Боец
|
Временная таблица таким образом не передастся, т.к. живет на клиенте а не в БД.
IMHO нужно всю таблицу паковать в контейнер и сунуть в CurrentList, затем при выполнении на сервере восстанавливать эту таблицу из контейнера |
|
|
За это сообщение автора поблагодарили: DTD (1). |
30.04.2008, 13:32 | #6 |
Участник
|
\Data Dictionary\Tables\SalesParm* - вот пример решения подобной проблемы в стандартном функционале
__________________
любитель портвейна и снов с прокисшей капустой в усах |
|
30.04.2008, 13:41 | #7 |
Участник
|
В англ интерфейсе пакетные задания называются Jobs
__________________
_databaseTransDelete ... bl@$ ! |
|
30.04.2008, 13:42 | #8 |
Участник
|
да это единств. подобие которые нашел в стандартной Аксапте, но там имхо слишком уж сложно все рализовано чтобы быстро скопировать
__________________
_databaseTransDelete ... bl@$ ! |
|
30.04.2008, 13:44 | #9 |
Участник
|
да похоже что прийдется что то подобное делать, или временную таблицу сделать постоянной и учесть мультипользовательское использование
__________________
_databaseTransDelete ... bl@$ ! |
|
30.04.2008, 13:53 | #10 |
Member
|
Цитата:
Сообщение от 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 |
MCTS
|
Цитата:
да это единств. подобие которые нашел в стандартной Аксапте, но там имхо слишком уж сложно все рализовано чтобы быстро скопировать
Вроде ничего сложного нет. Переводите свою таблицу с временной на постоянную и добавляете идентификатор ParmId. И вместо целой запакованний таблицы пакуете одну переменную ParmId. И потом легко получаете нужную выборку по ParmId.
__________________
С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага. |
|
|
За это сообщение автора поблагодарили: DTD (1). |
Теги |
временная таблица, пакетная обработка |
|
Похожие темы | ||||
Тема | Ответов | |||
axaptapedia: Batch processing | 0 | |||
Динамическое связывание временной таблицы | 8 | |||
Проблема с очисткой временной таблицы | 13 | |||
Передача временной таблицы | 11 |
|