OnChangeDocStatus - Событие на изменение статуса документа
Событие на изменение статуса документа.
По данному событию в системе организуются проталкивание бизнес-процесса вперед. Основная техника предполагает, что при переходе процесса в новое состояние, система формирует новый набор задач, которые требуются для продолжения бизнес-процесса. Также по данному событию может быть организовано формирование итоговых документов, которые завершают бизнес-процесс.
Событие вызывается для документа, у которого изменен статус. Предназначено, для возможности формирования бизнес-логики на изменение статуса документа. При этом новый установленный статус передается в событие. Нужно заметить, что Статус документа может быть изменен только программным способом. Для этого используется функция src/om/chdocsta.p. При этом, один и тот же статус документу может быть установлен несколько раз. Система фиксирует все изменения статуса по времени, дате и пользователя изменившего статус документа.
Событие имеет код возврата. Если событие возвращает код ERROR, то установка нового статуса документа отменяется и выполненные в событии действия системой автоматически отменяются (откат).
Если событие возвращает флаг ОК, то действия выполненные событием принимаются и документ принимает новый статус.
Замечание. Система в состоянии откатить только действия связанные с изменением Базы данных системы. Если событие на изменение статуса формирует некий внешний файл, то в случае возврата флага ERROR, он удален не будет.
Синтаксис события:
PROCEDURE OnChangeDocStatus :
define input parameter rid-doc as integer.
define input parameter new-status as character.
Где rid-doc – внутренний номер документа, у которого изменен статус
new-status – новый статус документа – это любая символьная строка. Например «В работе», или «Отгружен».
Пример использования:
PROCEDURE OnChangeDocStatus :
define input parameter rid-doc as integer.
define input parameter new-status as character.
run src/kernel/set_ffv.p ( "1:29", rid-doc, new-status ).
if new-status = "Unload done"
then do:
run src/kernel/sendevnt.p ( rid-doc, 8 ).
end.
if new-status = "Done"
then do:
run src/kernel/set_ffv.p ( "1:30", rid-doc, "yes" ).
run CreateAkt ( rid-doc ).
end.
return "OK".
END.