SAPPER работа с SAP Workflow — различия между версиями

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 8: Строка 8:
 
В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. [[Состав пакета /SBIS/WORKFLOW]]).
 
В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. [[Состав пакета /SBIS/WORKFLOW]]).
  
==Пример==
+
=Пример=
 
Рассмотрим на примере процедуру создания WF для согласования входящего документа.
 
Рассмотрим на примере процедуру создания WF для согласования входящего документа.
  
Строка 28: Строка 28:
 
# Включить реализацию BAdI
 
# Включить реализацию BAdI
  
===Создать WF===
+
==Создать WF==
 
[[Файл:WF_2_1.png|right]]
 
[[Файл:WF_2_1.png|right]]
====Основные контейнеры====
+
===Основные контейнеры===
 
* is_api2_packet - импорт, тип данных /SBIS/S_API2_PACKET
 
* is_api2_packet - импорт, тип данных /SBIS/S_API2_PACKET
 
* cl_cont - контейнер класса /SBIS/CL_WF_SBIS
 
* cl_cont - контейнер класса /SBIS/CL_WF_SBIS
  
====Вызываемое событие====
+
===Вызываемое событие===
 
Инициализирующее событие EVENT класса /SBIS/CL_WF_SBIS
 
Инициализирующее событие EVENT класса /SBIS/CL_WF_SBIS
  
Строка 42: Строка 42:
 
* &_EVT_CREATOR& -> &_WF_INITIATOR&
 
* &_EVT_CREATOR& -> &_WF_INITIATOR&
  
====Событие проверки дубликатов====
+
===Событие проверки дубликатов===
 
Обработка в фоновом режиме метода CHECK_DUPLICATES класса /SBIS/CL_WF_SBIS
 
Обработка в фоновом режиме метода CHECK_DUPLICATES класса /SBIS/CL_WF_SBIS
  
Строка 53: Строка 53:
 
* GO
 
* GO
  
====Событие получения PDF====
+
===Событие получения PDF===
 
Синхронная обработка метода GET_PDF_PACKET или GET_PDF_ATTACHMENTS класса /SBIS/CL_WF_SBIS
 
Синхронная обработка метода GET_PDF_PACKET или GET_PDF_ATTACHMENTS класса /SBIS/CL_WF_SBIS
  
Строка 60: Строка 60:
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
  
====Согласование====
+
===Согласование===
 
Стандартный этап согласования с двумя возможностями:  
 
Стандартный этап согласования с двумя возможностями:  
 
* Утвердить
 
* Утвердить
 
* Отклонить
 
* Отклонить
  
====Событие Утвердить\Отклонить====
+
===Событие Утвердить\Отклонить===
 
Синхронная обработка метода APPROVE или REJECT класса /SBIS/CL_WF_SBIS
 
Синхронная обработка метода APPROVE или REJECT класса /SBIS/CL_WF_SBIS
  
Строка 72: Строка 72:
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
  
===Реализация BAdI==
+
==Реализация BAdI==
 
<div style="border: 1px dashed;">
 
<div style="border: 1px dashed;">
 
пример реализации метода BAdI /SBIS/IF_SAPPER_BADI~ON_READ_CHANGES
 
пример реализации метода BAdI /SBIS/IF_SAPPER_BADI~ON_READ_CHANGES

Версия 15:16, 6 апреля 2018

Введение

Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI.

SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.

Как это работает

В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. Состав пакета /SBIS/WORKFLOW).

Пример

Рассмотрим на примере процедуру создания WF для согласования входящего документа.

Сценарий: Экземпляр WF должен создастся автоматически при обновлении статусов (пользователь в интерфейсе SAPPER нажимает на кнопку "Обновить статусы" или робот запускает соответствующий метод). При согласовании в WF документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.

Алгоритм работы:

  1. При обработке события получения документа инициализируем событие EVENT. Передаем в него данные документа (S_API2_PACKET)
  2. По событию EVENT запускается экземпляр WF
  3. Проверка в фоне наличия уже существующих WF, чтобы не создавать дубликаты (по UUID пакета).
  4. Скачиваем PDF и прикладываем к экземпляру WF, чтобы можно было ознакомиться с электронным документом.
  5. Вызываем блок согласования пакета
  6. В зависимости от решения вызываем /SBIS/CL_WF_SBIS=>APPROVE для утверждения в СБИС, /SBIS/CL_WF_SBIS=>REJECT для отклонения или /SBIS/CL_WF_SBIS=>EXECUTE_ACTION для других действий.

