В одной из предыдущих статей мы разбирали работу с транзакцией SO10 (ведение sap-script длинных текстов): как можно вести текстовый шаблон, как можно копировать и использовать глобальные переменные для вставки значений. Однако, зачастую для вставки значений переменных используют простой find and replace – подход. Этим способом можно вставлять как элементарные переменные, так и табличные. Давайте его рассмотрим.
Сделаем через SO10 простой текст и укажем название переменных, которые мы будет подменять. Однако для переменных мы будем следовать нескольким правилам:
1) Элементарные переменные «обнимем» значком $, то есть если у нас компонент корневой структуры имеет имя KUNNR, то подготовленная для него переменная в шаблоне будет $KUNNR$. Выделено синим на скриншоте (рис.1).
2) Для табличных переменных укажем переменную с квадратной скобкой в начале части шаблона, к которому нужно применять каждую строку таблицы и в конце шаблона.
Компонент входной структуры, в котором есть внутренняя таблица имеет имя ORDER_LINES. Тогда перед строкой таблицы у нас будет переменная $[ORDER_LINES$ (переменная «обнята» значком $ и имеет открывающуюся квадратную скобку вначале), а после строки шаблона будет переменная $ORDER_LINES]$. (квадратная открывающаяся скобка). Таким образом, мы поймем, где для внутренней таблицы начинается шаблон, а где он завершается. (выделено фиолетовым на рис1.).
3) Для вложенных структур переменную будут вида $STRUCT_NAME-$VAR_IN_STRUCT$ , то есть значок $ вначале имени структуры и «обнимает» переменную в структуре. Выделено оранжевым на рис1.
Текстовое содержание шаблона доступно на github.
Теперь рассмотрим, как мы можем это использовать. Пусть у нас есть информация по заказу клиента, как показано ниже. Есть заголовок, есть позиции и есть вложенная структура. ((полный код указан здесь).)
Теперь же с помощью нашего источника данных и шаблона с подготовленными переменными заполним шаблон по сути в 3 строки.
В основе заполнения шаблона лежит простой принцип: имя переменной из внутренней структуры «обнимается» значком $ слева и справа и подаётся в replace для строки.
А компоненты структуры мы получаем через RTTI-класс CL_ABAP_DATADESCR.
А затем мы просто подменяем переменные в шаблоне. (полный код на github)
В итоге текстовый шаблон наполняется данными и получается результат, как представлен на скриншоте ниже.
Как видно это простой для применения и подготовки способ.