I have input in xml and output in application/java. There is one element in input which has multiple elements. based on one of the value, the out put array object elements has to be repeated or not
input- xml data
<?xml version="1.0" encoding="UTF-8"?>
<ORDERS01>
<IDOC BEGIN="1">
<E1EDKA1 SEGMENT="1">
<PARVW>AG</PARVW>
<PARTN>1111</PARTN>
<NAME1>name1</NAME1>
<STRAS>Starts1</STRAS>
<ORT01>ort011</ORT01>
<PSTLZ>111</PSTLZ>
<LAND1>DK</LAND1>
<TELF1>121212</TELF1>
<TELFX>12323</TELFX>
<SPRAS>K</SPRAS>
<HAUSN>000</HAUSN>
<BNAME>B Name1</BNAME>
<SPRAS_ISO>DA</SPRAS_ISO>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>LF</PARVW>
<PARTN>2222</PARTN>
<NAME1>name2</NAME1>
<STRAS>stras2</STRAS>
<ORT01>ort012</ORT01>
<PSTLZ>222</PSTLZ>
<LAND1>DK</LAND1>
<TELF1>1213</TELF1>
<TELBX>test@gmail.com</TELBX>
<TELFX>112222</TELFX>
<SPRAS>E</SPRAS>
<BNAME>B Name2</BNAME>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>RE</PARVW>
<PARTN>3333</PARTN>
<NAME1>name3</NAME1>
<STRAS>stras3</STRAS>
<ORT01>ort013</ORT01>
<PSTLZ>333</PSTLZ>
<LAND1>DK</LAND1>
<TELF1>123123123</TELF1>
<TELFX>089776766</TELFX>
<SPRAS>K</SPRAS>
<HAUSN>0000</HAUSN>
<SPRAS_ISO>DA</SPRAS_ISO>
</E1EDKA1>
<E1EDKA1 SEGMENT="1">
<PARVW>RG</PARVW>
<PARTN>444444</PARTN>
<NAME1>name4</NAME1>
<STRAS>stras04</STRAS>
<ORT01>ort014</ORT01>
<PSTLZ>123</PSTLZ>
<LAND1>DK</LAND1>
<TELF1>346456</TELF1>
<TELFX>2143243</TELFX>
<SPRAS>K</SPRAS>
<HAUSN>00</HAUSN>
<SPRAS_ISO>DA</SPRAS_ISO>
</E1EDKA1>
</IDOC>
</ORDERS01>
----
E1EDKA1 - element has been repeated, it has one attribute BNAME. for two of the indexes of E1EDKA1, this attribute has value and for remaining ones, there is no value .
I want if BNAME has any value then only {
"0250_CTA": {
"CTA01": "SU",
"CTA0202": ""
},
should appear else not. However I am getting this one even if BNAME attribute does not exist.
dw expression
%dw 2.0
output application/json
---
{
Messages: {
D97A: {
ORDRSP: [{
Heading: {
"0140_Segment_group_3": payload.ORDERS01.IDOC.*E1EDKA1 map ( item , index ) -> {
"0150_NAD": {
NAD01: if(item.PARVW as Enum == 'AG') ('BY') else((if(item.PARVW as Enum == 'LF') ('SU') else ((if(item.PARVW as Enum == 'WE') ('UC') else (if(item.PARVW as Enum == 'RE') ('RE') else ('BT')))))),
NAD0201: item.PARTN as String default "",
NAD0203: "91",
NAD0401: item.NAME1,
NAD0402: item.NAME2 as String default "",
NAD0403: item.NAME3 as String default "",
NAD0501: item.STRAS,
NAD06: item.ORT01,
NAD08: item.PSTLZ as String default "",
NAD09: item.LAND1
},
"0240_Segment_group_6": [{
"0250_CTA": {
CTA01: "SU",
CTA0202: item.BNAME as String default "",
},
"0260_COM": [
{
COM0101: if(item.SPRAS == "E") (item.TELBX) else (item.TELF1) as String default "",
COM0102: if(item.TELBX !=null) ("EM") else ("TE")
}
]
}]
}
}
}]
}
}
}
output getting now
{
"Messages": {
"D97A": {
"ORDRSP": [
{
"Heading": {
"0140_Segment_group_3": [
{
"0150_NAD": {
"NAD01": "BY",
"NAD0201": "1111",
"NAD0203": "91",
"NAD0401": "name1",
"NAD0402": "",
"NAD0403": "",
"NAD0501": "Starts1",
"NAD06": "ort011",
"NAD08": "111",
"NAD09": "DK"
},
"0240_Segment_group_6": [
{
"0250_CTA": {
"CTA01": "SU",
"CTA0202": "B Name1"
},
"0260_COM": [
{
"COM0101": "121212",
"COM0102": "TE"
}
]
}
]
},
{
"0150_NAD": {
"NAD01": "SU",
"NAD0201": "2222",
"NAD0203": "91",
"NAD0401": "name2",
"NAD0402": "",
"NAD0403": "",
"NAD0501": "stras2",
"NAD06": "ort012",
"NAD08": "222",
"NAD09": "DK"
},
"0240_Segment_group_6": [
{
"0250_CTA": {
"CTA01": "SU",
"CTA0202": "B Name2"
},
"0260_COM": [
{
"COM0101": "test@gmail.com",
"COM0102": "EM"
}
]
}
]
},
{
"0150_NAD": {
"NAD01": "RE",
"NAD0201": "3333",
"NAD0203": "91",
"NAD0401": "name3",
"NAD0402": "",
"NAD0403": "",
"NAD0501": "stras3",
"NAD06": "ort013",
"NAD08": "333",
"NAD09": "DK"
},
"0240_Segment_group_6": [
{
"0250_CTA": {
"CTA01": "SU",
"CTA0202": ""
},
"0260_COM": [
{
"COM0101": "123123123",
"COM0102": "TE"
}
]
}
]
},
{
"0150_NAD": {
"NAD01": "BT",
"NAD0201": "444444",
"NAD0203": "91",
"NAD0401": "name4",
"NAD0402": "",
"NAD0403": "",
"NAD0501": "stras04",
"NAD06": "ort014",
"NAD08": "123",
"NAD09": "DK"
},
"0240_Segment_group_6": [
{
"0250_CTA": {
"CTA01": "SU",
"CTA0202": ""
},
"0260_COM": [
{
"COM0101": "346456",
"COM0102": "TE"
}
]
}
]
}
]
}
}
]
}
}
}
@Sai Gochhayat
You can use the below script.
I have enlosed the "0250_CTA" key pair as a conditional.
Only if BNAME exist then it will get populated.
("0250_CTA": {
CTA01: "SU",
CTA0202: item.BNAME as String default "",
}) if (item.BNAME != null),
Completed script below:
%dw 2.0
output application/json
---
{
Messages: {
D97A: {
ORDRSP: [{
Heading: {
"0140_Segment_group_3": payload.ORDERS01.IDOC.*E1EDKA1 map ( item , index ) -> {
"0150_NAD": {
NAD01: if(item.PARVW as Enum == 'AG') ('BY') else((if(item.PARVW as Enum == 'LF') ('SU') else ((if(item.PARVW as Enum == 'WE') ('UC') else (if(item.PARVW as Enum == 'RE') ('RE') else ('BT')))))),
NAD0201: item.PARTN as String default "",
NAD0203: "91",
NAD0401: item.NAME1,
NAD0402: item.NAME2 as String default "",
NAD0403: item.NAME3 as String default "",
NAD0501: item.STRAS,
NAD06: item.ORT01,
NAD08: item.PSTLZ as String default "",
NAD09: item.LAND1
},
"0240_Segment_group_6": [{
("0250_CTA": {
CTA01: "SU",
CTA0202: item.BNAME as String default "",
}) if (item.BNAME != null),
"0260_COM": [
{
COM0101: if(item.SPRAS == "E") (item.TELBX) else (item.TELF1) as String default "",
COM0102: if(item.TELBX !=null) ("EM") else ("TE")
}
]
}]
}
}
}]
}
}
}
-HTH
Rahul