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

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Состав пакета /SBIS/WORKFLOW)
(Реализация BAdI)
 
(не показано 10 промежуточных версий этого же участника)
Строка 4: Строка 4:
 
SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.
 
SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.
  
===Как это работает===
+
=Как это работает=
  
В SAPPER есть класс .... реализующий интерфейс WF (IF....) с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов.
+
В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. [[SAPPER работа с SAP Workflow#Состав пакета /SBIS/WORKFLOW|Состав пакета /SBIS/WORKFLOW]]).
  
===Пример===
+
=Пример=
 
Рассмотрим на примере процедуру создания WF для согласования входящего документа.
 
Рассмотрим на примере процедуру создания WF для согласования входящего документа.
  
 
Сценарий:
 
Сценарий:
Экземпляр WF должен создастся автоматически при обновлении статусов (Пользователь в интерфейсе SAPPER нажимает на кнопку "Обновить статусы" или робот запускает соответствующий метод).
+
Экземпляр WF должен создастся автоматически при обновлении статусов (пользователь в интерфейсе SAPPER нажимает на кнопку "Обновить статусы" или робот запускает соответствующий метод).
 
При согласовании в WF документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.
 
При согласовании в WF документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.
  
Строка 21: Строка 21:
 
# Скачиваем PDF и прикладываем к экземпляру WF, чтобы можно было ознакомиться с электронным документом.
 
# Скачиваем PDF и прикладываем к экземпляру WF, чтобы можно было ознакомиться с электронным документом.
 
# Вызываем блок согласования пакета
 
# Вызываем блок согласования пакета
# В зависимости от решения вызываем SBIS-WF->APPROVE для утверждения в СБИС, вввв для отлонения или ЫЫЫЫ для других действий.
+
# В зависимости от решения вызываем /SBIS/CL_WF_SBIS=>APPROVE для утверждения в СБИС, /SBIS/CL_WF_SBIS=>REJECT для отклонения или /SBIS/CL_WF_SBIS=>EXECUTE_ACTION для других действий.
 
 
  
 
Настройка:
 
Настройка:
Строка 29: Строка 28:
 
# Включить реализацию BAdI
 
# Включить реализацию BAdI
  
====Создать WF====
+
==Создать WF==
 
 
==Схема согласования и основные элементы==
 
 
[[Файл:WF_2_1.png|right]]
 
[[Файл:WF_2_1.png|right]]
 
===Основные контейнеры===
 
===Основные контейнеры===
Строка 75: Строка 72:
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
 
* &IS_API2_PACKET& -> &IS_API2_PACKET&
  
=Состав пакета /SBIS/WORKFLOW=
+
==Реализация BAdI==
* Класс /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). Метод реализует обработку события чтения изменений по кнопке "Обновить статусы".
 
* В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх ([https://sbis.ru/help/integration/catalog/guide/#1 список типов документов]).
 
* Контейнеры используемые в WF:
 
** IS_API2_PACKET - importing контейнер содержащий структуру с данными API2_PACKET (соблюсти наименование обязательно)
 
** контейнер класса
 
 
 
 
<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
Строка 108: Строка 80:
 
METHOD /sbis/if_sapper_badi~on_read_changes.
 
METHOD /sbis/if_sapper_badi~on_read_changes.
 
TRY.
 
TRY.
FIELD-SYMBOLS <fs_doc> LIKE LINE OF it_document.
+
  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
  
  LOOP AT it_document ASSIGNING <fs_doc> WHERE type = 'ДокОтгрВх'.
+
  IF is_document-type = 'ДокОтгрВх'. "условие отбора документов
   CALL METHOD lc_wf->event_api2_packet
+
   CALL METHOD lc_wf->event_api2_packet "вызываем метод инициирующий запуск экземпляра WF
 
   EXPORTING
 
   EXPORTING
     is_api2_packet = <fs_doc>.
+
     is_api2_packet = is_document. "на входе строка таблицы документов
  ENDLOOP.
+
  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' DISPLAY LIKE 'S'.
+
   MESSAGE lv_msg_ext TYPE 'E'.
 
ENDTRY.
 
ENDTRY.
 
ENDMETHOD.
 
ENDMETHOD.
Строка 132: Строка 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 документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.

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

  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.
 DATA cx_root TYPE REF TO cx_root. "объявляем исключение
 DATA lc_wf TYPE REF TO /sbis/cl_wf_sbis. "класс для работы с WF

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

 IF is_document-type = 'ДокОтгрВх'. "условие отбора документов
  CALL METHOD lc_wf->event_api2_packet "вызываем метод инициирующий запуск экземпляра WF
   EXPORTING
    is_api2_packet = is_document. "на входе строка таблицы документов
 ENDIF.

 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).
  • В процессе обработки событий читаются все реестры документов в СБИС, поэтому следует ограничить выборку только по входящим, к примеру, ДокОтгрВх (список типов документов).