Workflow. Использование функциональных методов в потоках операций
Что такое функциональный метод?
Для начала стоит оговориться, что, когда речь идет о потоках операций, и уж тем более о каких-то функциональных методах, нужно понимать, что дискурс будет направлен в сторону так называемых utility-классов.
В классах, предназначенных для работы с потоками операций в системе SAP, существует возможность создания функциональных методов, возвращающих только один параметр, в то время как на вход в метод может быть передано более одного параметра.
Применение функциональных методов может быть оправдано при возникновении потребности в оперативном получении какой-либо информации. Например, для поиска электронной почты работника, его даты рождения или для определения количества записей в какой-то пользовательской таблице и т.д. и т.п. Оперативность достигается путем добавления в поток операций определенного типа задачи, и вызова нужного метода класса. Речь об этом пойдет ниже.
См. Expressions: Functional Methods
Use
You can use a functional method within an expression on the source side of a binding row. You can use a functional method for the following purposes:-Performing calculations
-Performing data conversions, for example, currency conversions
-Calling a GET method to read a private attribute of the business object (BOR)
Пример 1. Поиск электронной почты работника
Далее будет рассмотрен пример поиска электронной почты работника посредством создания и использования функционального метода в потоке операций. Создание самого потока представлено в очень урезанном исполнении, исключительно для демонстрации работы функционального метода.
Создание utility-класса
В транзакции SE24 создайте utility-класс, который будет использоваться в вашем потоке операций
Создание функционального метода в классе
Определите новый метод и его параметры. Вендор рекомендует использовать следующее правило наименования функциональных методов: GET_наименование_метода
Допустим, что код метода будет следующим
METHOD get_email_by_pernr.
DATA: lt_p0105 TYPE TABLE OF p0105,
ls_p0105 TYPE p0105.
CALL FUNCTION 'HR_READ_INFOTYPE'
EXPORTING
tclas = 'A'
pernr = im_pernr
infty = '0105'
TABLES
infty_tab = lt_p0105
EXCEPTIONS
infty_not_found = 1
OTHERS = 2.
IF sy-subrc is INITIAL.
LOOP AT lt_p0105 INTO ls_p0105 WHERE subty = '0010'.
ex_email = ls_p0105-usrid_long.
ENDLOOP.
ENDIF.
Применение функционального метода в потоке операций
На следующем видеофрагменте я:
- Создам новую модель потока операций (транзакция SWDD)
- Добавлю шаг типа Container operation
- Создам новый элемент контейнера потока операций с наименованием EMAIL
- Вызову функциональный метод класса и присвою результат его работы новому элементу контейнера EMAIL.
N.B. Обратите внимание на то, что вызов метода класса осуществляется посредством конструкции вида %utility_class.functional_method(parameters)%
Пример 2. Вычисление срока выполнения задачи потока операций
Рассмотрим еще один, если можно так сказать, хрестоматийный пример использования функциональных методов в потоках операций: вычисление срока (даты) обработки задачи потока операций. Стоит обратить внимание на то, что дата, от которой будет отсчитываться срок исполнения задачи эквивалентна 18.07.2018. Создание самого потока представлено все в том же урезанном исполнении.
См. заметку Workflow. Управление сроками обработки задач потоков операций
Создание метода для вычисления срока выполнения задачи
Создайте новый метод и определите его параметры
Исходный код метода:
METHOD get_task_deadline.
CALL FUNCTION 'END_TIME_DETERMINE'
EXPORTING
duration = lv_in
unit = 'TAG'
factory_calendar = '99'
IMPORTING
end_date = lv_out
EXCEPTIONS
OTHERS = 7.
IF sy-subrc <> 0.
lv_out = sy-datum + lv_in.
ENDIF.
ENDMETHOD.
Применение функционального метода в потоке операций
Далее я выполню следующее "упражнение":
- Создам новую модель потока операций (транзакция SWDD)
- Добавлю новую фоновую задачу типа Activity
- Осуществлю вызов функционального метода класса для определения срока исполнения задачи. В качестве параметра в функциональный метод передам сначала значение 3, затем 5
- Выполню последовательный запуск потока операций с разными значениями для вычисления даты обработки задачи