on 06-30-2009 6:53 PM
Xi Gurus,
In message mapping
my source structure is as below
O1 -- order number 1
E1 -- Ean Number ( one detail record)
O1 -- order number1
E2 (one detail record for E2)
E2
E3 (one detail records for E3)
O2 -- order number 2
E4 (one detail record for E4)
E5 (one detail record for E5)
E5
the target will be
<01>
E1
E2
E3
<01>
<02>
E4
E5
<O2>
Under a order number,detail records to be created based on number of Ean numbers
If any 2 ean numbers are same then only one detail record to be created for that ean number
How can i go forward on this, Please help.
Thanks
Srinivas
Srinivas,
Source structure is confusing. Can you put an example payload and output expected.
If any 2 ean numbers are same then only one detail record to be created for that ean number : For this you can use eAN --> SplitbyValue(Value change), so only if their is value change in EAN then it will create or else it will not create.
Regards,
---Satish
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Satish
Thanks for your response.
here are my source and target structures
row>
<ordernumber1>
<EAN1>
<row>
<row>
<ordernumber1>
<EAN1>
<row>
<row>
<ordernumber1>
<EAN2>
<row>
<row>
<ordernumber2>
<EAN3>
<row>
<row>
<ordernumber2>
<EAN4>
<row>
<row>
then the target must be as below
<header>
<ordernumber1>
<product net price>20<product net price>
<itemEAN1>
<itemEAN2>
<header>
<header>
<ordernumber2>
<itemEAN3>
<itemEAN4>
<header>
For ordernumber 1 it contains EAN1 EAN1 and EAN2
in the target for the ordernumber, there must be only one EAN1 item record and one EAN2 item record
Thanks
Srinivas
Map like this Srinivas:
For Header: ordernumber (change context to root) --> Splitbyvalue (valuechange) --> collapsecontext --> header
For ordernumber: ordernumber(change context to root) --> Splitbyvalue (valuechange) --> ordernumber
For Item: ordernumber(change context to root) --> Splitbyvalue (valuechange) --> item
For EAN: ean --> ean
Then your test case should work.
If your input payload is:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:sourcesrinvias xmlns:ns0="http://demo">
<row>
<ordernumber>576881</ordernumber>
<EAN>L0257100</EAN>
</row>
<row>
<ordernumber>576881</ordernumber>
<EAN>L0257200</EAN>
</row>
<row>
<ordernumber>576881</ordernumber>
<EAN>PPPPP</EAN>
</row>
<row>
<ordernumber>576882</ordernumber>
<EAN>36544E</EAN>
</row>
</ns0:sourcesrinvias>
Then your target payload will be:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:targetsrinivas xmlns:ns0="http://demo"><header><ordernumber>576881</ordernumber><Item><EAN>L0257100</EAN></Item><Item><EAN>L0257200</EAN></Item><Item><EAN>PPPPP</EAN></Item></header><header><ordernumber>576882</ordernumber><Item><EAN>36544E</EAN></Item></header></ns0:targetsrinivas>
Regards,
---Satish
satish,
sorry for the typo
<?xml version="1.0" encoding="UTF-8"?>
<ns0:sourcesrinvias xmlns:ns0="http://demo">
<row>
<ordernumber>576881</ordernumber>
<EAN>L0257100</EAN>
</row>
<row>
<ordernumber>576881</ordernumber>
<EAN>L0257100</EAN>
</row>
<row>
<ordernumber>576881</ordernumber>
<EAN>PPPPP</EAN>
</row>
<row>
<ordernumber>576882</ordernumber>
<EAN>36544E</EAN>
</row>
</ns0:sourcesrinvias>
EAN L0257100 occurs 2 times for a ordernumber1,
and the target must be as below
<?xml version="1.0" encoding="UTF-8"?>
<ns0:targetsrinivas xmlns:ns0="http://demo"><header><ordernumber>576881</ordernumber><Item><EAN>L0257100</EAN></Item><Item><EAN>PPPPP</EAN></Item></header><header><ordernumber>576882</ordernumber><Item><EAN>36544E</EAN></Item></header></ns0:targetsrinivas>
Regards
Srinivas
Srini,
Why are you getting duplicate entires into XI? What is the source. If you are picking the file say to legacy users about this. They should get rid of this easily rather than making complicaitons on our end. If source is database then your query should not pick duplicates.
Anywas even if you get you may need a user defined funciton to check this.
Regards,
---Satish
Hi Srivas
Use this functions
Header = Change the context (source)--> Split Value(change) and collapse context
order number = Change the context (source)--> Split Value(change) and collapse context -- Split Value(each value)
item segment = i think you should be use a UDF , these values are repeat , comes from source , is it correct?
EAN = EAN (source)
This is Paylod Result..
Use this functions
Header = Change the context (source)--> Split Value(change) and collapse context
order number = Change the context (source)--> Split Value(change) and collapse context -- Split Value(each value)
item segment = UDF (see beelow)
--Use two arguments ProductEANNumber and OrderNumber both change the contexto to root.
//Try to use
String repeat01 = ""; String repeat02 = "";
for (int i = 0 ; i < val01.length ; i++) {
if (!val02<i>.equals(repeat02) && !repeat02.equals("") ) {
result.addValue(ResultList.CC);
repeat01 = "";
}
repeat02 = val02<i>;
if (!val01<i>.equals(repeat01)) {
result.addValue(val01<i>);
repeat01 = val01<i>;
}
}
EAN = Use the same function and after use Split By Value
Hi Luis,
Thanks for your help
i used the same code in the UDF
public String ProductEANNumber(String val01,String val02,Container container){
String repeat01 = " "; String repeat02 = " ";
for (int i = 0 ; i < val01.length ; i++) {
if (!val02<i>.equals(repeat02) && !repeat02.equals(" ") ) {
result.addValue(ResultList.CC);
repeat01 = " ";
}
repeat02 = val02<i>;
if (!val01<i>.equals(repeat01) ) {
result.addValue(val01<i>);
repeat01 = val01<i>;
}
}
but iam getting errors
usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:509: cannot resolve symbol symbol : variable length location: class java.lang.String for (int i = 0 ; i < val01.length ; i++) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:510: array required, but java.lang.String found if (!val02<i>.equals(repeat02) && !repeat02.equals(" ") ) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:511: cannot resolve symbol symbol : variable result location: class com.sap.xi.tf._MM_CRS_EBRAND_ result.addValue(ResultList.CC); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:514: array required, but java.lang.String found repeat02 = val02<i>; ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:515: array required, but java.lang.String found if (!val01<i>.equals(repeat01) ) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:516: array required, but java.lang.String found result.addValue(val01<i>); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:516: cannot resolve symbol symbol : variable result location: class com.sap.xi.tf._MM_CRS_EBRAND_ result.addValue(val01<i>); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Mapf5fc8fd0662011de8ea2001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:517: array required, but java.lang.String found repeat01 = val01<i>;
Please suggest me how to proceed.
Thanks
Srinivas
Edited by: Srinivas on Jul 1, 2009 5:33 AM
Hi Luis
Thanks for your reply
i used the same code in udf as you have given
public String ProductEANNumber(String val01,String val02,Container container){
//write your code here
String repeat01 = " "; String repeat02 = " ";
for (int i = 0 ; i < val01.length ; i++) {
if (!val02<i>.equals(repeat02) && !repeat02.equals(" ") ) {
result.addValue(ResultList.CC);
repeat01 = " ";
}
repeat02 = val02<i>;
if (!val01<i>.equals(repeat01) ) {
result.addValue(val01<i>);
repeat01 = val01<i>;
}
}
but iam getting following errors,Please suggest how to proceed
usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:509: cannot resolve symbol symbol : variable length location: class java.lang.String for (int i = 0 ; i < val01.length ; i++) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:510: array required, but java.lang.String found if (!val02<i>.equals(repeat02) && !repeat02.equals(" ") ) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:511: cannot resolve symbol symbol : variable result location: class com.sap.xi.tf._MM_CRS_EBRAND_ result.addValue(ResultList.CC); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:514: array required, but java.lang.String found repeat02 = val02<i>; ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:515: array required, but java.lang.String found if (!val01<i>.equals(repeat01) ) { ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:516: array required, but java.lang.String found result.addValue(val01<i>); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:516: cannot resolve symbol symbol : variable result location: class com.sap.xi.tf._MM_CRS_EBRAND_ result.addValue(val01<i>); ^ /usr/sap/DHX/DVEBMGS00/j2ee/cluster/server0/./temp/classpath_resolver/Map1cea4fe0662311de8f94001125a5ce17/source/com/sap/xi/tf/_MM_CRS_EBRAND_.java:517: array required, but java.lang.String found repeat01 = val01<i>; ^
Thanks
Srinivas
Hi,
Map like below..
1. ordernumber(Change context to parent)--SplitbyValue(ValueChange)--CollapseContext--header.
2.ordernumber(Change context to parent)--SplitbyValue(ValueChange)--CollapseContext--SplitByValue(EachValue)--ordernumber
3.EAN--------------------------------------------------------------------------------FormatByExample--SplitByValue(ValueChange)--CollapseContext--Item
ordernumber(Change context to parent)--SplitbyValue(ValueChange)--
4.EAN--------------------------------------------------------------------------------FormatByExample--SplitByValue(ValueChange)--CollapseContext--SplitByvalue(Each)--EAN
ordernumber(Change context to parent)--SplitbyValue(ValueChange)--
Regards,
Prakasu.M
Prakasu,
Thanks for your reply,
the mapping you mentioned is working only if the ordernumbers are same
if the order numbers are different, iam getting the error in mapping.the error is as below.
ns0:MT_EBRAND_RECEIVER/header[2]/detail. Check xml instance is valid for source xsd and target-field mapping fulfills requirements of target xsd
Help me in solving this.
Thanks
Srinivas
Hi Prakasu
My source structure is as below
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>L0257100</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>L0257100</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>PPPPP</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576882</OrderNumber>
<ProductEANNumber>3.36544E+12</ProductEANNumber>
</ROW>
If order number changes anew record to be created and for item groupby must be done based on EAN Number.
for the above source, the target must be
<Header>
<ordernumber>576881<ordernumber>
<item>
<EANNUMBER>L0257100<EANNUMBER>
<item>
<EANNUMBER>ppppp<EANNUMBER>
<Header>
<Header>
<ordernumber>576882<ordernumber>
<item>
<EANNUMBER>3.36544E+12<EANNUMBER>
<item>
<Header>
Suggest me how to proceed
Thanks
Srinivas
Hi.
Use the UDF like a context.
The UDF received two parameters .ProductEANNumber (val01) and ROW/OrderNumber(val02).. before change the contex both elements.
try againg
This is my target payload
<?xml version="1.0" encoding="UTF-8"?>
<ns0:Temp_Contact xmlns:ns0="Test1">
<OrderNumber>
<OrderNumber>576881</OrderNumber>
<Item>
<EAN>L0257100</EAN>
</Item>
<Item>
<EAN>PPPPP</EAN>
</Item>
</OrderNumber>
<OrderNumber>
<OrderNumber>576882</OrderNumber>
<Item>
<EAN>3.36544E+12</EAN>
</Item>
</OrderNumber>
</ns0:Temp_Contact>
Srinivas,
Whatever Luis has given its working. Please check once again all the mappings you have done like this or not:
For Target Header: ordernumber (context set to root) --> SplitbyValue (Valuechange) --> CollapseContext --> header
For Target ordernumber: ordernumber (context set to root) --> SplitbyValue (Valuechange) --> ordernumber
For Target Item segment: Here you use the udf given by him. You create a UDF say Test and click on Context radio button and give two input parameters val01 and val02. Then imports: java.;*
Add this code:
String repeat01 = ""; String repeat02 = "";
for (int i = 0 ; i < val01.length ; i++) {
if (!val02<i>.equals(repeat02) && !repeat02.equals("") ) {
result.addValue(ResultList.CC);
repeat01 = "";
}
repeat02 = val02<i>;
if (!val01<i>.equals(repeat01)) {
result.addValue(val01<i>);
repeat01 = val01<i>;
}
}
I didnot change anything. Whatever he has given is good.
Here is how you map: click on UDF. It asks two input parameters. For first give EAN (context set to root) and second parameter ordernumber (context set to root) --> udf (test) --> Item
For Target EAN: click on UDF. It asks two input parameters. For first give EAN (context set to root) and second parameter ordernumber (context set to root) --> udf (test) --> SplitByValue --> EAN
It is working. Do all the steps and please check everything. It should work srinivas.
Regards,
---Satish
hI. Srinivas
Could you send a XML Example - paylod?.
Let me try to understand if you have these similar structure.
<ordernumber>
<EAN1>1</EAN1>
<EAN2>2</EAN2>
<EAN3>3</EAN3>
</ordernumber>
<ordernumber>
<EAN4>4</EAN4>
<EAN5>5</EAN5>
</ordernumber>
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Li Luis
Below is the sample source payload
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>L0257100</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>L0257100</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576881</OrderNumber>
<ProductEANNumber>PPPPP</ProductEANNumber>
</ROW>
<ROW>
<OrderNumber>576882</OrderNumber>
<ProductEANNumber>3.36544E+12</ProductEANNumber>
</ROW>
User | Count |
---|---|
87 | |
23 | |
11 | |
9 | |
8 | |
5 | |
5 | |
5 | |
5 | |
4 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.