Простые трансформации(Simple Transformation) позволяют преобразовывать данные ABAP в XML и обратно. Процесс преобразования данных в XML называется Сериализация, обратное действие - Десериализация.
Рассмотрим следующий пример. Нам необходимо получить данные из HTML таблицы во внутреннюю таблицу abap(На месте таблицы может быть любой другой объект с XML структурой).
Таблица имеет следующий вид:
HTML:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<table border="1" width="600"> <tr> <td colspan="4" align="center">HEADER</td> </tr> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> </tr> <tr> <td>10</td> <td>20</td> <td>30</td> <td>40</td> </tr> </table> |
Создадим тип, который будем использовать для получения данных. Для этого перейдем в SE11
Далее перейдем в транзакцию strans и создадим трансформацию:
Переходим в режим графической обработки:
Удаляем корневой узел:
Вставляем новый:
Вводим название и тип:
После этого в части экрана «Data Tools» появится таблица. Перетаскиваем ее в правую часть экрана «Simple Transformation» :
Сохраняем и возвращаемся на предыдущий экран:
Теперь необходимо привести теги в соответствии с таблицей HTML. Важно помнить, что они регистрозависимые.
Также необходимо пропустить первый тег <TR> т.к. в нем находится строка заголовка.
добавим следующий код <tt:skip count="1" name="tr"/>
в результате получим такой код трансформации
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?sap.transform simple?> <tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:ddic="http://www.sap.com/abapxml/types/dictionary" xmlns:def="http://www.sap.com/abapxml/types/defined"> <tt:root name="RESULT" type="ddic:ZSTRUCT"/> <tt:template> <table> <tt:skip count="1" name="tr"/> <tt:loop ref=".RESULT"> <tr> <td tt:value-ref="COL1"/> <td tt:value-ref="COL2"/> <td tt:value-ref="COL3"/> <td tt:value-ref="COL4"/> </tr> </tt:loop> </table> </tt:template> </tt:transform> |
Сохраняем и активируем
Вызываем преобразование в программе:
1 2 3 4 5 6 7 8 9 10 11 12 |
DATA lt_res TYPE zstruct. DATA lv_html_data TYPE string. “ сюда подаем HTML таблицу. TRY. CALL TRANSFORMATION ztest_parse_html SOURCE XML lv_html_data RESULT result = lt_res[]. CATCH cx_root. ENDTRY. |
Обратите внимание, что название параметра RESULT должно совпадать, с тем, которое прописано в трансформации. Иначе упадет в ошибку.
Было бы не плохо добавить скрин отладчика с содержимым внутренней таблицы lt_res