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

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Состав пакета /SBIS/WORKFLOW)
(Реализация BAdI)
Строка 97: Строка 97:
 
   RECEIVING
 
   RECEIVING
 
     result = lv_msg_ext.
 
     result = lv_msg_ext.
   MESSAGE lv_msg_ext TYPE 'E' DISPLAY LIKE 'S'.
+
   MESSAGE lv_msg_ext TYPE 'E'.
 
ENDTRY.
 
ENDTRY.
 
ENDMETHOD.
 
ENDMETHOD.

Версия 16:14, 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. "класс для работы с WF

 CREATE OBJECT lc_wf. "создаем экземпляр класса для работы с WF

 LOOP AT it_document ASSIGNING <fs_doc> WHERE type = 'ДокОтгрВх'. "условие отбора документов
  CALL METHOD lc_wf->event_api2_packet "вызываем метод инициирующий запуск экземпляра WF
   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'.
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).
  • В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх (список типов документов).