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

Issue with CPI ReplaceAll function in Groovy !

das_sappo
Participant
0 Likes
5,025

Dear Experts,

I need to replace couple of elements in the input message and for that I am using following script. But surprisingly only the last function is giving the correct output. Please suggest if I am missing anything here.

I am getting correct result for only - HierarchyLevel .

Input

<Records>
<TenantCode>900</TenantCode>
<HierarchyCode>7</HierarchyCode>
<HierarchyName>Test</HierarchyName>
<HierarchyLevel>1</HierarchyLevel>
</Records>
<Records>
<TenantCode>901</TenantCode>
<HierarchyCode>6</HierarchyCode>
<HierarchyName>Test</HierarchyName>
<HierarchyLevel>0</HierarchyLevel>
</Records>

Script

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
def Message processData(Message message) {
       def body = message.getBody(String) as String;
       message.setBody(body.replaceAll("TenantCode","ns2:TenantCode"))
       message.setBody(body.replaceAll("HierarchyCode","ns2:HierarchyCode"))
       message.setBody(body.replaceAll("HierarchyName","ns2:HierarchyName"))
       message.setBody(body.replaceAll("HierarchyLevel","ns2:HierarchyLevel"))
       return message;
}


Br,

Arvik

View Entire Topic
MartyMcCormick
Product and Topic Expert
Product and Topic Expert
0 Likes

Hi Arvik

You are using the original String body object from the first statement with each replace function (setBody function isn't updating the string object from the first statement).

Instead, use something like this:

 def body = message.getBody(String) as String;
       body = body.replaceAll("TenantCode","ns2:TenantCode");
       body = body.replaceAll("HierarchyCode","ns2:HierarchyCode");
       body = body.replaceAll("HierarchyName","ns2:HierarchyName");
       body = body.replaceAll("HierarchyLevel","ns2:HierarchyLevel");
	   message.setBody(body);

Thanks,
Marty

das_sappo
Participant
0 Likes

Thanks Marty.