04.12.2012, 12:44 | #1 |
Участник
|
Задвоение экземпляров Workflow
Столкнулся со странной ситуацией, при запуске утверждения, например закупки, происходит создание 2-х (3-х, 4-х) абсолютно одинаковых экземпляров Workflow.
Кто нибудь сталкивался с подобным? Это можно как то победить? |
|
04.12.2012, 12:47 | #2 |
Участник
|
А у вас корректно сделана проверка на возможность запуска Workflow по документу? Может, просто пользователь несколько раз нажимает на отправку?
__________________
Ivanhoe as is.. |
|
04.12.2012, 12:52 | #3 |
Участник
|
Исключено....после нажатия на кнопку, пользователю выдается еще одна форма, где он должен добавить комментарий, и нажать на еще одну кнопку. Более того, я на момент нажатия вешал перебор 100000 записей LedgerTrans. чтобы имитировать "тормоза системы" и в момент этого несколько раз нажимал на кнопку. Запустился только один экземпляр.
|
|
04.12.2012, 13:14 | #4 |
Участник
|
А параллельно разные люди не могли запустить несколько раз? Если запись не перечитывается в классе создания экземпляра Workflow, то проверка на статус может все равно не отработать.
__________________
Ivanhoe as is.. |
|
04.12.2012, 13:27 | #5 |
Участник
|
возможно....сейчас попробую с имитировать...
|
|
04.12.2012, 13:57 | #6 |
Участник
|
Сейчас посмотрел, но не запуск из под разных пользователей, а нашел пример, где по одной закупке запустилось 4 экземпляра Workflow, из под одного пользователя, с интервалом в 4-5 секунд
|
|
05.12.2012, 09:39 | #7 |
Участник
|
Оказалось, что разные пользователи могут параллельно запустить несколько экземпляров, но эта проблема решаемая, а вот что делать с несколькими экземплярами из под одного пользователя....?
|
|
05.12.2012, 10:21 | #8 |
Модератор
|
Было починено в SP1 RU7 (речь ведь о AX 2009, насколько я понимаю ?)
__________________
-ТСЯ или -ТЬСЯ ? |
|
05.12.2012, 11:32 | #9 |
Участник
|
|
|
05.12.2012, 12:03 | #10 |
Модератор
|
У нас такого не возникало. Возможно, починили
__________________
-ТСЯ или -ТЬСЯ ? |
|
05.12.2012, 13:52 | #11 |
Участник
|
Можно ссылку? Я видел выход нескольких HF для конкретных стандартных документов. Так они сводились к buffer.reread() перед вызовом .canSubmit().
__________________
Ivanhoe as is.. |
|
05.12.2012, 14:54 | #12 |
Модератор
|
Оно ?
__________________
-ТСЯ или -ТЬСЯ ? |
|
05.12.2012, 15:03 | #13 |
Участник
|
Именно! Это касается конкретно одного документа - Заявки на покупку и решено именно reread() перед непосредственно отправкой. Т.е. даже если в интерфейсе кнопочка у пользователя доступна, то отругается на попытке заново запустить WF (по статусу).
__________________
Ivanhoe as is.. |
|
05.12.2012, 17:26 | #14 |
Участник
|
А вы не могли бы указать в каком классе должно вызываться reread()? У меня просто нет доступа на прочтение указанной ссылки...
|
|
06.12.2012, 15:24 | #15 |
Участник
|
Говорим про заявки на покупку - так?
Класс PurchReqWorkflow. Метод 1: X++: void submit() { Object purchReqTable_ds; NoYes activatingFromWeb; boolean canSubmit; ; canSubmit = PurchReqWorkflow::canSubmit(purchReqTable); if(canSubmit) {... X++: public static boolean canSubmit(PurchReqTable purchReqTable) { PurchReqLine purchReqLine; boolean canSubmit = true; PurchReqParameters purchReqParameters = PurchReqParameters::find(); VendTable vendtable; ; purchReqTable.reread(); if (purchReqParameters.HeaderBusinessJustification) { if (PurchReqBusJustification::find(purchReqTable.TableId, purchReqTable.RecId).BusinessJustification == '') { canSubmit = checkFailed("@SYS110605"); } } if(!(purchReqTable.State == PurchReqWorkflowState::NotSubmitted || purchReqTable.State == PurchReqWorkflowState::Returned || purchReqTable.State == PurchReqWorkflowState::ChangeRequest)) { throw error("@SYP4572"); } ...
__________________
Ivanhoe as is.. |
|
06.12.2012, 17:27 | #16 |
Участник
|
Цитата:
Сообщение от Ivanhoe
Говорим про заявки на покупку - так?
Класс PurchReqWorkflow. Метод 1: X++: void submit() { Object purchReqTable_ds; NoYes activatingFromWeb; boolean canSubmit; ; canSubmit = PurchReqWorkflow::canSubmit(purchReqTable); if(canSubmit) {... X++: public static boolean canSubmit(PurchReqTable purchReqTable) { PurchReqLine purchReqLine; boolean canSubmit = true; PurchReqParameters purchReqParameters = PurchReqParameters::find(); VendTable vendtable; ; purchReqTable.reread(); if (purchReqParameters.HeaderBusinessJustification) { if (PurchReqBusJustification::find(purchReqTable.TableId, purchReqTable.RecId).BusinessJustification == '') { canSubmit = checkFailed("@SYS110605"); } } if(!(purchReqTable.State == PurchReqWorkflowState::NotSubmitted || purchReqTable.State == PurchReqWorkflowState::Returned || purchReqTable.State == PurchReqWorkflowState::ChangeRequest)) { throw error("@SYP4572"); } ... |
|
|
|