SAPPER работа с SAP Workflow — различия между версиями
(→Алгоритм) |
(→Реализация BAdI) |
||
(не показано 13 промежуточных версий 2 участников) | |||
Строка 2: | Строка 2: | ||
Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI. | Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI. | ||
− | + | SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество. | |
− | + | =Как это работает= | |
− | + | В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. [[SAPPER работа с SAP Workflow#Состав пакета /SBIS/WORKFLOW|Состав пакета /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== | ||
[[Файл:WF_2_1.png|right]] | [[Файл:WF_2_1.png|right]] | ||
===Основные контейнеры=== | ===Основные контейнеры=== | ||
Строка 72: | Строка 72: | ||
* &IS_API2_PACKET& -> &IS_API2_PACKET& | * &IS_API2_PACKET& -> &IS_API2_PACKET& | ||
− | = | + | ==Реализация 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 | ||
Строка 104: | Строка 80: | ||
METHOD /sbis/if_sapper_badi~on_read_changes. | METHOD /sbis/if_sapper_badi~on_read_changes. | ||
TRY. | TRY. | ||
− | + | DATA cx_root TYPE REF TO cx_root. "объявляем исключение | |
− | DATA cx_root TYPE REF TO cx_root. | + | DATA lc_wf TYPE REF TO /sbis/cl_wf_sbis. "класс для работы с WF |
− | DATA lc_wf TYPE REF TO /sbis/cl_wf_sbis. | ||
− | CREATE OBJECT lc_wf. | + | CREATE OBJECT lc_wf. "создаем экземпляр класса для работы с WF |
− | + | IF is_document-type = 'ДокОтгрВх'. "условие отбора документов | |
− | CALL METHOD lc_wf->event_api2_packet | + | CALL METHOD lc_wf->event_api2_packet "вызываем метод инициирующий запуск экземпляра WF |
EXPORTING | EXPORTING | ||
− | is_api2_packet = | + | is_api2_packet = is_document. "на входе строка таблицы документов |
− | + | ENDIF. | |
− | CATCH cx_root INTO cx_root. | + | CATCH cx_root INTO cx_root. "ловим исключительную ситуацию |
DATA lv_msg_ext TYPE string. | DATA lv_msg_ext TYPE string. | ||
CALL METHOD cx_root->get_text | CALL METHOD cx_root->get_text | ||
RECEIVING | RECEIVING | ||
result = lv_msg_ext. | result = lv_msg_ext. | ||
− | MESSAGE lv_msg_ext TYPE 'E | + | MESSAGE lv_msg_ext TYPE 'E'. |
ENDTRY. | ENDTRY. | ||
ENDMETHOD. | ENDMETHOD. | ||
Строка 128: | Строка 103: | ||
</div> | </div> | ||
+ | =Состав пакета /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). | ||
+ | * В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх ([https://sbis.ru/help/integration/catalog/guide/#1 список типов документов]). | ||
[[Категория:SAP]] | [[Категория:SAP]] | ||
[[Категория:SAPPER]] | [[Категория:SAPPER]] |
Текущая версия на 16:53, 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 документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.
Алгоритм работы:
- При обработке события получения документа инициализируем событие 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&
Реализация BAdI
пример реализации метода BAdI /SBIS/IF_SAPPER_BADI~ON_READ_CHANGES
Состав пакета /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).
- В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх (список типов документов).