Workflow. Отладка фоновых задач
SAP Workflow. Отладка фоновых задач
На сегодняшнее число, у нас-таки имеется небольшой запас знаний по теме Workflow. Ну как запас, небольшой такой сусек, который можно раскрыть в случае необходимости. Тем не менее, продолжим пополнять этот самый сусек знаниями, основанными на реальных задачах, возникающих в проектном опыте. А куда, скажите, пожалуйста, в этом самом проектном опыте без ABAP? Правильно, никуда. Пригодится он везде, и потоки операций не стали здесь исключением.
Приведу несколько примеров, где консультанту требуется настроить поток операций, в котором:
- нужно определить согласующих лиц по организационно-штатной структуре (с использованием Z* соединений между объектами). Сделать это необходимо в момент старта потока операций;
- нужно считать табельные номера сотрудников, участвующих в потоке операций, для последующего определениях адресов их электронной почты.
Запустить такие потоки операций с использование только настроек, к сожалению, невозможно, и поэтому толькохардкорABAP может помочь.
Поток операций состоит из так называемых шагов. Каждый, или почти каждый шаг, управляется с помощью задачи. Задача представляет собой объект системы, в свойствах которого определен либо бизнес-объект и его метод, либо класс и какой-нибудь его метод


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

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

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

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

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

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

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

В открывшемся окне отладчика, перейдите на строчку с условием
IF lb_exit = 'X'.
и измените значение переменной LB_EXIT на X

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

Вот мы и добрались до метода, который необходимо отлаживать. Ну а что делать дальше, думаю, пояснять не нужно.
N.B. (1) После того, как вы закончили отладку, не забудьте закомментировать вызов ФМ K_PLAN_WAIT_FOR_DEBUGGING, а также удалить запись из таблицы T811FLAGS.
N.B. (2) Если для системы, в которой вы работаете, настроено несколько серверов, после запуска потока операций (см. пункт № 2 Запуск отладки) запустите транзакцию SM51, кликните по одному из серверов, для того, чтобы найти процесс, запущенный под пользователем WF-BATCH.
Update
См. заметку Workflow. Отладка фоновых задач. Транзакция SWW_BREAKPOINT