cancel
Showing results for 
Search instead for 
Did you mean: 

Merging Rows in a message

former_member271795
Participant
0 Kudos

Hi

I have a file to idoc scenario. The incoming message has several rows, some of which have duplicate reference numbers, which indicate a VAT row

What I want to do is to create a single VAT node when 2 rows on the input file are encountered

EG  incoming message

Ref            Seqquence           Amount       

aaaa             0001                 10

aaaa             0002                   2

bbbb             0003                   17

cccc             0004                   90

dddd             0005                   20

dddd             0006                    4

This will create node EF1SET

   Ref              Sequence             Amount             tax amount 

   aaaa                0001                    10                       2

   dddd                0005                    20                       4

Is there a UDF which will allow this to be done

I was looking at this thread http://scn.sap.com/thread/3239490 which allows only duplicates to be mapped

which is similar to my requirements, but I want to create a single output row when a duplicate is encounterd

Accepted Solutions (1)

Accepted Solutions (1)

gagandeep_batra
Active Contributor
0 Kudos

Hi Hail,

create two udf as same as define in thread  refer amit.srivastava8:

create two udf one for amout field and 2nd for tax amount

and use Following code

in udf that you refer in thread.. for "amount"

---------------------------------------------------------

   int a=var1.length; 

   if (a>1) 

   { 

    result.addValue(var1[0]); 

   } 

----------------------------------------------------------

in udf that you refer in thread.. for "amount_tax"

---------------------------------------------------------

   int a=var1.length; 

   if (a>1) 

   { 

    result.addValue(var1[1]); 

   } 

----------------------------------------------------------

Answers (1)

Answers (1)

Former Member
0 Kudos

Hi,

And you want to ignore single line references ? (bbbb and cccc in your example)

Regards,

Guislain.

former_member271795
Participant
0 Kudos

Hi Guislain

Yes, I would want to ignore the single line references

regards

Geoff

anupam_ghosh2
Active Contributor
0 Kudos

Hi Geoff,

                 you can try this UDF of type "context"

public void MergeValues(String[] Ref,String[] Seq,String[] amt,String[] targetType,ResultList result,Container container) throws StreamTransformationException{

int i,j;

boolean checked[]=new boolean[Ref.length];

for(i=0;i<Ref.length;++i)

{

               checked[i]=false;

}

for(i=0;i<Ref.length;++i)

{

               checked[i]=true;

               for(j=0;j<Ref.length;++j)

               {

                         if(checked[j])

                         {

                                   continue;

                         }

                         if(Ref[i].equals(Ref[j]))

                         {

                                   //got duplicate

                                   if(targetType[0].equals("Ref"))

                                   {

                                             result.addValue(Ref[i]);

                                   }

                                   else if(targetType[0].equals("Seq"))

                                   {

                                             result.addValue(Seq[i]);

                                   }

                                   else if(targetType[0].equals("amt"))

                                   {

                                             result.addValue(amt[i]);

                                   }

                                   else if(targetType[0].equals("tax"))

                                   {

                                             result.addValue(amt[j]);

                                   }

                                   checked[j]=true;

                         }//if

          }//for

}//outer for

}//end

The input to the UDF are 4 values "Ref","Seqquence","Amount " and a constant whose value might be one of these four values "Ref","Seq","amt" and "tax".

The UDF has to be used once for each of the target and even for creating header node EF1SET. As shown below


The above image shows the mapping to  create the header node which is parent of  the child nodes "Ref","Seq","amt" and "tax" .


The above mapping shows the way to create the "tax" item. The same mapping step has to be replicated for "Ref","Seq" and "amt" fields in target. The only differing element is the constant term being supplied to "Mergevalues" UDF which will be "Ref", "Seq" and "amt" respectively (without quotes). The constant terms decide the kind of output as shown in above code in steps   20,24,28 and 32.

Hope this resolves the problem.

Regards

Anupam