cancel
Showing results for 
Search instead for 
Did you mean: 

Mapping logic -counter UDF required

Former Member
0 Kudos

Hi Experts,

I have below  source/target test XML structures, i need to add -1 counter value increment by -1 in target  if Order ID value is same ,tried using counter but no luck.

<Order>

  <OrderID>AZ1234</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>Mike</Name>

<Status>New</Status>

<Card>yes</Card>

</Order>

<Order>

  <OrderID>AZ1234</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>Mike</Name>

<Status>Old</Status>

<Card>yes</Card>

</Order>

<Order>

  <OrderID>AZ9999</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>MikeSwiney</Name>

<Status>New</Status>

<Card>yes</Card>

</Order>

Output

<FinalOrder>

  <OrderID>AZ1234-1</</Order>

  <Name>Mike</Name>

<FinalOrder>

<FinalOrder>

  <OrderID>AZ1234-2</</Order>

  <Name>Mike</Name>

<FinalOrder>

<FinalOrder>

  <OrderID>AZ9999-1</Order>

  <Name>MikeSwiney</Name>

<FinalOrder>

Thank you so much.

Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

Hello,

Check this mapping:

Thanks

Amit Srivastava

Message was edited by: Amit Srivastava

Former Member
0 Kudos

Hi Amit,

Thanks a ton,there was some change in requirement, if there is no duplicate in file then no need counter value, if there is any duplicate then first duplicate should have -1,first duplicate should have -2 as counter like below.

<Order>

  <OrderID>AZ1234</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>Mike</Name>

<Status>New</Status>

<Card>yes</Card>

</Order>

<Order>

  <OrderID>AZ1234</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>Mike</Name>

<Status>Old</Status>

<Card>yes</Card>

</Order>

<Order>

  <OrderID>AZ1234</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>Mike</Name>

<Status>CHANGE</Status>

<Card>yes</Card>

</Order>

<Order>

  <OrderID>AZ9999</Order>

  <Location>CA</Location>

<Region>NA</Region>

<Name>MikeSwiney</Name>

<Status>New</Status>

<Card>yes</Card>

</Order>

Output

<FinalOrder>

  <OrderID>AZ1234</</Order>

  <Name>Mike</Name>

<FinalOrder>

<FinalOrder>

  <OrderID>AZ1234-1</</Order>

  <Name>Mike</Name>

<FinalOrder>

<FinalOrder>

  <OrderID>AZ1234-2</</Order>

  <Name>Mike</Name>

<FinalOrder>

<FinalOrder>

  <OrderID>AZ9999</Order>

  <Name>MikeSwiney</Name>

<FinalOrder>

Thanks

Former Member
0 Kudos

Hello,

Change index's initial value to "0" and add replace string function..

Thanks

Amit Srivastava

former_member184789
Active Contributor
0 Kudos

hi,

modify the code as:

int cnt =-1;

for(int i =0;i<inp1.length;i++)

    if(count[i]>1)

    {

        result.addValue(inp1[i]);

    for(int j =0;j<count[i]-1;j++)

        result.addValue(cnt-j);

    }

    else

        result.addValue(inp1[i]);

Answers (1)

Answers (1)

former_member184789
Active Contributor
0 Kudos

Hi,

Have a UDF with two inputs, first will be

OrderID->Split by value(ValueChange)->CollapseContext->

Second input will be

OrderID->Split by value(ValueChange)->Count

Take the first input as inp1 & other as count(type integer), with all values of context as execution type:

int cnt =-1;

        for(int i =0;i<inp1.length;i++)

            for(int j =0;j<count[i];j++)

                result.addValue(cnt-j);