На сегодняшнее число, у нас-таки имеется небольшой запас знаний по теме Workflow. Ну как запас, небольшой такой сусек, который можно раскрыть в случае необходимости. Тем не менее, продолжим пополнять этот самый сусек знаниями, основанными на реальных задачах, возникающих в проектном опыте. А куда, скажите, пожалуйста, в этом самом проектном опыте без ABAP? Правильно, никуда. Пригодится он везде, и потоки операций не стали здесь исключением.

Приведу несколько примеров, где консультанту требуется настроить поток операций, в котором:

  • нужно определить согласующих лиц по организационно-штатной структуре (с использованием Z* соединений между объектами). Сделать это необходимо в момент старта потока операций;
  • нужно считать табельные номера сотрудников, участвующих в потоке операций, для последующего определениях адресов их электронной почты.
    Запустить такие потоки операций с использование только настроек, к сожалению, невозможно, и поэтому только хардкор ABAP может помочь.

Поток операций состоит из так называемых шагов. Каждый, или почти каждый шаг, управляется с помощью задачи. Задача представляет собой объект системы, в свойствах которого определен либо бизнес-объект и его метод, либо класс и какой-нибудь его метод

Рисунок 1. В свойствах задачи указан бизнес-объект

Рисунок 2. В свойствах задачи указан класс/метод

Любая «дополнительная» логика, используемая в потоках операций, определяется с помощью utility-классов (более подробно см. здесь). Соответственно, чтобы «дополнительная» логика заработала в потоке операций, необходимо добавить в свойства задачи класс и необходимый метод. С первого раза, как известно, редко, когда получается запустить поток операций, да еще и с «вкраплениями» ABAP. Возникает вопрос: **как можно выполнить отладку задачи? **Сделать это, поверьте, невероятно просто. Только необходимо условиться на том, что далее речь пойдет о задачах, обработка которых происходит в фоновом режиме.

1. Подготовка

Откройте таблицу T811FLAGS в транзакции SE16, и создайте запись, по аналогии с тем, что указано на ниже представленном рисунке

Рисунок 4. Добавление новой записи в таблице T811FLAGS

Затем измените исходный код метода класса, для которого необходимо запустить фоновую отладку, добавив в него вызов ФМ K_PLAN_WAIT_FOR_DEBUGGING со значениями параметров id_debug_id и id_debug_level из только что созданной записи таблицы T811FLAGS

Рисунок 6. Добавление ФМ K_PLAN_WAIT_FOR_DEBUGGING в метод класса

Не забудьте активировать метод. Также проверьте, чтобы данный метод класса был определен в потоке операций

Рисунок 7. Задача на основе Z*-класса в потоке операций

2. Запуск отладки

Запустите поток операции. Он (поток) должен остановиться на том шаге, в задачу которого мы вносили изменения (см. п. №1 - Подготовка). Проверить это возможно, например, с помощью транзакции SWIA

Рисунок 8. Поток операций в статусе STARTED

Статус поток операций должен иметь значение STARTED.

Откройте транзакцию SM50, и убедитесь, что в списке процессов присутствует один процесс, запущенный под пользователем WF-BATCH

Рисунок 9. Остановившийся поток операций под пользователем WF-BATCH

Выберите в меню Администрирование -> Программа -> Отладка, предварительно выделив строчку с этим процессом

Рисунок 10. Запуск отладки задачи

В появившемся окне выберите ДА

В открывшемся окне отладчика, перейдите на строчку с условием

IF lb_exit = 'X'.

и измените значение переменной LB_EXIT на X

Рисунок 11. Запуск отладки фоновой задачи

и нажимайте на клавишу F6 до тех пор, пока не дойдете до Z* класса, в котором был определен вызов ФМ K_PLAN_WAIT_FOR_DEBUGGING

Рисунок 13. Запуск отладки фоновой задачи

Вот мы и добрались до метода, который необходимо отлаживать. Ну а что делать дальше, думаю, пояснять не нужно.

N.B. (1) После того, как вы закончили отладку, не забудьте закомментировать вызов ФМ K_PLAN_WAIT_FOR_DEBUGGING, а также удалить запись из таблицы T811FLAGS.

N.B. (2) Если для системы, в которой вы работаете, настроено несколько серверов, после запуска потока операций (см. пункт № 2 Запуск отладки) запустите транзакцию SM51, кликните по одному из серверов, для того, чтобы найти процесс, запущенный под пользователем WF-BATCH.

Update

См. заметку Workflow. Отладка фоновых задач. Транзакция SWW_BREAKPOINT