События элемента диаграммы бизнес-процесса повторяются. Почему?
Создал простой бизнес процесс. Начало-открытие окна-завершение.
Прописал
ShowInformationDialog('after');
function Action1OnBeforeExecute(ActionItem) {
ShowInformationDialog('before');
}
Получилось что сначала выполняется событие OnBeforeExecute, отрывается окно, сразу же выполняется событие OnAfterExecute. Потом когда нажимаю кнопку ОК в карточке опять уже после закрытия карточки выполняется OnBeforeExecute и сразу же OnAfterExecute. Хотя по логике
OnBeforeExecute должно выполнятся до окрытия карточки, а OnAfterExecute после закрытия. И как понять в самом OnBeforeExecute когда он вызывается до открытия окна или уже после закрытия?
В OnAfterExecute можно вычислить по параметру IsComplete. А в OnBeforeExecute такого параметра почему-то нет.
Нравится
Здравствуйте, Андрей.
По поводу OnAfterExecute - это базовая логика системы. Функция обработчик данного события выполняется два раза: после открытия карточки редактирования, и после ее закрытия. Отследить, как Вы верно заметили, можно по входящему параметру IsComplete.
По поводу "двойного" выполнения OnBeforeExecute - Ваше обращение передано в департамент разработки для анализа. Обязательно опубликую здесь ответ.
Ситуация следующая. Заглянув в код wa_OpenWindow мы увидим, что окно показывается методом Show(), а не ShowModal(). Это сделано для того, чтобы пользователь смог продолжать работать с текущей задачей, а не сразу переключиться на созданную в рамках БП. Что же касается программной реализации:
скрипт вызвал метод Show() и пошел дальше, вернулся в ядро, в которое пришло значение IsComplete = false и вызвал AfterExecute. Далее, когда пользователь выполнил шаг в этом окне – вызывается ProcessWorkflowItem, который делает Execute, и уже возвращается значение IsComplete = true
P.S. Если реализовать показ окна через ShowModal, то события сгенерируются 1 раз
P.P.S. Существует запрос на изменение, в котором будет доработано событие OnBeforeExecute: добавить параметр IsFirstTime.