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

Материал из razgovorov.ru
Перейти к: навигация, поиск
(Новая страница: «=Введение= Настроить маршруты согласования входящих документов можно используя стандар…»)
 
(Введение)
Строка 6: Строка 6:
 
В качестве примера рассмотрим типовой процесс согласования входящих документов, иллюстрирующий особенности реализации.  
 
В качестве примера рассмотрим типовой процесс согласования входящих документов, иллюстрирующий особенности реализации.  
  
Пользователь, находясь, в интерфейсе SAPPER нажимает на кнопку "Обновить статусы", реализация BAdI вызывает событие инициирующее WF, состоящее из двух основных этапов: получить PDF документ вложений пакета и согласование. В зависимости от выбора действия на этапе Согласования документ будут отклонены или утверждены в ЛК СБИС.
+
Пользователь, находясь, в интерфейсе SAPPER нажимает на кнопку "Обновить статусы", реализация BAdI вызывает событие инициирующее WF, состоящее из двух основных этапов: получить PDF документ вложений пакета и согласование. В зависимости от выбора действия на этапе Согласования документы будут отклонены или утверждены в ЛК СБИС.
  
 
=Согласования входящего пакета документов=
 
=Согласования входящего пакета документов=

Версия 14:09, 6 апреля 2018

Введение

Настроить маршруты согласования входящих документов можно используя стандартный функционал СБИС или SAP Workflow. Далее для краткости будем обозначать SAP Workflow как WF, элемент (этап) (workitem) - WI.

Реализация SBIS SAPPER для работы с WF позволяет при получении входящих документов в SAPPER инициировать WF в SAP, используя вызов события через точку расширения BAdI. В процессе выполнения WF в SAP можно утверждать или отклонять входящие документы согласно маршруту согласования, что будет отражено в личном кабинете СБИС как события утверждения или отклонения документов.

В качестве примера рассмотрим типовой процесс согласования входящих документов, иллюстрирующий особенности реализации.

Пользователь, находясь, в интерфейсе SAPPER нажимает на кнопку "Обновить статусы", реализация BAdI вызывает событие инициирующее WF, состоящее из двух основных этапов: получить PDF документ вложений пакета и согласование. В зависимости от выбора действия на этапе Согласования документы будут отклонены или утверждены в ЛК СБИС.

Согласования входящего пакета документов

Алгоритм

  1. Инициализация события EVENT на API2 пакете
  2. Проверка наличия существующих WF с данным UUID пакета в фоне
    1. Получение номера инициализирующего события
    2. Проверка ключа UUID + номер WF на вхождение в таблицу /SBIS/STATUS_WF
    3. Если вхождение найдено, то событие EXIT
    4. Если не найдено, событие GO
  3. Если событие GO
  4. Вызов метода получения PDF
  5. Вызов блока согласования пакета
    1. Если Утвердить
    2. Получить текст согласования, иначе взять текст по умолчанию
    3. Выполнить Утвердить
    4. Если Отклонить
    5. Получить текст отклонения, иначе взять текст по умолчанию
    6. Выполнить Отклонить
  6. Выполнение завершено
  7. Если событие EXIT, то завершить выполнение

Схема согласования и основные элементы

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&

Состав пакета /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 - метод Отклонения пакета. Данный метод не может выполнятся в фоне.

События класса /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


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.

 CREATE OBJECT lc_wf.

 LOOP AT it_document ASSIGNING <fs_doc> WHERE type = 'ДокОтгрВх'.
  CALL METHOD lc_wf->event_api2_packet
   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' DISPLAY LIKE 'S'.
ENDTRY.
ENDMETHOD.