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

Материал из razgovorov.ru
Перейти к: навигация, поиск
Строка 4: Строка 4:
 
SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.
 
SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.
  
==Как это работает===
+
=Как это работает=
  
 
В 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
  
Строка 43: Строка 43:
 
* &_EVT_CREATOR& -> &_WF_INITIATOR&
 
* &_EVT_CREATOR& -> &_WF_INITIATOR&
  
=====Событие проверки дубликатов=====
+
====Событие проверки дубликатов====
 
Обработка в фоновом режиме метода CHECK_DUPLICATES класса /SBIS/CL_WF_SBIS
 
Обработка в фоновом режиме метода CHECK_DUPLICATES класса /SBIS/CL_WF_SBIS
  
Строка 54: Строка 54:
 
* GO
 
* GO
  
=====Событие получения PDF=====
+
====Событие получения PDF====
 
Синхронная обработка метода GET_PDF_PACKET или GET_PDF_ATTACHMENTS класса /SBIS/CL_WF_SBIS
 
Синхронная обработка метода GET_PDF_PACKET или GET_PDF_ATTACHMENTS класса /SBIS/CL_WF_SBIS
  
Строка 61: Строка 61:
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
  
=====Согласование=====
+
====Согласование====
 
Стандартный этап согласования с двумя возможностями:  
 
Стандартный этап согласования с двумя возможностями:  
 
* Утвердить
 
* Утвердить
 
* Отклонить
 
* Отклонить
  
=====Событие Утвердить\Отклонить=====
+
====Событие Утвердить\Отклонить====
 
Синхронная обработка метода APPROVE или REJECT класса /SBIS/CL_WF_SBIS
 
Синхронная обработка метода APPROVE или REJECT класса /SBIS/CL_WF_SBIS
  

Версия 15:12, 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&

Состав пакета /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).
  • Для обработки входящего потока документов можно использовать BAdI метод ON_READ_CHANGES (см. точку расширения /SBIS/ES_SAPPER). Метод реализует обработку события чтения изменений по кнопке "Обновить статусы".
  • В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх (список типов документов).
  • Контейнеры используемые в WF:
    • IS_API2_PACKET - importing контейнер содержащий структуру с данными API2_PACKET (соблюсти наименование обязательно)
    • контейнер класса

пример реализации метода 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.