Link Search Menu Expand Document

;call

Предыстория

Ранее абсолютно все передаваемые данные должны были быть сформированы заранее и переданы в метод xtt->merge( ). И таких данных подчас довольно много. Дабы сократить объем передаваемых данных в примере No130 введено дополнение ;cond= которое позволяет писать простые ABAP выражения COND #( ). К примеру если надо вывести максимальное из полей A и B в структуре R можно написать в шаблоне {R;cond=WHEN value-A gt value-B THEN value-A ELSE value-B} без создания 3-го поля в R. Для краткости выражение можно написать вот так {R:WHEN v-A gt value-B THEN v-A ELSE v-B}.

Но что если выражение содержит очень много пар WHEN-THEN или же его проблематично записать в одну строку? Чтобы улучшить чтения шаблона введена возможность вызова метода с передачей в него, в случае необходимости, параметров.

Неявная передача параметра

Для вызова метода в шаблоне можно использовать дополнение ;call=, сам объект чьи методы будем вызывать передается в методе merge

image

В шаблоне нет необходимости указывать передачу структуры R

image

Она передается неявно, по имени IS_ROOT

      get_fullname
        IMPORTING
                  is_root        TYPE ts_root " <--- is passed implicitly
        RETURNING VALUE(rv_text) TYPE string,

...

  METHOD get_fullname.
    rv_text = to_upper( |{ is_root-first_name } { is_root-last_name } { is_root-middle_name }| ).
  ENDMETHOD.

Краткая форма

Чтобы как и в случае с заменой ;cond= на :, ;call= можно заменить на один символ @ image

Явная передача параметров

Если передавать всю структуру не нужно, можно передать параметр явно через value-FIELD (для ;call=) или же v-FIELD (для @)

image

Метод имеет следующую сигнатуру

      date_text
       IMPORTING
         " is_root TYPE ts_flight_info <-- no need. Pass v-FLDATE explicitly
         iv_date TYPE d
         iv_lang TYPE sylangu DEFAULT sy-langu
       RETURNING VALUE(rv_text) TYPE string.

Обратите внимание что тип (пу STRING) в отличии от ;cond= ячейка {R-T:sy-tabix;type=integer} указывать не надо. Так как тип для rv_text определяется динамически

Результат на двух языках: image


PS

Вывод дат через функцию носит демонстративный характер. При использовании Excel лучше использовать тип ABAP D date, и задавать формат в самой ячейке (Сtrl+1)

image

image


Для универсального вывода дат в Pdf & Word зачастую можно обойтись ;cond= с дополнением COUNTRY

image

image