Запуск потока операций из ABAP программы

Запуск потока операций из ABAP программы

Постановка вопроса

В одной из прошлых заметок, посвященных теме потоков операций, я предложил свое видение материала, связанного с бизнес-объектами и событиями. Эти сущности применяются в ситуациях, когда консультанту требуется ответить на вопрос: "в результате чего должен стартовать какой-либо поток операций"?

См. заметку Workflow. Бизнес-объекты и события
Нередки ситуации, когда поток операций требуется запустить из ABAP программы. В этой заметке речь пойдет как раз о таких ситуациях.

Решение вопроса

В системе присутствует довольно большое количество стандартных функциональных методов, посредством которых можно работать с потоками операций непосредственно из ABAP программы. Выполнить их поиск можно по маске SAP_WAPI* в транзакции SE37

Основной ФМ, на который следует обратить внимание, имеет техническое наименование SAP_WAPI_START_WORKFLOW. Используя его, вы можете запустить поток операций, а также передать какие-то значения в контейнер потока операций (параметр input_container).

В качестве примера рассмотрю программу, после запуска которой, будет выполнен старт потока с идентификатором WS77300061

REPORT zprogram10.
 
DATA: lv_rc          TYPE sy-subrc,
      lt_workitem_id TYPE STANDARD TABLE OF swr_cont WITH HEADER LINE,
      lv_task        TYPE swr_struct-task,
      lt_table       TYPE TABLE OF swwwihead.
 
PARAMETERS: p1 AS CHECKBOX.
 
IF p1 EQ abap_true.
 
  lv_task = 'WS77300061'.
 
  CALL FUNCTION 'SAP_WAPI_START_WORKFLOW'
    EXPORTING
      task        = lv_task
      do_commit   = 'X'
      user        = sy-uname
    IMPORTING
      return_code = lv_rc.
 
  IF sy-subrc <> 0.
 
  ENDIF.
 
  CALL FUNCTION 'SWW_WI_TASK_INSTANCES_READ'
    EXPORTING
      task              = lv_task
    TABLES
      workitems_of_task = lt_table.
  .
 
  SORT lt_table BY wi_ct DESCENDING.
 
  READ TABLE lt_table ASSIGNING FIELD-SYMBOL(<fs_table>) INDEX 1.
  WRITE:/ 'Workflow with id # ', <fs_table>-wi_id , ' was created'.
 
ELSE.
  WRITE:/ ':('.
ENDIF.

Результат ее работы представлен на видеофрагменте ниже

0:00
/0:47

Помимо прямого запуска потока операций, следует помнить о событиях, которые также могут стать триггером для его (потока) запуска. Сгенерировать событие из ABAP программы также не является проблемой. В этом может ФМ SAP_WAPI_CREATE_EVENT.

Перед тем как запустить этот ФМ следует убедиться, что для вашего потока операций определены начальные события.

См. Using Events
В качестве иллюстрации предлагаю рассмотреть работу потока операций, для начального события которого будет определено событие HIRED бизнес-объекта EMPLOYEET. Поток операций WS77300061 будет скопирован в новый.
0:00
/0:57

Проверяем транзакцию SWETYPV

См. Evaluation and Maintenance of Type Linkages

Теперь опять в ABAP. Например,

REPORT zprogram11.
 
PARAMETERS: p_1 AS CHECKBOX.
 
IF p_1 EQ abap_true.
 
  CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
    EXPORTING
      object_type = 'EMPLOYEET'
      object_key  = ' '
      event       = 'HIRED'
    .
  IF sy-subrc <> 0.
  ENDIF.
 
  WRITE:/ 'Event Raised!'.
ELSE.
  WRITE:/ 'No event raised'.
ENDIF.

Результат

0:00
/0:40

Весна уже очень скоро. Спасибо за ваше время. Обнимаю.