События элемента диаграммы бизнес-процесса повторяются. Почему?

Создал простой бизнес процесс. Начало-открытие окна-завершение.
Прописал

function Action1OnAfterExecute(ActionItem, IsComplete) {
        ShowInformationDialog('after');

function Action1OnBeforeExecute(ActionItem) {
        ShowInformationDialog('before');
}

Получилось что сначала выполняется событие OnBeforeExecute, отрывается окно, сразу же выполняется событие OnAfterExecute. Потом когда нажимаю кнопку ОК в карточке опять уже после закрытия карточки выполняется OnBeforeExecute и сразу же OnAfterExecute. Хотя по логике
OnBeforeExecute должно выполнятся до окрытия карточки, а OnAfterExecute после закрытия. И как понять в самом OnBeforeExecute когда он вызывается до открытия окна или уже после закрытия?
В OnAfterExecute можно вычислить по параметру IsComplete. А в OnBeforeExecute такого параметра почему-то нет.

Нравится

2 комментария

Здравствуйте, Андрей.

По поводу OnAfterExecute - это базовая логика системы. Функция обработчик данного события выполняется два раза: после открытия карточки редактирования, и после ее закрытия. Отследить, как Вы верно заметили, можно по входящему параметру IsComplete.

По поводу "двойного" выполнения OnBeforeExecute - Ваше обращение передано в департамент разработки для анализа. Обязательно опубликую здесь ответ.

Ситуация следующая. Заглянув в код wa_OpenWindow мы увидим, что окно показывается методом Show(), а не ShowModal(). Это сделано для того, чтобы пользователь смог продолжать работать с текущей задачей, а не сразу переключиться на созданную в рамках БП. Что же касается программной реализации:
скрипт вызвал метод Show() и пошел дальше, вернулся в ядро, в которое пришло значение IsComplete = false и вызвал AfterExecute. Далее, когда пользователь выполнил шаг в этом окне – вызывается ProcessWorkflowItem, который делает Execute, и уже возвращается значение IsComplete = true

P.S. Если реализовать показ окна через ShowModal, то события сгенерируются 1 раз

P.P.S. Существует запрос на изменение, в котором будет доработано событие OnBeforeExecute: добавить параметр IsFirstTime.

Показать все комментарии