Меню

Решение простых проблем с помощью Simple Transformation

|

В статье представлены базовые сведения о языке Simple Transformation, указаны основные команды Simple Transformation и описаны шаги, необходимые для создания преобразований на Simple Transformation для структур и внутренних таблиц. Вы на наглядном примере узнаете, как загрузить данные ABAP из внутренней таблицы в формат Microsoft Excel с помощью Simple Transformation.

Ключевое понятие

Simple Transformation — это метаязык для преобразования XML в ABAP и наоборот. С помощью Simple Transformation в сочетании с ABAP-кодом можно преобразовать содержимое отдельных полей, структур и внутренних таблиц с данными ABAP в файлы формата XML.

Simple Transformation — это метаязык для преобразования XML в ABAP и наоборот. При разумном использовании он позволяет решить целый ряд важных задач, например, разрешить разработчикам экспортировать данные из системы SAP в Microsoft Excel в сложных форматах.

Цель данной статьи — описать основные принципы применения языка Simple Transformation и его преимущества. Начнем с краткого обзора Simple Transformation, а затем рассмотрим шаги, необходимые для создания преобразований, а также синтаксис для вызова этих преобразований в ABAP. В статье описаны преобразования для структур и внутренних таблиц, сериализация и десериализация ABAP/XML, а также графический редактор для определения преобразований. На примере преобразования я покажу, как загружать данные в файл Microsoft Excel в сложном формате.

Снимки экранов сделаны в системе SAP NetWeaver 7.50.

Simple Transformation: обзор

Преобразование данных ABAP в формат XML называется сериализацией, а обратный процесс преобразования данных XML в объекты ABAP-словаря — десериализацией. Для вызова преобразований из ABAP-программ используется оператор CALL TRANSFORMATION. Преобразования Simple Transformation создаются с помощью транзакции XSLT_TOOL.

Чтобы понять, как это выглядит, обратимся к примеру простого преобразования DEMO_ST_PROGRAM на рис. 1.

Рис. 1. Пример преобразования Simple Transformation

При создании нового преобразования в первой строке система SAP добавляет строку <?sap.transform simple?>. Фрагмент < and > содержит XML-элементы. XML-элементы могут быть двух видов: собственно команды Simple Transformation и литералы XML.

Команды Simple Transformation выполняются для достижения определенной цели. Список команд Simple Transformation можно просмотреть по адресу http://www.sap.com/transformation-templates. Примеры команд Simple Transformation: tt:template, tt:root и tt:transform. Все они начинаются с префикса tt.

Литералы XML: Компоненты XML, которые не являются командами Simple Transformation, называются литералами. У них нет значения на языке Simple Transformation.

Программа Simple Transformation содержит шаблон tt:template, который указывает блок для определения порядка создания XML-документа из объектов ABAP-словаря при сериализации или порядок извлечения данных ABAP из XML-документа при десериализации.

Шаблон также может содержать подшаблоны. В программе Simple Transformation существуют корни данных. Корни данных представляют собой интерфейсы для преобразования данных во время сериализации и десериализации. Для преобразования данных и использования данных ABAP код преобразования должен включать в себя по крайней мере один корневой элемент.

Теперь вы знаете, как работает Simple Transformation. Рассмотрим способ представления данных. Для представления данных используются три базовые команды: tt:value, tt:loop и tt:template. Команда Simple Transformation tt:value используется для представления полей данных и структур полей, а команда tt:loop позволяет выполнять сериализацию внутренних таблиц.

Команда tt:template указывает шаблон в преобразовании. Этому шаблону может быть присвоено имя, но это необязательно. В программе Simple Transformation должен быть определен по крайней мере один шаблон. В преобразовании должен быть указан основной шаблон. В шаблоне могут содержаться команды Simple Transformation и литералы XML. Основной шаблон в программе определяет анатомию строки XML, в которую будет выполнена сериализация данных ABAP или из которой будет выполнена десериализация.

Создание преобразования с помощью Simple Transformation

