SAP Workflow. Запуск по событию

WorkFlow позволяет делать последовательность операций и представлять это в графическом виде. Особенно удобно, когда бизнесс процессы растянуты во времени. К сожалению, или к счастью)) В своей практике приходилось сталкиваться с ними не так уж и часто. Поэтому хочу оставить небольшую напоминалку для себя на будущее. Если кому-то интересна базовая информация о WF прошу под кат. Если вы профи, то нового ничего не найдете. 

WF  позволяет решать довольно сложные задачи, мы же обойдемся очередным хэллоувордом, чтобы отработать основные моменты.
Попробуем создать поток который будет запускаться при помощи класса, принимать на вход список ФИО, и пробрасывать себе эти данные в контекст. В следующей части мы немного расширим функционал потока некоторыми базовыми операциями. 
Обращаю внимание, что способов работы с потоками и задачами довольно много. Здесь будет представлен только один из них, у вас может быть все сделано абсолютно иначе. Однако, кое какая информация все-равно будет полезной.

Первое что необходимо, это сделать класс, методы которого будем использовать в блоках нашего процесса, а также событие инициализирующее поток.
Зайдем в SE24 и создадим класс с интерфейсами BI_OBJECT, BI_PERSISTENT, IF_WORKFLOW

 

Укажем следующие интерфейсы

Ключ может быть разных типов в зависимости от потребностей. Мне что-то ничего не придумывалось и решил использовать тип PLANS. Допустим, что список людей, мы передаем с должности. 

Далее нам понадобится создать событие старта потока и в нем же заведем параметр в котором будем передавать список ФИО в поток

 

Переопределим  методы интерфейса

 

Напишем следующий код в программе

Создание потока

Зайдем в транзакцию SWDD, нажмем создать

Получим заготовку для нашего процесса:

По нажатию кнопки сохранить,  будет предложено ввести код и описание нового потока. Также ему будет присвоен уникальный идентификатор вида WS****, по которому его можно запускать или получать информацию о его состоянии  даже из вне.

Давайте посмотрим на области экрана. Как можно заметить, их тут несколько:

1- Область навигации. Представляет собой список блоков потока.
2 – Самая интересная область, которая позволяет переключаться между разными функциями. Основные нас интересующие это две:
     а)  «Типы шагов, которые могут быть вставлены» – собственно типы, которые мы можем вставить. Вставляются они простым перетаскиванием в секцию 3, в нужное место. 
     б)  «Контейнер потока операций» – грубо говоря, глобальная область потока, в которой можно хранить данные между блоками. В блок они пробрасываются
3 – Графическое представление процесса. 

Создадим в контейнере таблицу, в которую будем складывать список фамилий, ранее переданный в наш класс.

Импорт и экспорт позволяют, в последствии пробрасывать данные. Думаю, тут в целом все понятно и без полного описания.

Далее нам необходимо прописать событие которое запускает наш поток.
Нажимаем кнопку «Основные данные»

 

Мепим данные, переданные ранее, в контекст. Просто перетаскиваем соответствующие элементы в нижнее поле. В других местах WF все работает +- таким же образом.

Если вернуться на предыдущий экран, можно заметить, что схема нашего потока немного изменилась, а именно появилось событие.

Далее давайте создадим блок, в котором сможем для начала просто поставить точку и посмотреть, что пришло в операцию.

1. В класс ZCL_TEST_WORKFLOW добавим метод ALL_FIO, входным параметром в который будет таблица с ФИО. Для понимания больше ничего не надо, остальные методы будем добавлять позже.

 

 

2. Зайдем в транзакцию PFTC и создадим стандартную задачу.

 

Не забываем про связать контексты:

После сохранения задаче будет присвоен уникальный идентификатор. Его будем прописывать в наших блоках

Возвращаемся в SWDD  и двойным кликом выбираем белый квадрат. После этого увидим список возможных блоков, нам нужен блок «Операция»

Прописываем в прописываем задачу.

Связываем контексты. Правда в данном случае все произошло автоматически. Периодически делать это придется самостоятельно. Можно увидеть, что это работает в две стороны.  Данные переносятся в обработку и обратно. Для данной задачи это не надо, но в будущем это нам пригодиться.

Сохраняем и активируем поток.

Далее запускаем программу, в которой ранее создали код инициализирующий событие “START”. Переходим в SWIA и смотрим результат. А также статусы шагов. Здесь же можно посмотреть журнал выполнения, чтобы увидеть текущий шаг процесса или описание ошибки.

“Как же отладить поток” – спросите вы меня. Хотя не спросите, т.к. никто не коментит мои заметки.
«Очень просто» – ответил бы я вам.

Необходимо поставить внешнюю точку останова под пользователем WF-BATCH.
Сделаем это и перезапустим поток из программы.

Вот переданные данные

В следующий раз мы рассмотрим пару простейших операций типа «Условия», «Цикла», «Отправки письма»,  «Действия пользователя», а также попробуем получить данные WF контейнера из вне.

Небольшой список ссылок, которые могут помочь разобраться с данным вопросом:
https://www.tutorialspoint.com/sap_business_workflow/sap_business_creating_workflows.htm
http://saptechnical.com/Tutorials/Workflow/Class/Multiline2.htm
https://sapcodes.com/2015/11/20/triggering-work-flow-with-class-event/
https://signatov.com/sozdanie-workflow-dlja-processa-sap-processes-and-forms-fpm/
https://coderlessons.com/tutorials/sap/izuchite-sap-business-workflow/sap-business-workflow-kratkoe-rukovodstvo
https://saphr.ru/2015/09/12/workflow/
https://signatov.com/worfklow-business-obekti-i-sobytia/

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *