Skip to main content

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"

}

]

}

]

}

]

}

}

]

}

}

}

2 réponses
  1. 19 févr. 2020, 07:11

    @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

0/9000