Настройка:

  1. Создать WF
  2. Реализовать BAdI
  3. Включить реализацию BAdI

Создать WF

WF 2 1.png

Основные контейнеры

  • is_api2_packet - импорт, тип данных /SBIS/S_API2_PACKET
  • cl_cont - контейнер класса /SBIS/CL_WF_SBIS

Вызываемое событие

Инициализирующее событие EVENT класса /SBIS/CL_WF_SBIS

Схема потока данных:

  • &_EVT_OBJECT& -> &CL_CONT&
  • &EVENT_API2_PACKET& -> &IS_API2_PACKET&
  • &_EVT_CREATOR& -> &_WF_INITIATOR&

Событие проверки дубликатов

Обработка в фоновом режиме метода CHECK_DUPLICATES класса /SBIS/CL_WF_SBIS

Схема потока данных:

  • &_WORKITEM.WORKITEMID& -> &IV_WORKITEM_ID&
  • &IS_API2_PACKET& -> &IS_API2_PACKET&

Завершающие события:

  • EXIT
  • GO

Событие получения PDF

Синхронная обработка метода GET_PDF_PACKET или GET_PDF_ATTACHMENTS класса /SBIS/CL_WF_SBIS

Схема потока данных:

  • &_WORKITEM.WORKITEMID& -> &IV_WORKITEM_ID&
  • &IS_API2_PACKET& -> &IS_API2_PACKET&

Согласование

Стандартный этап согласования с двумя возможностями:

  • Утвердить
  • Отклонить

Событие Утвердить\Отклонить

Синхронная обработка метода APPROVE или REJECT класса /SBIS/CL_WF_SBIS

Схема потока данных:

  • &_WORKITEM.WORKITEMID& -> &IV_WORKITEM_ID&
  • &IS_API2_PACKET& -> &IS_API2_PACKET&

Реализация BAdI

пример реализации метода BAdI /SBIS/IF_SAPPER_BADI~ON_READ_CHANGES


METHOD /sbis/if_sapper_badi~on_read_changes.
TRY.
 FIELD-SYMBOLS <fs_doc> LIKE LINE OF it_document.
 DATA cx_root TYPE REF TO cx_root.
 DATA lc_wf TYPE REF TO /sbis/cl_wf_sbis.

 CREATE OBJECT lc_wf.

 LOOP AT it_document ASSIGNING <fs_doc> WHERE type = 'ДокОтгрВх'.
  CALL METHOD lc_wf->event_api2_packet
   EXPORTING
    is_api2_packet = <fs_doc>.
 ENDLOOP.

 CATCH cx_root INTO cx_root.
  DATA lv_msg_ext TYPE string.
  CALL METHOD cx_root->get_text
   RECEIVING
    result = lv_msg_ext.
  MESSAGE lv_msg_ext TYPE 'E' DISPLAY LIKE 'S'.
ENDTRY.
ENDMETHOD.

Состав пакета /SBIS/WORKFLOW

  • Класс /SBIS/CL_WF_SBIS
  • Таблица /SBIS/STATUS_WF - связь UUID пакета с номером WF

Основные методы класса /SBIS/CL_WF_SBIS:

  • EVENT_API2_PACKET - метод события EVENT, инициализирующего запуск WF
  • CHECK_DUPLICATES - метод проверки на наличие уже запущенных WF с тем же самым пакетом. Данный метод может исполняться в фоне.
  • GET_PDF_PACKET - метод получения PDF документа для пакета (все документы пакета в одном файле). Данный метод не может выполнятся в фоне.
  • GET_PDF_ATTACHMENTS - метод получения PDF документа для вложений (каждый документ отдельным файлом). Данный метод не может выполнятся в фоне.
  • APPROVE - метод Утверждения пакета. Данный метод не может выполнятся в фоне.
  • REJECT - метод Отклонения пакета. Данный метод не может выполнятся в фоне.
  • EXECUTE_ACTION - метод, позволяющий выполнить произвольное действие. Данный метод не может выполнятся в фоне.

События класса /SBIS/CL_WF_SBIS:

  • EVENT - используется для инициализации WF
  • GO - продолжение обработки
  • EXIT - завершение обработки

Рекомендации по настройке и работе

  • Пользователь, должен быть авторизован в SAPPER при использовании методов, работающих с транспортной средой до личного кабинета (методы GET_PDF_*, APPROVE, REJECT, EXECUTE_ACTION).
  • В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх (список типов документов).