Simple Transformations
简介
ST语言是一种描述ABAP 和XML之间格式转换的编程语言,用于ABAP数据的序列化(ABAP->XML)和反序列化(XML->ABAP)。
ST程序可以通过转换编辑器进行编辑(TCODE: STRANS),优点:ST程序很容易阅读;串行访问XML数据,因此即使数据量很大,也非常高效;ST程序同时描述序列化和反序列化,即用XML序列化的ABAP数据也可以用ST程序反序列化;仅限于基本和结构化ABAP数据以及内部表的转换。
创建一个Simple Transformation
TCODE: STRANS
创建一个transformation之后,有一些初始语句,再此界面根据要解析的XML编写程序,
第一行<?>用于标识转换(自动插入)
第二行transform代表根元素,xmlns后面代表命名空间,tt作为此空间中的约定。
语法
<tt:transform [template="tmpl"]>
...
</tt:transform>
根元素的关键字,可以指定模板属性的名称(可选),指定名称的模板作为主模板,如果未指定,没有名字的模板作为主模板。
<tt:template [name="tmpl"]>
...
</tt:template>
定义了一个模板,ST程序至少包含一个模板,模板必须名称是不一样的(没有名称的模板只能有一个),模板名称不区分大小写。
主模板的内容表示ABAP数据序列化或数据反序列化所依据的XML数据的结构。
模板的内容可以由文本XML元素和ST命令组成。
<tt:root name="..." [[line-]type="..."
[length="..."]
[decimals="..."]]
[...] />
ST程序必须至少包含一个模板外部的数据根声明。
数据根是ST程序与ABAP数据对象的接口,在语句调用转换中指定为源或目标字段。
数据根使用语句tt:root定义。必须使用name属性将名称分配给数据根。
在tt:transform级别声明的数据根构成主模板的上下文,可以直接在其中寻址。
子模板中无法识别数据根。但是,当调用这些模板时,它们可以绑定到子模板的本地数据根。
每个数据根都有自己的树结构,可用于处理绑定数据对象的组件。寻址数据根的子节点相当于引用绑定到数据根的数据对象的组件。各个数据根的树结构彼此独立。
单个树结构中数据节点的寻址总是从数据根开始。
每个模板都使用自己的树结构。只有主模板使用在转换级别声明的数据根,这些根在转换期间直接绑定到ABAP数据对象。调用子模板时,本地数据根将绑定到调用方的当前数据节点。
[tt:]ref
使用命令设置当前节点
<tt:ref name="node">
...
</tt:ref>
使用属性设置当前节点
<tt:... ref="node">
...
</tt:...>
在文本XML元素中设置当前节点
<... tt:ref="node">
...
</...>
<tt:value [ref="node"] [map="..."]
[length|minLength|maxLength="len"]
[xsd-type...] />
Value语法用于获取结构中的具体值,通常与ref共用。
<tt:transform
xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="ROOT"/>
<tt:template>
<X tt:ref="ROOT">
<X1>
<tt:value ref="COL1" />
</X1>
<X2>
<tt:value ref="COL2" />
</X2>
<X3 tt:ref="STRUC2">
<X1>
<tt:value ref="COL1" />
</X1>
<X2>
<tt:value ref="COL2" />
</X2>
</X3>
</X>
</tt:template>
</tt:transform>
<tt:loop [ref="node"] [name="alias"]>
...
</tt:loop>
内部表在循环中进行序列化和反序列化,该循环将当前节点设置为当前表行。
name属性可用于定义循环中当前节点的别名。在tt:loop循环中,可以使用$alias对当前节点进行寻址。
例1:
程序
DATA: BEGIN OF struc1,
x1 TYPE string,
x2 TYPE string,
BEGIN OF struc2,
col1 TYPE string,
col2 TYPE string,
END OF struc2,
END OF struc1.
DATA: lv_xml TYPE string.
DATA: lt_xml TYPE STANDARD TABLE OF string.
DATA: l_cx_st_error TYPE REF TO cx_st_error,
e_message TYPE char255.
PARAMETERS p_file TYPE string DEFAULT 'C:\Users\10156700c\Desktop\test2.xml'.
cl_gui_frontend_services=>gui_upload(
EXPORTING
filename = p_file
filetype = 'ASC'
CHANGING
data_tab = lt_xml
EXCEPTIONS
OTHERS = 19 ).
CONCATENATE LINES OF lt_xml INTO lv_xml SEPARATED BY space.
TRY.