Теперь рассмотрим создание очень простого преобразования с помощью Simple Transformation. В данном случае корень данных отсутствует. Преобразование содержит только литералы. Для получения данных из ABAP-программы и их преобразования в XML требуется наличие по крайней мере одного корня данных. Преобразования могут не иметь корней данных, но в таком случае преобразовать данные ABAP будет невозможно.

Выполните транзакцию XSLT_TOOL. На появившемся экране (рис. 2) введите имя в поле «Transformation» (Преобразование). Нажмите кнопку «Create» (Создать).

Рис. 2. Ввод имени в поле «Transformation» (Преобразование) на экране XSLT_TOOL

Появится диалоговое окно, представленное на рис. 3.

Рис. 3. Диалоговое окно для создания простого преобразования

Введите краткое описание и выберите тип преобразования «Simple Transformation» (Простое преобразование). Затем нажмите Enter. Откроется экран, показанный на рис. 4. Для вызова редактора с базовым кодом нового преобразования щелкните по вкладке «SourceCde» (Исходный код).

Рис. 4. Создание преобразования

Теперь напишем код в новом преобразовании на языке Simple Transformation. Удалите корневой элемент. По умолчанию система SAP добавляет один корневой элемент, но в данном случае его следует удалить за ненадобностью. Далее добавьте литералы, а также два буквенных текста: с идентификатором и без идентификатора (рис. 5).

Рис. 5. Простое преобразование

Здесь имеется литерал Y0, для которого определены литералы Y1 и Y2. Для литерала Y1 указан буквенный текст без идентификатора. С другой стороны, литералу Y2 присвоен текст с идентификатором (с помощью <tt:text> и </tt:text>).

Корневой элемент для данного преобразования теперь отсутствует. Это означает, что в него можно передать любой объект данных (из ABAP-программы), но при сериализации преобразования он применен не будет. После сериализации преобразования XML выглядит как код, показанный на рис. 6.

Рис. 6. Сериализованное преобразование

Рассмотрим пример Simple Transformation на рис. 7, где используется буквенный текст с идентификатором.

Рис. 7. Другой пример преобразования

Вы видите элементы Y2 и Y3. Для Y3 идентификатор отсутствует, а для Y2 он указан (т. е. tt:text). Оба элемента, Y2 и Y3, содержат пробелы. Однако в полученной строке XML отображается разное содержимое для Y2 и Y3 в отладчике, см. Рис. 8. Для элемента Y3 пробелы сохраняются, а для Y2 нет.

Рис. 8. Полученная строка XML

Преобразования структур

Теперь я опишу шаги, которые необходимо выполнить для создания преобразования Simple Transformation на основе вложенной структуры, объявленной в ABAP-программе. Сначала создается преобразование структуры, которое затем вызывается в ABAP-программе с помощью оператора CALL TRANSFORMATION. Я передаю заполненную ABAP-структуру, которая соответствует корневому элементу, определенному в преобразовании. Далее эта структура преобразует данные SAP в XML.

Выполните следующие шаги:

1. Выполните транзакцию XSLT_TOOL. На появившемся экране (см. Рис. 2) введите подходящее имя в поле «Transformation» (Преобразование) и нажмите кнопку «Create» (Создать) .В данном случае я указал имя ZST1_TEST. В появившемся диалоговом окне (см. Рис. 3) выберите «Simple Transformation» и нажмите Enter. Введите код из окна редактора преобразования (рис. 9).

Рис. 9. Преобразование структуры

2. Введите код с вкладки «Source Code» (Исходный код) и активируйте его с помощью кнопки «Activate» (Активировать).

3. Теперь создайте ABAP-программу для вызова Simple Transformation. Код к данной программе представлен на рис. 10.

Рис. 10. Объявление структуры

Здесь содержится вложенная структура, OUTER_STRUCT, которая содержит поле COL1. Кроме того, она содержит внутреннюю структуру, состоящую из двух полей, COL1 и COL2.

4. Теперь напишем код для заполнения структуры данными (рис. 11).

Рис. 11. Добавление данных к OUTER_STRUCT

Оформите подписку sappro и получите полный доступ к материалам SAPPRO

У вас уже есть подписка?

Войти