06.08.2024, 16:40 | #1 |
Участник
|
Сделать батч для release vendor catalog
Есть форма catVendorCatalogReleaseApprovedProducts
По кнопке ОК запускается , собственно, release Хотят, чтобы на той же форме была добавлена опция run in the background, чтобы запускать процесс в батче Я не понимаю следующее: 1) Как добавить в форму такой диалог, он же создается обычно самим в runBaseBatch. Это, имхо, невозможно. Можно предложить : а) добавить отдельную кнопку(menuItem), что будет запускать runBaseBatch и показывать нужный диалог или б) по кнопке Ok (при закрытии формы) запускать runBaseBatch и и показывать этот диалог (клиент хочет, чтобы сразу на форме было, без дополнительных диалогов и кнопок) 2) Почему в стандарте не предусмотрена пакетная обработка для release из каталога поставщика? Может, есть повод для этого? Я смотрю класс EсoRedProductReleaseManager и немного беспокоюсь ,тк там всякие проверки на сессии и где выполняется код и тд. То есть, все совсем нетривиально, поэтому боюсь дров наломать, если кастомный батч напишу, как просят. Зря опасаюсь? Если зря. то что надо иметь ввиду, чтобы корректно это сделать и не было дэдлоков или какие-то иных проблем, для кот sessionId там как параметр введен Последний раз редактировалось Lankey; 06.08.2024 в 16:46. |
|
06.08.2024, 19:36 | #2 |
северный Будда
|
Диалог RunBaseBatch нужен не только, чтобы увести обработку в фон, но и для настройки периодичности этой обработки в фоне. А периодичность к форме с данными привязать не получится. Поэтому кмк не нужен вам тот штатный диалог.
__________________
С уважением, Вячеслав |
|
06.08.2024, 23:23 | #3 |
Участник
|
Физически, пакетное задание - это просто запись в таблице Batch. Далее соответствующая служба просматривает записи этой таблицы и используя сохраненные в ней настройки, запускает на выполнение соответствующий класс
Диалог от RunBaseBatch - это всего-лишь интерфейс для заполнения определенных реквизитов в создаваемой записи Т.е. Ваша задача - это как раз сформировать запись таблицы Batch, используя те или иные инструменты В общем случае, можно вообще без дополнительного класса, примерно так X++: MyClass taskBatch; BatchHeader batchHeader; // Класс, который надо запустить в пакетном задании. Наследник от RunBase taskBatch = new MyClass(); taskBatch.parm_1(xxx); taskBatch.parm_2(yyy); // Создание пакетного задания, которое запустится "немедленно" batchHeader = BatchHeader::construct(); batchHeader.addTask(taskBatch); batchHeader.parmStartDateTime(DateTimeUtil::utcNow()); batchHeader.save(); Но, поскольку, все-равно придется делать "оболочку" над классом "release", то реквизиты пакетного задания указываются через объект runBaseBatch.batchInfo() а собственно создание пакетного задания - это команда X++: runBaseBatch.batchInfo().parmBatchExecute(true);
runBaseBatch.doBatch();
__________________
- Может, я как-то неправильно живу?! - Отчего же? Правильно. Только зря... |
|
|
За это сообщение автора поблагодарили: S.Kuskov (10), Lankey (1). |
07.08.2024, 09:03 | #4 |
Участник
|
Цитата:
Немного не поняла Ваш ответ. Клиент хочет , чтобы стандартный диалог запуска в пакете был "интегрирован" в форму catVendorCatalogReleaseApprovedProducts (как на картинке во вложении) Вы имеете ввиду, что для запуска с этой формы периодичность не имеет смысла? |
|
07.08.2024, 19:02 | #5 |
северный Будда
|
Володя Максимов выше уже подробно ответил
Посмотрите ещё раз на этот диалог. По сути, вам там нужна только галочка "Batch processing". Всё остальное поля больше информационные, без них спокойно можно обойтись. А кнопки Recurrence и Alerts вам, как я понял, и вовсе не нужны. Поэтому да, я бы обошёлся одним чекбоксом и убедил в этом покупателя. А как создать батч из кода - см пост Владимира, там хорошо расписано. Кстати, если у вас в форме много строк для обработки, и эти строки независимы друг от друга, то я бы дополнительно задумался над многопоточкой. Вот, например, можно посмотреть - https://d365technext.blogspot.com/20...365fo-ax7.html
__________________
С уважением, Вячеслав |
|
|
За это сообщение автора поблагодарили: Lankey (1). |