Начиная с версии 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.
Пример того как использование строковых шаблонов помогло сократить объем кода и сделать его более понятным для восприятия.
До:
После:
Интересная статья. Нужно будет поэкспериментировать
А что это за функция такая — IIF ? в документации нет…
В данном примере это метод моего класса который в случае существования первого аргумента выводит второй, при отсутствии третий.
Код был взят изнутри класса, который включает данный метод
ДД!
Не разберусь как быть с NUMC типом.
Например:
DATA : l_numc Type n Length 3 Value ‘001’,
l_str Type string.
Write l_numc To l_str . » l_str = 1
Как это будет с шаблонами?
Добрый вечер, будет так:
DATA : l_numc Type n Length 3 Value ‘001’,
l_str Type string.
l_str = |{ l_numc }|.
WRITE l_str.
ДД!
Да, по логике так и должно быть ))
Но не работает. И в своем примере у меня ошибка. Там по идеи Write l_numc To l_str NO-ZERO .
Вообщем не получается совсем забыть про WRITE.
По идее, так:
l_str = |{ shift_left( val = l_numc sub = ‘0’ }|.
Сам делал такое много раз. И обратную операцию тоже (дополнение ведущими нулями до нужной длины), но это всё в примерах разобрано.