Возникла необходимость в Workflow по утверждению заказа (сценарий WS00800238) ограничить период, в течении которого пользователь может утвердить или отклонить его. В процессе поиска решения выяснилось, что функционал Flexible Workflow в облачном SAP шире. В S4HANA ON PREMISE 02.2023 удалось решить следующим образом:

Далее в Fiori добавили вызов действия timeout по истечению фиксированного времени — для теста поставили 3 минуты.

В результате, по истечению времени deadline вызывается метод CL_SWF_FLEX_IFS_RUN_APPL_BASE->IF_SWF_FLEX_IFS_RUN_APPL_STEP~ON_CREATION_CALLBACK
Остаются только технические детали
Убеждаемся, что iv_step_id это ‘ReleasePO‘, iv_deadline_action_id равен ‘timeout‘.
Определяем номер текущей задачи
1 |
lv_wiid = CAST if_swf_utl_introspection( io_context->get_task_container( ) )->get_bus_key( ). |
Номер заказа можно получить из контейнера workflow
1 2 3 |
io_context->get_workflow_container( )->get( EXPORTING name = gc_element IMPORTING value = lv_ebeln returncode = DATA(lv_returncode) ). |
Помечаем текущую задачу как выполненная
1 2 3 4 5 6 7 |
DATA(lo_po) = NEW cl_mm_pur_wf_object_po( iv_object_id = CONV #( lv_wiid ) ). lo_po->reject_po( lv_ebeln ). lo_po->set_workitem_executed( EXPORTING iv_wiid = lv_wiid iv_decision = if_mm_pur_workflow_c=>gc_workitem_rejected_event iv_note = lv_note IMPORTING es_return = ls_return ). io_log_handle->set_message_to_log( CORRESPONDING #( sy ) ). |
Тогда в SWIA можно увидеть отклонение заказа

В результате письмо пропадает из входящих ответственного сотрудника и по истечению таймаута он больше не может утвердить её