Меню

Использование RTTI для шаблонов на основе sap-script текстов

|

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

 Шаблон для текста ZC8A017_TEMPL_ORD1 (рис.1):

*	 	<B>Customer ID:</B> $KUNNR$ <BR/>
*	 	Customer Name: $KUNNR_TXT$ <BR/>
*	 	Order Number (internal): $ORDER_NUM$ <BR/>
*	 	Customer Number (external): $CUSTOMER_ORDER$ <BR/>
*	 	                                                                        
*	 	Items of order is below:
*	 	<table>
*	 	$[ORDER_LINES$
*	 	<TR>
*	 	<TD> Material: $MATNR$ ;</TD>
*	 	<TD>  Quantity: <strong> $QUAN$ </strong> ;  </TD>
*	 	</TR>
*	 	                                                                        
*	 	$ORDER_LINES]$
*	 	</table>
*	 	<BR/>
*	 	Delivery Info Info: <BR/>
*	 	City/Town: $DLVADDR-$CITY$ <BR/>
*	 	Street+House: $DLVADDR-$STREET$, $DLVADDR-$HOUSE$ <BR/>

Теперь рассмотрим, как мы можем это использовать. Пусть у нас есть информация по заказу клиента, как показано ниже. Есть заголовок, есть позиции и есть вложенная структура.

Структура для отображения информации по заказу клиента (полный код указан здесь).

    TYPES: BEGIN OF ts_tab_line
            , matnr TYPE char18
            , matnr_txt TYPE text80
            , quan TYPE p LENGTH 10 DECIMALS 3
            , meins TYPE meins
            , ship_date TYPE sydatum
        , END OF ts_tab_line
        , tt_tab_line TYPE STANDARD TABLE OF ts_tab_line WITH DEFAULT KEY
        .

    TYPES: BEGIN OF TS_DELIV_ADDR
              , CITY TYPE STRING
              , STREET TYPE STRING
              , HOUSE TYPE STRING
           , END OF TS_DELIV_ADDR
           .

    TYPES: BEGIN

Если хотите прочитать статью полностью и оставить свои комментарии присоединяйтесь к sapland

У вас уже есть учетная запись?

Войти