Разработка в Облик Saas>Програмирование в Oblik-SaaS>События документа>OnChangeTaskStatus - Событие на изменение статуса Задачи
Начать работу

OnChangeTaskStatus - Событие на изменение статуса Задачи

Событие на изменение статуса Задачи.

Данное событие приходит для документа-задачи связанное с задачей, а также для документа бизнес-процесса связанное с задачей.

Событие имеет выход. Если вернуть RETURN “ERROR”, то проводится отмена установки нового статуса задачи с одновременным откатом всех выполненных действий в событии.

Если вернуть «ОК», то внесенные событием изменения – принимаются и задача переходит в новый статус.

При этом, событие приходит в очередности. Сначала оно посылается документу заданию, а затем документу бизнес-процесса. Если документ-задача вернула флаг ошибки, то Событие для документ Бизнес-процесса не вызывается. Если, Документ Бизнес-процесса вернул статус ошибки, то для действий выполненных в документе-задачи, будет проведен откат транзакции.

Основная техника использования данного события для документов-задач – есть исполнение действий в системе по завершению задачи. Например, при завершении задачи по перемещению товара, необходимо по системе провести уход товара из одной ячейки склада и принять товар в другую ячейку склада. Кроме этого, данное событие используется для формирования итоговых данных по исполнению задачи (Кто исполнял, какая трудоемкость задачи) и.т.д.

Основная техника использования данного события для документов бизнес-процесса – это проверка состояния процесса. Определение, в каком состоянии сейчас находиться процесс, и стоит ли бизнес-процесс перевести  в следующее состояние. Здесь может быть задействована функция - rtskdone.p позволяющая определить завершились ли все связанные задачи заданного типа.

Например, логика поведения может быть следующей. Заказ покупателя требует комплектации, и система с использованием правил создала несколько связанных с заказом заданий на комплектацию. По завершению каждого из задания по комплектации, система проверяет завершены ли все задания на комплектацию, и когда обнаруживает, что последняя задача комплектации Завершена – Переводит статус Заказа в состояние «Скомплектован», По переводу в данный статус система может создать следующий набор задач, которые требуются для продолжения бизнес процесса … Например задание на контроль, или задание на перемещение.

Фактически 2 события OnChangeDocStatus и OnChangeTaskStatus – являются универсальным средством реализации методологии Workflow. Но здесь основной упор делается, не на задание строгих правил поведения (через внешние настройки), а на гибкую программируемую бизнес-логику, которая позволяет реализовать любой бизнес-процесс.

Синтаксис события:

PROCEDURE OnChangeTaskStatus :                  
 define input parameter rid-main as integer.    
 define input parameter new-status as character.
 define input parameter rid-doc as integer.   

где, Для документа бизнес-процесса – rid-doc – это текущий документ бизнес-процесс, а rid-main – это документ-задача. Для документа задачи – rid-doc – это текущий документ задача. А rid-main – документ бизнес-процесса. New-status – Это статус устанавливаемый задаче из набора “0”- Не началась, “1”-В работе”, “2” – Завершена, “3” – Отложена, “4” – В ожидании.

Пример Использования:

PROCEDURE OnChangeTaskStatus :                  
 define input parameter rid-main as integer.    
 define input parameter new-status as character.
 define input parameter rid-doc as integer.     
 
 def var rid-task as integer.
 def var idoper as integer.
 def var docstatus as character.
 def var rows as integer.
 def var contr-vigr as character.
 
 if new-status = "1"
 then do:
  run src/wms/doc2tsk.p ( rid-doc, OUTPUT rid-task ).
  run src/wms/tsk2to.p ( rid-task, OUTPUT idoper ).  
  if idoper = 1
  then do:
   run src/wms/chdocsta.p ( rid-main, "Upload start", "" ).
  end.
 end.
 
 if new-status = "2" /* Task Done */   
 then do:                                              
  run src/wms/gtdocsta.p ( rid-main ).                 
  docstatus = RETURN-VALUE.                            
  run src/wms/doc2tsk.p ( rid-doc, OUTPUT rid-task ).  
  run src/wms/tsk2to.p ( rid-task, OUTPUT idoper ).    
 
  run src/wms/rtskdone.p ( rid-main, idoper ).         
  if RETURN-VALUE = "NO" /* not all done */
    then RETURN "OK".                                       
  if idoper = 1  /* Unload task  */              
  then do:
     run src/wms/chdocsta.p ( rid-main, "Unload done", "" ).
     if RETURN-VALUE = "ERROR" then RETURN "ERROR".  
  end.                                                 
  if idoper = 2
  then do:
   run src/wms/chdocsta.p ( rid-main, "Control task done", "" ).
   if RETURN-VALUE = "ERROR" then RETURN "ERROR".  
  end.
  if idoper = 3
  then do:
   run src/wms/rtskdone.p ( rid-main, 1 ).
   if RETURN-VALUE = "NO" then RETURN "OK".  /* Unload is not done */
   run src/wms/rtskdone.p ( rid-main, 2 ).
   if RETURN-VALUE = "NO" then RETURN "OK".  /* Control task is not done */
   run src/wms/chdocsta.p ( rid-main, "Done", "" ).
   if RETURN-VALUE = "ERROR" then RETURN "ERROR".
  end.
 end.
 RETURN "OK".
 
END.