Workflow. Использование функциональных методов в потоках операций

Что такое функциональный метод?

Для начала стоит оговориться, что, когда речь идет о потоках операций, и уж тем более о каких-то функциональных методах, нужно понимать, что дискурс будет направлен в сторону так называемых utility-классов.

См. ABAP Classes in Workflow

В классах, предназначенных для работы с потоками операций в системе 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.

Применение функционального метода в потоке операций

На следующем видеофрагменте я:

  1. Создам новую модель потока операций (транзакция SWDD)
  2. Добавлю шаг типа Container operation
  3. Создам новый элемент контейнера потока операций с наименованием EMAIL
  4. Вызову функциональный метод класса и присвою результат его работы новому элементу контейнера 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.

Применение функционального метода в потоке операций

Далее я выполню следующее "упражнение":

  1. Создам новую модель потока операций (транзакция SWDD)
  2. Добавлю новую фоновую задачу типа Activity
  3. Осуществлю вызов функционального метода класса для определения срока исполнения задачи. В качестве параметра в функциональный метод передам сначала значение 3, затем 5
  4. Выполню последовательный запуск потока операций с разными значениями для вычисления даты обработки задачи