cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Groovy script to update incoming xml payload element

aditya_20
Explorer
0 Kudos
532

Hello All,

I have a requirement to replace incoming xml element values with new values, those are set as headers/properties.

Input payload:

<EDI_DC40>
<TABNAM>ORDERSHIPPED</TABNAM>
<MANDT>100</MANDT>
<DOCNUM></DOCNUM>
<DOCREL>640</DOCREL>
<STATUS>5</STATUS>
<DIRECT>2</DIRECT>
<IDOCTYP>DELVRY03</IDOCTYP>
<CIMTYP/>
<MESTYP>YT_LA_WHSCON</MESTYP>
<SNDPOR>LS</SNDPOR>
<SNDPRT>DELVRY03</SNDPRT>
<SNDPRN>LS</SNDPRN>
<RCVPOR></RCVPOR>
<RCVPRT>DELVRY03</RCVPRT>
<RCVPRN>P77</RCVPRN>
<CREDAT>20240830</CREDAT>
<CRETIM>121540</CRETIM>
</EDI_DC40>

The SNDPRN and RCVPRN values need to be updated.

Output Required:

<EDI_DC40>
<TABNAM>ORDERSHIPPED</TABNAM>
<MANDT>100</MANDT>
<DOCNUM></DOCNUM>
<DOCREL>640</DOCREL>
<STATUS>5</STATUS>
<DIRECT>2</DIRECT>
<IDOCTYP>DELVRY03</IDOCTYP>
<CIMTYP/>
<MESTYP>YT_LA_WHSCON</MESTYP>
<SNDPOR>LS</SNDPOR>
<SNDPRT>DELVRY03</SNDPRT>
<SNDPRN>BTP_IS</SNDPRN>
<RCVPOR></RCVPOR>
<RCVPRT>DELVRY03</RCVPRT>
<RCVPRN>ZEUABC</RCVPRN>
<CREDAT>20240830</CREDAT>
<CRETIM>121540</CRETIM>
</EDI_DC40>

Can anyone share the script to achieve the required output.

 

Thanks,

Aditya

 

Accepted Solutions (0)

Answers (1)

Answers (1)

umasaral
Contributor
0 Kudos

Hi 

To achieve the required output where specific XML element values are replaced with new ones,
you can use the following Groovy script in integration platforms like SAP CPI or other similar environments:

import groovy.xml.XmlUtil

// Input payload
def inputPayload = '''<EDI_DC40>
<TABNAM>ORDERSHIPPED</TABNAM>
<MANDT>100</MANDT>
<DOCNUM></DOCNUM>
<DOCREL>640</DOCREL>
<STATUS>5</STATUS>
<DIRECT>2</DIRECT>
<IDOCTYP>DELVRY03</IDOCTYP>
<CIMTYP/>
<MESTYP>YT_LA_WHSCON</MESTYP>
<SNDPOR>LS</SNDPOR>
<SNDPRT>DELVRY03</SNDPRT>
<SNDPRN>LS</SNDPRN>
<RCVPOR></RCVPOR>
<RCVPRT>DELVRY03</RCVPRT>
<RCVPRN>P77</RCVPRN>
<CREDAT>20240830</CREDAT>
<CRETIM>121540</CRETIM>
</EDI_DC40>'''

// Parse the XML
def xml = new XmlParser().parseText(inputPayload)

// Replace values
xml.SNDPRN[0].value = 'BTP_IS'
xml.RCVPRN[0].value = 'ZEUABC'

// Convert back to string
def outputPayload = XmlUtil.serialize(xml)

// Return updated payload
return outputPayload

Output:

The script will produce the desired XML:
<EDI_DC40>
<TABNAM>ORDERSHIPPED</TABNAM>
<MANDT>100</MANDT>
<DOCNUM/>
<DOCREL>640</DOCREL>
<STATUS>5</STATUS>
<DIRECT>2</DIRECT>
<IDOCTYP>DELVRY03</IDOCTYP>
<CIMTYP/>
<MESTYP>YT_LA_WHSCON</MESTYP>
<SNDPOR>LS</SNDPOR>
<SNDPRT>DELVRY03</SNDPRT>
<SNDPRN>BTP_IS</SNDPRN>
<RCVPOR/>
<RCVPRT>DELVRY03</RCVPRT>
<RCVPRN>ZEUABC</RCVPRN>
<CREDAT>20240830</CREDAT>
<CRETIM>121540</CRETIM>
</EDI_DC40>


Note:

Adjust headers/properties dynamically if required by fetching values from variables or runtime configurations. Ensure the integration tool supports Groovy scripting.