Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Creating XML transformation using multiple internal tables

Former Member
0 Likes
521

<b>Hi everyone,</b><br />

<br />

<b>I'm trying to transforme 3 internal tables (from customer master data) into a single XML document.</b><br />

<p />

DATA: BEGIN OF wtab OCCURS 0 ,<br />

kunnr LIKE kna1-kunnr, "Customer ID<br />

ktokd LIKE kna1-ktokd, <br />

land1 LIKE kna1-land1, <br />

name1 LIKE kna1-name1, <br />

ort01 LIKE kna1-ort01, <br />

pstlz LIKE kna1-pstlz, <br />

spras_iso LIKE kna1-spras, <br />

smtp_addr LIKE adr6-smtp_addr, <br />

stras LIKE kna1-stras, <br />

END OF wtab.<br />

<br />

DATA: BEGIN OF wtab_o OCCURS 0 ,<br />

kunnr LIKE knvv-kunnr, "Customer ID<br />

vkorg LIKE knvv-vkorg, "Sales organisation<br />

waers LIKE knvv-waers, <br />

END OF wtab_o.<br />

<br />

DATA: BEGIN OF wtab_p OCCURS 0 ,<br />

kunnr LIKE knvp-kunnr, "Customer ID<br />

vkorg LIKE knvp-vkorg, "Sales organisation<br />

parvw LIKE knvp-parvw, <br />

kunn2 LIKE knvp-kunnr,<br />

END OF wtab_p.<br />

<p />

<b>The internal tables are related to each other as follows:*</b><br />

<br />

wtab-kunnr = wtab_o-kunnr<br />

<br />

AND<br />

<br />

wtab_o-vkorg = wtab_p-vkorg<br />

wtab_o-kunnr = wtab_p-kunnr<br />

<br />

<b>I couldn't figure out how to declare this relationship when calling the transformation. Is it possible?</b><br />

<p />

ABAP<br />

*----


<br />

<br />

REFRESH : gt_source_itab.<br />

CLEAR : g_rxml.<br />

<br />

GET REFERENCE OF wtab INTO gs_source_wa-value.<br />

gs_source_wa-name = 'DEBMAS04'.<br />

APPEND gs_source_wa TO gt_source_itab.<br />

<br />

GET REFERENCE OF wtab_o INTO gs_source_wa-value.<br />

gs_source_wa-name = 'E1KNVVM'.<br />

APPEND gs_source_wa TO gt_source_itab.<br />

<br />

GET REFERENCE OF wtab_p INTO gs_source_wa-value.<br />

gs_source_wa-name = 'E1KNVPM'.<br />

APPEND gs_source_wa TO gt_source_itab.<br />

<br />

TRY.<br />

CALL TRANSFORMATION Z_XSLT_CLIENT<br />

SOURCE (gt_source_itab)<br />

RESULT XML g_rxml<br />

OPTIONS xml_header = 'without_encoding'.<br />

CATCH cx_root INTO gs_rif_ex.<br />

<br />

gs_var_text = gs_rif_ex-&gt;get_text( ).<br />

MESSAGE gs_var_text TYPE 'E'.<br />

ENDTRY.<br />

<br />

*----


<br />

Transformation Z_XSLT_CLIENT:<br />

<br />

*----


<br />

&lt;xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:sap="http://www.sap.com/sapxsl"&gt;<br />

&lt;xsl:output indent="yes" encoding="UTF-16" method="xml" version="1.0"/&gt;<br />

&lt;xsl:strip-space elements="*"/&gt;<br />

&lt;xsl:template match="/"&gt;<br />

&lt;DEBMAS04&gt;<br />

&lt;xsl:apply-templates select="//DEBMAS04/item"/&gt;<br />

&lt;/DEBMAS04&gt;<br />

&lt;/xsl:template&gt;<br />

&lt;xsl:template match="DEBMAS04/item"&gt;<br />

&lt;IDOC&gt;<br />

&lt;xsl:attribute name="BEGIN"&gt;1&lt;/xsl:attribute&gt;<br />

&lt;E1KNA1M&gt;<br />

&lt;xsl:attribute name="SEGMENT"&gt;1&lt;/xsl:attribute&gt;<br />

&lt;KUNNR&gt;<br />

&lt;xsl:value-of select="KUNNR"/&gt;<br />

&lt;/KUNNR&gt;<br />

&lt;KTOKD&gt;<br />

&lt;xsl:value-of select="KTOKD"/&gt;<br />

&lt;/KTOKD&gt;<br />

&lt;LAND1&gt;<br />

&lt;xsl:value-of select="LAND1"/&gt;<br />

&lt;/LAND1&gt;<br />

&lt;NAME1&gt;<br />

&lt;xsl:value-of select="NAME1"/&gt;<br />

&lt;/NAME1&gt;<br />

&lt;ORT01&gt;<br />

&lt;xsl:value-of select="ORT01"/&gt;<br />

&lt;/ORT01&gt;<br />

&lt;PSTLZ&gt;<br />

&lt;xsl:value-of select="PSTLZ"/&gt;<br />

&lt;/PSTLZ&gt;<br />

&lt;SPRAS_ISO&gt;<br />

&lt;xsl:value-of select="SPRAS_ISO"/&gt;<br />

&lt;/SPRAS_ISO&gt;<br />

&lt;SMTP_ADDR&gt;<br />

&lt;xsl:value-of select="SMTP_ADDR"/&gt;<br />

&lt;/SMTP_ADDR&gt;<br />

&lt;STRAS&gt;<br />

&lt;xsl:value-of select="STRAS"/&gt;<br />

&lt;/STRAS&gt;<br />

&lt;xsl:apply-templates select="//E1KNVVM/item"/&gt;<br />

&lt;/E1KNA1M&gt;<br />

&lt;/IDOC&gt;<br />

&lt;/xsl:template&gt;<br />

&lt;xsl:template match="E1KNVVM/item"&gt;<br />

&lt;E1KNVVM&gt;<br />

&lt;xsl:attribute name="SEGMENT"&gt;1&lt;/xsl:attribute&gt;<br />

&lt;VKORG&gt;<br />

&lt;xsl:value-of select="VKORG"/&gt;<br />

&lt;/VKORG&gt;<br />

&lt;WAERS&gt;<br />

&lt;xsl:value-of select="WAERS"/&gt;<br />

&lt;/WAERS&gt;<br />

&lt;xsl:apply-templates select="//E1KNVPM/item"/&gt;<br />

&lt;/E1KNVVM&gt;<br />

&lt;/xsl:template&gt;<br />

&lt;xsl:template match="E1KNVPM/item"&gt;<br />

&lt;E1KNVPM&gt;<br />

&lt;xsl:attribute name="SEGMENT"&gt;1&lt;/xsl:attribute&gt;<br />

&lt;PARVW&gt;<br />

&lt;xsl:value-of select="PARVW"/&gt;<br />

&lt;/PARVW&gt;<br />

&lt;KUNN2&gt;<br />

&lt;xsl:value-of select="KUNN2"/&gt;<br />

&lt;/KUNN2&gt;<br />

&lt;/E1KNVPM&gt;<br />

&lt;/xsl:template&gt;<br />

&lt;/xsl:transform&gt;<br />

*----


<br />

<b>The way the call transformation is now, for each line in table wtab (DEBMAS04) I'm getting all the lines in table wtab_o (E1KNVVM) and table wtab_p (E1KNVPM)</b><br />

<p />

<br />

Thank you for your help,<br />

<br />

Giselle<br />

<p />

1 REPLY 1
Read only

Sandra_Rossi
Active Contributor
0 Likes
369

Hi Giselle,

I think it's possible (using xsl:if for instance), but an easier way is to nest your internal tables declarations (wtab_o inside wtab, kunnr becomes useless, and wtab_p inside wtab_o), and use the SAP standard "ID" transformation (no need for a custom XSL transformation). You'll get a slightly different result, but I don't think you want something very sophisticated.

Sandra