on 07-28-2014 9:09 PM
Hi Experts,
My source data will have below structure.
<Source>
<D_235>Type</D_235>
<D_234>Number</D_234>
<D_235_2>Type</D_235_2>
<D_234_2>Number</D_234_2>
<D_235_3>Type</D_235_3>
<D_234_3>Number</D_234_3>
</Source>
Target Structure:
<Target>
<IDTNR>
</Target>
Mapping condition is:
IDTNR will contain concatenation of all Numbers which are coming from source if Type is not equals to "VN"
Data may come from source in any format like:
With only one number
<D_235>
<D_234>
<D_235_2>Type</D_235_2>
<D_234_2>Number</D_234_2>
<D_235_3/>
<D_234_3/>
or with two numbers
<D_235>A</D_235>
<D_234>123</D_234>
<D_235_2>B</D_235_2>
<D_234_2>876</D_234_2>
<D_235_3/>
<D_234_3/>
or with all 3 numbers with one type as "VN"
<D_235>H</D_235>
<D_234>980</D_234>
<D_235_2>P</D_235_2>
<D_234_2>760</D_234_2>
<D_235_3>VN</D_235_3>
<D_234_3>435</D_234_3>
Please help me on mapping for IDTNR field.
Thanks & Regards,
A.Neelima.
Hi,
You can use below graphical mapping logic to populate desired result
Instead of TYPE replace with <D_235>, for NUMINSET replace with <D_235_2>, for MSGNR replace with <D_235_3>
Instead of MSGID replace with <D_234> for the first if then else statement
<D_234_2> for second if then else statement
<D_234_3> for third if then else statement
Regards,
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Sarojkanta,
Thanks for your reply.
I just used Not after equlas function and in concat i used "/" because i need to seperate all materials with "/" symbol as per my requirement.
With the above mapping i am getting below out put.
If Input is :
<D_235>VN</D_235>
<D_234>12345</D_234>
<D_235_2>A</D_235_2>
<D_234_2>123</D_234_2>
<D_235_3/>
<D_234_3/>
I am getting Output for IDTNR as :
/123/
But expected output as 123(with out pipe symbol).
Appreciate your help on this.
Thanks & Regards,
A.Neelima.
Hi,
On this requirement mapping sheet is not updated yet.
I will explain requirement once again.
From sender i will get below possible number of inputs.
Possible scenario 1:
<D_235>
<D_234>
<D_235_2>IN</D_235_2>
<D_234_2>123</D_234_2>
<D_235_3/>
<D_234_3/>
Possible scenario 2:
<D_235>VN</D_235>
<D_234>456</D_234>
<D_235_2>BP</D_235_2>
<D_234_2>789</D_234_2>
<D_235_3/>
<D_234_3/>
Possible scenario 3:
<D_235>IN</D_235>
<D_234>980</D_234>
<D_235_2>VN</D_235_2>
<D_234_2>760</D_234_2>
<D_235_3>BP</D_235_3>
<D_234_3>120</D_234_3>
Below are the expected outputs fror each scenario:
Possible scenario 1 Output:
<IDTNR>123<IDTNR>
Possible scenario 2 Output:
<IDTNR>789<IDTNR>
Possible scenario 2 Output:
<IDTNR>980|120<IDTNR>
So my requirement is need to check D_235, D_235_2, D_235_3 are not equls to VN and its not empty value, and each output should concatenate with "|" pipe symbol if i get more than one number.
And "|" pipe symbol should not come in starting of the output or ending of the output or in middle of two numbers two pipe symbols.
Ex: |123 or 123| or 123||980 ---- Its not correct
Hope its clear now.
Thanks & Regards,
A.Neelima.
I was trying with graphical maping and its getting very complecated. I sugest try to use below udf for desired output.
take 6 input arguments v1,v2,v3,m1,m2,m3
in the maping pass <D_235> to V1
<D_235_2> to V2
<D_235_3/> to V3
<D_234> to m1
<D_234_2> to m2
<D_234_3/> to m3
map the udf output to <IDTNR>
Logic for UDF
-------------------
String output = new String();
if((!(v1.equals("VN")))&&(!(v2.equals("VN")))&&(!(v3.equals("VN"))))
output = m1+"|"+m2+"|"+m3;
else if((v1.equals("VN"))&&(!(v2.equals("VN")))&&(!(v3.equals("VN"))))
output = m2+"|"+m3;
else if((!(v1.equals("VN")))&&(v2.equals("VN"))&&(!(v3.equals("VN"))))
output = m1+"|"+m3;
else if((!(v1.equals("VN")))&&(!(v2.equals("VN")))&&(v3.equals("VN")))
output = m1+"|"+m2;
else if((!(v1.equals("VN")))&&(v2.equals("VN"))&&(v3.equals("VN")))
output = m1;
else if((v1.equals("VN"))&&(!(v2.equals("VN")))&&(v3.equals("VN")))
output = m2;
else if((v1.equals("VN"))&&(v2.equals("VN"))&&(!(v3.equals("VN"))))
output = m3;
return output;
-----------------------
Regards,
Hi,
Thanks for your reply.
By using this UDF also i am getting output as "|123" if i use below input data.
<D_235/>
<D_234/>
<D_235_2>VN</D_235_2>
<D_234_2>098</D_234_2>
<D_235_3>IN</D_235_3>
<D_234_3>123</D_234_3>
Expected output is : <IDTNR>123</IDTNR>
Coming output is : <IDTNR>|123</IDTNR>
Regards,
A.Neelima.
Hi Sarojkanta,
I have modified UDF which you have given, according to all possible scenarios.
Now its working fine.
Thanks for your help.
Below is the UDF which i have modified.
String output = new String();
if((((((!(v1.equals("VN")))&&(!(v1.equals("")))))&&((!(v2.equals("VN")))&&(!(v2.equals("")))))&&((!(v3.equals("VN")))&&(!(v3.equals(""))))))
output = m1+"|"+m2+"|"+m3;
else if(((((!(v1.equals("VN")))&&(!(v1.equals("")))))&&((!(v2.equals("VN")))&&(!(v2.equals(""))))))
output = m1+"|"+m2;
else if(((((!(v2.equals("VN")))&&(!(v2.equals("")))))&&((!(v3.equals("VN")))&&(!(v3.equals(""))))))
output = m2+"|"+m3;
else if(((((!(v1.equals("VN")))&&(!(v1.equals("")))))&&((!(v3.equals("VN")))&&(!(v3.equals(""))))))
output = m1+"|"+m3;
else if((((((!(v1.equals("VN")))&&(!(v1.equals("")))))&&((v2.equals("VN"))&&(v2.equals(""))))&&((v3.equals("VN"))&&(v3.equals("")))))
output = m1;
else if((((((!(v2.equals("VN")))&&(!(v2.equals("")))))&&((v1.equals("VN"))&&(v1.equals(""))))&&((v3.equals("VN"))&&(v3.equals("")))))
output = m2;
else if((((((!(v3.equals("VN")))&&(!(v3.equals("")))))&&((v1.equals("VN"))&&(v1.equals(""))))&&((v2.equals("VN"))&&(v2.equals("")))))
output = m3;
else if(((!(v1.equals("VN")))&&(!(v1.equals(""))))&&((((v2.equals("VN"))&&(!(v2.equals(""))))||((v3.equals("VN"))&&(!(v3.equals("")))))))
output = m1;
else if(((!(v2.equals("VN")))&&(!(v2.equals(""))))&&((((v1.equals("VN"))&&(!(v1.equals(""))))||((v3.equals("VN"))&&(!(v3.equals("")))))))
output = m2;
else if(((!(v3.equals("VN")))&&(!(v3.equals(""))))&&((((v1.equals("VN"))&&(!(v1.equals(""))))||((v2.equals("VN"))&&(!(v2.equals("")))))))
output = m3;
else if(((!(v1.equals("VN")))&&(!(v1.equals(""))))&&((v2.equals(""))||(v3.equals(""))))
output = m1;
else if(((!(v2.equals("VN")))&&(!(v2.equals(""))))&&((v1.equals(""))||(v3.equals(""))))
output = m2;
else if(((!(v3.equals("VN")))&&(!(v3.equals(""))))&&((v2.equals(""))||(v1.equals(""))))
output = m3;
return output;
Regards,
A.Neelima.
User | Count |
---|---|
84 | |
25 | |
12 | |
9 | |
6 | |
6 | |
5 | |
5 | |
4 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.