简单转换中的可选 XML 标记?
Optional XML Tag in Simple Transformation?
我是使用简单转换的新手,我需要从内部表中获取 XML。有些表没有信息(记录),所以我试图在简单转换中设置条件,我需要做的是隐藏标签 User
及其内部标签和属性,如果表中没有记录并在有记录时显示它,但我做不到...
我希望有人能看到我做错了什么,并指出我是多么愚蠢……这是我尝试过的代码:
<tt:cond check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER.'))">
<User tt:value-ref=".DEPARTAMENT.DOCUMENTINFO.USER."/>
<User>
<tt:attribute name="UserName" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.USERNAME"/>
<tt:attribute name="RFCUser" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RFCUSER"/>
<tt:attribute name="Residence" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RESIDENCE"/>
<Address>
<tt:attribute name="Street" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.STREET"/>
<tt:attribute name="Num" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.NUM"/>
[....]
</Address>
</User>
</tt:cond>
你没有给出你的ABAP变量的定义,具体哪里错了,如果你的条件是正确的很难回答。因此,让我提出一个完整的最小可重现示例的答案(根据 Stack Overflow 的建议,请参阅“帮助”菜单)。
如果您有此 ABAP 代码:
TYPES: BEGIN OF ty_user,
username TYPE string,
END OF ty_user,
ty_users TYPE STANDARD TABLE OF ty_user WITH EMPTY KEY.
DATA(users) = VALUE ty_users( ( username = `TOTO` ) ).
CALL TRANSFORMATION ztest SOURCE users = users RESULT XML DATA(xml).
和这个ztest
简单转换:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="USERS"/>
<tt:template>
<theroot>
<tt:cond check="not-initial(USERS)">
<Users>
<tt:loop ref=".USERS">
<User>
<tt:attribute name="UserName" value-ref="USERNAME"/>
</User>
</tt:loop>
</Users>
</tt:cond>
</theroot>
</tt:template>
</tt:transform>
会产生这个 XML:
<?xml version="1.0"?>
<theroot>
<Users>
<User UserName="TOTO"/>
</Users>
</theroot>
如果内部 table 为空,则会产生此 XML:
<?xml version="1.0"?>
<theroot/>
关于哪里出了问题
我是使用简单转换的新手,我需要从内部表中获取 XML。有些表没有信息(记录),所以我试图在简单转换中设置条件,我需要做的是隐藏标签 User
及其内部标签和属性,如果表中没有记录并在有记录时显示它,但我做不到...
我希望有人能看到我做错了什么,并指出我是多么愚蠢……这是我尝试过的代码:
<tt:cond check="not-initial(ref('.DEPARTAMENT.DOCUMENTINFO.USER.'))">
<User tt:value-ref=".DEPARTAMENT.DOCUMENTINFO.USER."/>
<User>
<tt:attribute name="UserName" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.USERNAME"/>
<tt:attribute name="RFCUser" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RFCUSER"/>
<tt:attribute name="Residence" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.RESIDENCE"/>
<Address>
<tt:attribute name="Street" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.STREET"/>
<tt:attribute name="Num" value-ref=".DEPARTAMENT.DOCUMENTINFO.USER.ADDRESS.NUM"/>
[....]
</Address>
</User>
</tt:cond>
你没有给出你的ABAP变量的定义,具体哪里错了,如果你的条件是正确的很难回答。因此,让我提出一个完整的最小可重现示例的答案(根据 Stack Overflow 的建议,请参阅“帮助”菜单)。
如果您有此 ABAP 代码:
TYPES: BEGIN OF ty_user,
username TYPE string,
END OF ty_user,
ty_users TYPE STANDARD TABLE OF ty_user WITH EMPTY KEY.
DATA(users) = VALUE ty_users( ( username = `TOTO` ) ).
CALL TRANSFORMATION ztest SOURCE users = users RESULT XML DATA(xml).
和这个ztest
简单转换:
<?sap.transform simple?>
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates">
<tt:root name="USERS"/>
<tt:template>
<theroot>
<tt:cond check="not-initial(USERS)">
<Users>
<tt:loop ref=".USERS">
<User>
<tt:attribute name="UserName" value-ref="USERNAME"/>
</User>
</tt:loop>
</Users>
</tt:cond>
</theroot>
</tt:template>
</tt:transform>
会产生这个 XML:
<?xml version="1.0"?>
<theroot>
<Users>
<User UserName="TOTO"/>
</Users>
</theroot>
如果内部 table 为空,则会产生此 XML:
<?xml version="1.0"?>
<theroot/>
关于哪里出了问题