SAPPER работа с SAP Workflow
Содержание
Введение
Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или 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 документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.
Алгоритм работы:
- При обработке события получения документа инициализируем событие EVENT. Передаем в него данные документа (S_API2_PACKET)
- По событию EVENT запускается экземпляр WF
- Проверка в фоне наличия уже существующих WF, чтобы не создавать дубликаты (по UUID пакета).
- Скачиваем PDF и прикладываем к экземпляру WF, чтобы можно было ознакомиться с электронным документом.
- Вызываем блок согласования пакета
- В зависимости от решения вызываем /SBIS/CL_WF_SBIS=>APPROVE для утверждения в СБИС, /SBIS/CL_WF_SBIS=>REJECT для отклонения или /SBIS/CL_WF_SBIS=>EXECUTE_ACTION для других действий.
Настройка:
- Создать WF
- Реализовать BAdI
- Включить реализацию BAdI
Создать WF
Схема согласования и основные элементы
Основные контейнеры
- 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