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

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Введение)
(Реализация BAdI)
 
(не показано 14 промежуточных версий 2 участников)
Строка 2: Строка 2:
 
Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI.  
 
Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI.  
  
Реализация SBIS SAPPER для работы с WF позволяет при получении входящих документов в SAPPER инициировать WF в SAP, используя вызов события через точку расширения BAdI. В процессе выполнения WF в SAP можно утверждать или отклонять входящие документы согласно маршруту согласования, что будет отражено в личном кабинете СБИС как события утверждения или отклонения документов.
+
SAPPER позволяет инициировать WF по событию СБИС, или инициировать событие СБИС по событию WF. Например запустить WF при получении входящего документа, или утвердить / отклонить электронный документ по событию WF. Вариантов применения может быть множество.
  
В качестве примера рассмотрим типовой процесс согласования входящих документов, иллюстрирующий особенности реализации.
+
=Как это работает=
  
Пользователь, находясь, в интерфейсе SAPPER нажимает на кнопку "Обновить статусы", реализация BAdI вызывает событие инициирующее WF, состоящее из двух основных этапов: получить PDF документ вложений пакета и согласование. В зависимости от выбора действия на этапе Согласования документы будут отклонены или утверждены в ЛК СБИС.
+
В SAPPER есть класс /SBIS/CL_WF_SBIS реализующий интерфейс WF (IF_WORKFLOW), с помощью которого можно создать экземпляр WF. А для инициализации из WF события СБИС в этом же классе есть несколько соответствующих методов (см. [[SAPPER работа с SAP Workflow#Состав пакета /SBIS/WORKFLOW|Состав пакета /SBIS/WORKFLOW]]).
  
=Согласования входящего пакета документов=
+
=Пример=
==Алгоритм==
+
Рассмотрим на примере процедуру создания WF для согласования входящего документа.
# Инициализация события EVENT на API2 пакете
 
# Проверка наличия существующих WF с данным UUID пакета в фоне
 
## Получение номера инициализирующего события
 
## Проверка ключа UUID + номер WF на вхождение в таблицу /SBIS/STATUS_WF
 
## Если вхождение найдено, то событие EXIT
 
## Если не найдено, событие GO
 
# Если событие GO
 
# Вызов метода получения PDF
 
# Вызов блока согласования пакета
 
## Если Утвердить
 
## Получить текст согласования, иначе взять текст по умолчанию
 
## Выполнить Утвердить
 
## Если Отклонить
 
## Получить текст отклонения, иначе взять текст по умолчанию
 
## Выполнить Отклонить
 
# Выполнение завершено
 
# Если событие EXIT, то завершить выполнение
 
  
==Схема согласования и основные элементы==
+
Сценарий:
 +
Экземпляр 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&
  
=Состав пакета /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 - метод Отклонения пакета. Данный метод не может выполнятся в фоне.
 
 
 
События класса /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
Строка 104: Строка 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.
Строка 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 документ должен утвердиться в СБИС, соответственно при отклонении должно произойти автоматическое отклонение документа в СБИС.

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

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