cancel
Showing results for 
Search instead for 
Did you mean: 

Sort the payload before mapping to target

Former Member
0 Kudos

Hi

My Source structure is a sbelow

<ROW>
<ordernumber>01<ordernumber>
<EAN>E1<EAN>
<ROW>
<ROW>
<ordernumber>01<ordernumber>
<EAN>E2<EAN>
<ROW>
<ROW>
<ordernumber>01<ordernumber>
<EAN>E3<EAN>
<ROW>
<ROW>
<ordernumber>01<ordernumber>
<EAN>E1<EAN>
<ROW>

My Target is as below

<Header>
<Ordernumber>01<ordernumber>
 <item>
        <EAN>E1<EAN>
 <item>
<item>
        <EAN>E2<EAN>
 <item>
<item>
        <EAN>E3<EAN>
 <item>
<Header>

My question how can i sort the EAN numbers in the source structures and map to the target.

Thanks

Srinivas

Accepted Solutions (0)

Answers (7)

Answers (7)

Former Member
0 Kudos

Thanks for your help

Former Member
0 Kudos

I tested it if your source and target structure matches as I have given here then it will definitely work. try it out.

Source Structure


<?xml version="1.0" encoding="UTF-8"?>

<ns0:MT_Test_forum xmlns:ns0="http://yash.com/yh1309/EDIFile_2_EDIFile">
   <Row>
      <OrderNo>1</OrderNo>
      <EAN>A</EAN>
   </Row>
   <Row>
      <OrderNo>2</OrderNo>
      <EAN>A</EAN>
   </Row>
   <Row>
      <OrderNo>1</OrderNo>
      <EAN>B</EAN>
   </Row>
   <Row>
      <OrderNo>2</OrderNo>
      <EAN>B</EAN>
   </Row>
   <Row>
      <OrderNo>1</OrderNo>
      <EAN>C</EAN>
   </Row>
   <Row>
      <OrderNo>3</OrderNo>
      <EAN>A</EAN>
   </Row>
</ns0:MT_Test_forum>

Target Structure


<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_Test_forum_tar xmlns:ns0="http://yash.com/yh1309/EDIFile_2_EDIFile">
   <Header>
      <OrderNo>
         <orderno>1</orderno>
         <Item>
            <EAN>A</EAN>
         </Item>
         <Item>
            <EAN>B</EAN>
         </Item>
         <Item>
            <EAN>C</EAN>
         </Item>
      </OrderNo>
      <OrderNo>
         <orderno>2</orderno>
         <Item>
            <EAN>A</EAN>
         </Item>
         <Item>
            <EAN>B</EAN>
         </Item>
      </OrderNo>
      <OrderNo>
         <orderno>3</orderno>
         <Item>
            <EAN>A</EAN>
         </Item>
      </OrderNo>
   </Header>
</ns0:MT_Test_forum_tar>

OrderNor -> RemoveContext -> Sort -> SplitByValue( Valuechange) ->collapseContext--> OrderNo
OrderNo -> RemoveContext -> Sort -> SplitByValue( Valuechange) ->Item
OrderNor -> RemoveContext -> Sort -> SplitByValue( Valuechange) ->collapseContext--> splitByValue(each value)--->orderno

OrderNo-> RemoveContext - > SortByKey -->SplitByValue(Each Value) -> EAN
EAN -> RemoveContext -> /

notice that a field name orderno inside each occurence of <OrderNo> in the target structure to get the order number in that field

prasannakrishna_mynam
Contributor
0 Kudos

Hi,

Try this solution.

OrderNumber-> Remv.Context->Sort->SplitByVal(valueChang)-> OrderNumber

EAN -> Rem.Context->Sort->SplitByVal(valueChang)->CollapseContext->Item

EAN -> Rem.Context->Sort->SplitByVal(valueChang)->CollapseContext->ISplitByVal(EachVal)->EAN

This gives your result...All d Best.

Regards,

Prasanna

Former Member
0 Kudos

any help....

former_member200962
Active Contributor
0 Kudos

Used the same source and target structures and was able to get the required result:

Source:

<ns0:MT_PlantCodeSource>
   <Row>
      <OrderNumber>01</OrderNumber>
      <EAN>EAN1</EAN>
   </Row>
   <Row>
      <OrderNumber>01</OrderNumber>
      <EAN>EAN2</EAN>
   </Row>
   <Row>
      <OrderNumber>01</OrderNumber>
      <EAN>EAN3</EAN>
   </Row>
</ns0:MT_PlantCodeSource>

Target:

<ns0:MT_PlantCodeTarget>
 <OrderNumber>01</OrderNumber>
  <Item>
      <EAN>EAN1</EAN>
  </Item>
  <Item>
      <EAN>EAN2</EAN>
  </Item>
  <Item>
     <EAN>EAN3</EAN>
  </Item>
</ns0:MT_PlantCodeTarget>

I used the below logic:

OrderNumber -> remove Contexts->SplitByValue(ValueChange)->collapseContexts->OrderNumber

EAN->remove Contexts->SplitByValue(ValueChange)->collapseContexts->Item

EAN->remove Contexts->SplitByValue(ValueChange--->EAN

The logic is working for me check if it is working for you also...

Regards,

Abhishek.

Former Member
0 Kudos

For the target EAN field do the following mapping

Map source fields ordernumber and EAN to SortByKey function and map the output of SortByKey to your UDF (first input)

2nd input for UDF - map ordernumber as second input

Note: change the context of ordernumber and EAN to root

Regards,

Ravi

Former Member
0 Kudos

Ravi,

it is not working

Srinivas

stefan_grube
Active Contributor
0 Kudos

See my blog:

/people/stefan.grube/blog/2005/12/29/new-functions-in-the-graphical-mapping-tool-xi-30-sp13

Former Member
0 Kudos

Use node functions

Ordernumber -> RemoveContext -> Sort -> SplitByValue (Each Value) -> Ordernumber

Ordernumber -> RemoveContext - > SortByKey (Each Value) -> EAN

EAN -> RemoveContext -> map it to above sortbykey -> product.

I don't know what adapter you use based on the type of adapter you can sort at adapter level as well if it is file adapter