Прощай WRITE TO, привет шаблоны!

Начиная с версии 7.0, EhP2 в язык ABAP вместе с большими изменениями в выражениях, внедрены так называемые строковые шаблоны. С помощью шаблонов можно сильно сократить объем кода программы, полностью избавившись от оператора WRITE TO и CONCATENATE.

Использование шаблонов возможно только в Unicode программах.
Далее будут рассмотрены некоторые особенности работы с шаблонами.

Шаблоны могут содержать в себе как простую текстовую последовательность, так и встроенные выражения, и управляющие символы (\n\r\t). Специальные символы экранируются символом «\»

Пример:

Результат:

Шаблон должен начинаться с символа «|» и так же заканчиваться им в той же строке исходного кода. Исключением из этого правила могут быть встроенные выражения, которые система позволяет переносить на новую строку.

Для объединения строковых шаблонов могут использоваться как оператор «&» так и «&&». Таким образом шаблон может быть длинной в несколько строк, кроме того не запрещается использовать комментарии при переносе шаблона.

Примечания:

  • Символ «|» является частью синтаксиса ABAP, для того чтобы использовать его в тексте необходимо воспользоваться escape символом \. Подсветка данного символа так же может быть настроена в опциях редактора.
  • При использовании оператора «&» в строковых шаблонах, нет ограничения на длину до 255 символов.

Гибкость использования шаблонов обеспечивает внедрение в них встроенных выражений. Выражение должно  быть помещено в фигурные скобки «{}». Между скобками справа и слева должен быть как минимум один пробел. В качестве выражения могут выступать:

  • Встроенные функции (возвращающие результат — substring и т.п.)
  • Рассчитываемые выражения (арифметические операции, битовые выражения, символьные выражения)
  • Функциональные методы (методы классов) или цепочка вызовов методов, возвращающая результат
  • Значения переменных (sy-datum и т.п.)

Результат работы выражения должен быть в виде, который преобразуем в строковую последовательность.

Пример:

Результат:

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

Следующий пример демонстрирует использование опций форматирования выражения, для вывода даты в ISO формате:

Анализ строкового шаблона происходит последовательно слева на право.

Примечания:

  • Для отображения фигурных скобок необходимо использовать escape символ «\»
  • Фигурные скобки не могут быть вложенными напрямую. Опции форматирования нельзя использовать для выражений следующим образом:

Примеры использования строковых выражений можно найти в программе: DEMO_EXPRESSIONS. Описание встроенных параметров форматирования выражений можно найти либо в справке по F1, либо по адресу: http://help.sap.com/abapdocu_731/en/abapcompute_string_format_options.htm.

Пример того как использование строковых шаблонов помогло сократить объем кода и сделать его более понятным для восприятия.

До:

 

После:

8 комментариев

    1. В данном примере это метод моего класса который в случае существования первого аргумента выводит второй, при отсутствии третий.

  1. ДД!
    Не разберусь как быть с NUMC типом.
    Например:
    DATA : l_numc Type n Length 3 Value ‘001’,
    l_str Type string.
    Write l_numc To l_str . » l_str = 1

    Как это будет с шаблонами?

  2. Добрый вечер, будет так:

    DATA : l_numc Type n Length 3 Value ‘001’,
    l_str Type string.

    l_str = |{ l_numc }|.

    WRITE l_str.

  3. ДД!
    Да, по логике так и должно быть ))
    Но не работает. И в своем примере у меня ошибка. Там по идеи Write l_numc To l_str NO-ZERO .
    Вообщем не получается совсем забыть про WRITE.

  4. По идее, так:
    l_str = |{ shift_left( val = l_numc sub = ‘0’ }|.

    Сам делал такое много раз. И обратную операцию тоже (дополнение ведущими нулями до нужной длины), но это всё в примерах разобрано.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *