Pull a part of Process Data by XSLT

Mirjana's picture
Request: get a specific Output from the following Process Data
 
<ProcessData>
          <OUTPUT>
                   <Data>
                             <naziv>STAVKA1</naziv>
                             <kolicina>2</kolicina>
                             <cijena>10.20</cijena>
                             <uk_cijena>20.40</uk_cijena>
                             <produkt_ID>123</produkt_ID>
                             <adresa>Heinzelova 1</adresa>
                   </Data>
                   <Data>
                             <naziv>STAVKA2</naziv>
                             <kolicina>3</kolicina>
                             <cijena>15.10</cijena>
                             <uk_cijena>45.30</uk_cijena>
                             <produkt_ID>234</produkt_ID>
                             <adresa>Heinzelova 2</adresa>
                   </Data>
                   <Data>
                             <naziv>STAVKA3</naziv>
                             <kolicina>5</kolicina>
                             <cijena>12.41</cijena>
                             <uk_cijena>62.05</uk_cijena>
                             <produkt_ID>345</produkt_ID>
                             <adresa>Heinzelova 3</adresa>
                   </Data>
          </OUTPUT>
</ProcessData>
 
Output:
 
<ENABLED>
<naziv>STAVKA1</naziv>
          <produkt_ID>123</produkt_ID>
</ENABLED>
<ENABLED>
          <naziv>STAVKA2</naziv>
          <produkt_ID>234</produkt_ID>
</ENABLED>
<ENABLED>
          <naziv>STAVKA3</naziv>
          <produkt_ID>345</produkt_ID>
</ENABLED>
 
XSLT:
 
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
          <xsl:template match="/">
                   <ROOT>
                             <xsl:for-each select="//Data">
                                      <xsl:element name="ENABLED">
                                                <xsl:element name="naziv">
                                                          <xsl:value-of select="naziv/text()"/>
                                                </xsl:element>
                                                <xsl:element name="produkt_ID">
                                                          <xsl:value-of select="produkt_ID/text()"/>
                                                </xsl:element>
                                      </xsl:element>
                             </xsl:for-each>
                   </ROOT>
          </xsl:template>
</xsl:stylesheet>
 
BPML – XSLT Service configuration (result goes to PrimaryDocument):
 
<operation name="XSLT Service">
          <participant name="XSLTService"/>
          <output message="XSLTServiceTypeInputMessage">
                   <assign to="." from="*"/>
                   <assign to="input_pd_xpath">/</assign>
                   <assign to="xml_input_from">ProcData</assign>
                   <assign to="xslt_name">TEST_ProcessData_pull</assign>
          </output>
          <input message="inmsg">
                   <assign to="." from="*"/>
          </input>
</operation>
 
Result in the Primary Document:
 
PrimaryDocument
 
Process Name: TEST_ProcessData_pull     Instance ID: 1342884
Service Name: XSLTService
Document Name: xslt_result      Document Store: Database 
Document ID: 911:7252702:12e71919a89:lin2:node1 
Document in process data:   text/xml 
 
<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
          <ENABLED>
                   <naziv>STAVKA1</naziv>
                   <produkt_ID>123</produkt_ID>
          </ENABLED>
          <ENABLED>
                   <naziv>STAVKA2</naziv>
                   <produkt_ID>234</produkt_ID>
          </ENABLED>
          <ENABLED>
                   <naziv>STAVKA3</naziv>
                   <produkt_ID>345</produkt_ID>
          </ENABLED>
</ROOT>
 
 
Assign for moving it back to the ProcessData:
 
<assign to="." from="DocToDOM(PrimaryDocument)/*"></assign>
 
Result in the Process Data after the last assign:
 
<?xml version="1.0" encoding="UTF-8"?>
<ProcessData>
          <OUTPUT>
                   <Data>
                             <naziv>STAVKA1</naziv>
                             <kolicina>2</kolicina>
                             <cijena>10.20</cijena>
                             <uk_cijena>20.40</uk_cijena>
                             <produkt_ID>123</produkt_ID>
                             <adresa>Heinzelova 1</adresa>
                   </Data>
                   <Data>
                             <naziv>STAVKA2</naziv>
                             <kolicina>3</kolicina>
                             <cijena>15.10</cijena>
                             <uk_cijena>45.30</uk_cijena>
                             <produkt_ID>234</produkt_ID>
                             <adresa>Heinzelova 2</adresa>
                   </Data>
                   <Data>
                             <naziv>STAVKA3</naziv>
                             <kolicina>5</kolicina>
                             <cijena>12.41</cijena>
                             <uk_cijena>62.05</uk_cijena>
                             <produkt_ID>345</produkt_ID>
                             <adresa>Heinzelova 3</adresa>
                   </Data>
          </OUTPUT>
          <PrimaryDocument SCIObjectID="746:7278775:12e71919a89:lin2:node1"/>
          <ENABLED>
                        <naziv>STAVKA1</naziv>
                        <produkt_ID>123</produkt_ID>
            </ENABLED>
            <ENABLED>
                        <naziv>STAVKA2</naziv>
                        <produkt_ID>234</produkt_ID>
            </ENABLED>
            <ENABLED>
                        <naziv>STAVKA3</naziv>
                        <produkt_ID>345</produkt_ID>
            </ENABLED>
</ProcessData>