Нашел в xslt следующий особенность: если структуру передать через ref data в xslt преобразование, то xslt не видит эту структуру. Есть вариант это победить?
Код программы с примером:
Code:
"-------- с ref ------------------------------
TYPES: BEGIN OF lty_s_param,
test TYPE string,
END OF lty_s_param.
TYPES: BEGIN OF lty_s_query,
r_param TYPE REF TO data,
END OF lty_s_query.
DATA: lt_xslt_source TYPE abap_trans_srcbind_tab,
ls_xslt_source TYPE abap_trans_srcbind,
ls_data TYPE lty_s_query,
ls_param TYPE lty_s_param,
lv_xml TYPE string.
ls_param-test = 'TEST1'.
GET REFERENCE OF ls_param INTO ls_data-r_param.
ls_xslt_source-name = 'ROOT'.
GET REFERENCE OF ls_data INTO ls_xslt_source-value.
APPEND ls_xslt_source TO lt_xslt_source.
CALL TRANSFORMATION ztest4 SOURCE (lt_xslt_source)
RESULT XML lv_xml.
WRITE lv_xml.
Преобразование
Code:
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl" xmlns:asx="http://www.sap.com/abapxml" exclude-result-prefixes="asx sap" version="1.0">
<xsl:output encoding="utf-8" indent="no" method="xml" omit-xml-declaration="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="ROOT">
<str name="id">
<xsl:value-of select="R_PARAM/TEST"/>
</str>
</xsl:template>
</xsl:transform>
Ответ сейчас:
Code:
<str name="id"></str>
Хочу такой ответ:
Code:
<str name="id">TEST</str>
Вот так работает, но хочу через ref to data:
Code:
"-------- без ref ------------------------------
TYPES: BEGIN OF lty_s_param,
test TYPE string,
END OF lty_s_param.
TYPES: BEGIN OF lty_s_query,
r_param TYPE lty_s_param,
END OF lty_s_query.
DATA: lt_xslt_source TYPE abap_trans_srcbind_tab,
ls_xslt_source TYPE abap_trans_srcbind,
ls_data TYPE lty_s_query,
ls_param TYPE lty_s_param,
lv_xml TYPE string.
ls_data-r_param-test = 'TEST2'.
ls_xslt_source-name = 'ROOT'.
GET REFERENCE OF ls_data INTO ls_xslt_source-value.
APPEND ls_xslt_source TO lt_xslt_source.
"-------- без ref ------------------------------
CALL TRANSFORMATION ztest4 SOURCE (lt_xslt_source)
RESULT XML lv_xml.
WRITE lv_xml.