13.10.2008, 17:08 | #1 |
Moderator
|
Некоректная распаковка запроса
Добрый день!
Хотелось бы разобраться в интересной ситуации: Я написал тестовый класс (TestPacket) для выгрузки номеклатуры, класс потомок RunBaseBatch, использует Query для динамического выбора даты модификации. Query создан в AOT (TestQuery) и имеет метод init в котором по умолчанию всегда для inventTable.ModifiedDate проставляется фиксированный период. Класс прекрасно работает в обычном режиме, но в пакетном дает сбой - все параметры хорошо пакуются и распаковываются, а потом непонятно где вызывается метод init TestQuery и заданный пользователем период перетирается тем который по умолчанию задан в query. Стало интересно - в какой момент перетирается распакованный query. Запустить и посмотреть достаточно просто, объекты автономные, главное чтобы на InventTable был включен modifiedDate. Можно поставить точки останова в местах отмеченных "// for debagger" и смотреть значение qbds - период должнен оставаться тот который задан пользователем. Спасибо! Upd: Поправил класс, была описка с названием таблицы. Последний раз редактировалось DreamCreator; 13.10.2008 в 17:30. |
|
13.10.2008, 18:49 | #2 |
Участник
|
При упаковке Query сохраняется информация об объекте AOT, на основе которого он был создан.
Когда происходит вызов new QueryRun(Query), для Query вызывается метод Init(), который перетирает ранее восстановленный из контейнера range. Варианта решения два - в Init() проверять range и инициализировать только если value() пустой. Либо, не пересоздвать QueryRun, а заменять в нем Query X++: if(this.isInBatch())
queryRun.query(unPackedQuery);
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: kashperuk (3), DreamCreator (2). |
13.10.2008, 19:03 | #3 |
Участник
|
Не знаю мож не из этой оперы и не пригодиться, но навсякий случай напишу.
Как то создавал класс. На входе baseEnum. Потом диалог, потом run. Так вот если запускаю в режиме клиента всё ок. Если в режиме server, BaseEnum в какой-то момент обнуляется. Исправил так. Перед if(класс.promt()) вызываю класс.SaveLast().
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему. |
|
|
За это сообщение автора поблагодарили: DreamCreator (2). |
13.10.2008, 22:08 | #4 |
Модератор
|
Настройка - параметры - использование данных - сбросить - уверен - все пучком.
Было неднократно. С Уважением, Георгий |
|
|
За это сообщение автора поблагодарили: DreamCreator (2). |
14.10.2008, 09:31 | #5 |
Moderator
|
Спасибо, все получилось!
Цитата:
Цитата:
тоже не оставит его пустым, а если оставит, то специально. Цитата:
Спасибо! Для enun-ов буду иметь в виду! Я сначала тоже на кэш думал Оказывается query как объект AOT ведет себя особенно! |
|
14.10.2008, 09:51 | #6 |
Участник
|
Цитата:
А если так проверять? X++: if(qbr && !qbr.value())
qbr.value(SysQuery::range(systemDateGet() - 2 , systemDateGet())); В RunBase для этого есть метод InitParmDefault(), который вызывается только при отсутствии упакованных данных.
__________________
Axapta v.3.0 sp5 kr2 |
|
14.10.2008, 10:16 | #7 |
Moderator
|
Цитата:
Сообщение от AndyD
Хм.
А если так проверять? X++: if(qbr && !qbr.value())
qbr.value(SysQuery::range(systemDateGet() - 2 , systemDateGet())); В RunBase для этого есть метод InitParmDefault(), который вызывается только при отсутствии упакованных данных. [текущая дата - 2, текущая дата] - для этого подходило решение с инициализацией параметров Query в init пока не обратили внимание не некорректную работу в пакетном режиме при задании иных пользовательских параметров. Понятно что можно было налету в методе run подставлять нужный период, но хотелось сделать все явно и компактно - в одном объекте query. Сейчас думаю разбить логику пакетной обработки на ежедневную (с фиксированным периодом) и особую, при которой пользователь сам вводит нужные ему параметры. InitParmDefault - попробовал, буду использовать! |
|
Теги |
ax3.0 |
|
Похожие темы | ||||
Тема | Ответов | |||
Изменить план выполнения запроса | 2 | |||
Быстродействие запроса | 1 | |||
Оптимизация запроса | 16 | |||
Теория: Создание отчета в виде Запроса | 6 | |||
Ускорение выполнения запроса Oracle + MS Axapta | 17 |
|