Container vs globalcontainer in UDF

Can any one differentiate container vs globalcontainer in UDF

Hi !
<b>what is global container</b>
in the old days it was used to store objects in mappings
now we can use global variables instead
<b>Container Object:</b> This object enables you to cache the values that you want to read again when you next call the same user-defined function
<b>Methods of the Container Object:</b>
void setParameter (String parName, Object obj);
Object getParameter(String parName);
MappingTrace getTrace();
GlobalContainer getGlobalContainer();
java.util.Map container.getTransformationParameters()
<b>b]GlobalContainer getGlobalContainer();</b>
Returns a GlobalContainer object with which you can save the values that can be read by any user-specific functions in the same message mapping.
<b>For more help please go through the link below</b>
http://help.sap.com/saphelp_erp2004/helpdata/en/78/b4ea10263c404599ec6edabf59aa6c/content.htm
<b>also ref</b>
/people/sap.user72/blog/2005/10/01/xi-new-features-in-sp14
http://help.sap.com/saphelp_nw2004s/helpdata/en/75/8e0f8f3b0c2e4ea5f8d8f9faa9461a/frameset.htm
/people/michal.krawczyk2/blog/2005/03/04/globalcontainer--in-graphical-mapping-xi
http://help.sap.com/saphelp_nw04/helpdata/en/e0/7d8e40496f6f1de10000000a1550b0/frameset.htm
Thanks!!
Regards
Abhishek

Similar Messages

  • Any code for clearing container after interface run - UDF

    Hi All,
    I create a user simple UDF, and use it for two fields. In the first mapping I was populated all data in the <b>container</b> and it would be used by second field also. It has perfectly running.
    But my problem is that when I rerun the interface the container has populated same value which is I populated in the first time. I think <b>container</b> preserve of all the data after end of interface run.
    I want <b>container</b> has to be free after run the interface. There is any code for clearing <b>container</b> after interface run?

    Hi,
    That is strange. Container is initialized for every mapping and it is not persistent between mapping programs.
    Also, a quick note, why are you using Global Conatiner? from  Sp 14 onwards, you hava a separate java Section and Global Variables that can be used withing the mapping prorgram in different UDF's.
    please refer to this blog for the same,
    /people/sap.user72/blog/2005/10/01/xi-new-features-in-sp14
    Regards
    Bhavesh

  • How to read container variable in UDF

    Hello expert,
    I have created a container variable(var_callerId) in an integrationprocess.
    In a mapping I want to read the container variable with an UDF.
    Can anyone send me the code for the UDF please ?
    I can't find the solution in any post message / blog.
    Thx for your help!
    Best regards,
    Juergen

    Hi navneet,
    thanks for your fast reply.
    Let me explain why I wanted to use container variables:
    (Perhaps there is a better way to fix the requirement)
    I've following IP
    Message Interface (input)
    <getData>
    <callerInfo>
    <callerID>SYSA</callerID>
    <SessionID>43545455545355</SessionID>
    <number>3434344334</number>
    </callerInfo>
    </getData>
    Then I have a mapping (<number>) to call a webservice.
    I get the data from the webservice.
    At last I will send the data back to the business System.
    But I need the both tags from the input interface (SessionID, callerID) again, to send it back.
    I tried a mapping  to map sessionID and callerID from the input interface  to the output interface, but it doesn't work.
    So I thought I can store the sessionID and callerID in a container variable and in a mapping I will get it back with an UDF.
    I think there should be a possiblility to get the stored value from the container variable inside the IP. But I don't find any solution.
    I don't understand your solution with the global container. How can I access to the container variable(IP).
    Thx for your help
    Best regards
    Juergen

  • Populating array of values in GlobalContainer.

    Dear Friends,
    I have a doubt in excecuting the GlobalContainer in UDF. It will be great if you guys help me out in solving it.
    I'm passing some array of values into UDF.After doing some validations I need to set these values in array of Global Container.Later in other UDF I've to retrieve the array of values from the Global Container.
    Can you  guys shed some light on what logic needs to be done ?
    Best regards,
    raj.

    Use Java Sections instead of GlobalContainer.
    Check this link: http://help.sap.com/saphelp_nw2004s/helpdata/en/49/1ebc6111ea2f45a9946c702b685299/frameset.htm
    on the java sections part.
    Basically you define the global variable in the Global Variables section. For example:
    List list = null;
    Then in initalization section, you initialize the global variable:
    list = new Vector();
    Then you could have your UDFs filling and later reading the variable (just read/write the <i>list</i> variable).
    In the Cleanup section, you can do for example:
    list.clear();
    Regards,
    Henrique.

  • Which java API package contains Container class???????

    can forum experts tell me which java API package contains Container and GlobalContainer class......???????/

    <b>aii.map.api</b>
    If you need to access the Cotainer Object (i.e) the runtime constants inside you java mapping etc, you use
    AbstractTrace trace=(AbstractTrace)getParameters().get(StreamTransformationConstants.MAPPING_TRACE);
    To access this in a UDF in graphical mapping you mention,
    container.getTrace()
    Regards
    Bhavesh

  • Question for support of community for an UDF

    Hello,
    because we are not really able to write Java-Code we have a question for support to the community!
    We have a mapping were we get some strings. These strings containing data which we have to map to certain fields in target structure.
    Example:
    001GIE;002090429;0030853;005D  ;007TCT ;010TTNU9457423 ;01140;01296;013SCI01;019
    4N ;02145G1;027E;0300;033V;03508388;03604508;03703880;039003054 ;040003054
    The requirement is that we have to identify the fields to map by it's number, like "001GIE" means 001 field in target structure.
    So how to do an UDF? We need to parse the string and put the found strings into right position in an array e.g. But how to get this result to the single target-fields in target structure?!
    And another problem in example: how to get data if the identifier (019) and the data (4N) is divided by an end of line (see example)?!
    Do you have some ideas?! We highly appreciate your help!
    br

    Hi Fritz,
    Let us address the problem one by one.
    1. You might need to change the source structure to :
    -root 1..1
    --Value 1..unbounded
    Please note root and Value are the names given by me you can use any names as per your wish. But we cannot have the source as you specified, will this source be ok for you?
    2. Give File content conversion parameter
    recordset name = Vale
    Value.endSeparator 'nl'
    By doing this there will be a Value node created when the source file has a newline character
    3. In message mapping create two UDF
    *UDF1 (Simple ?UDF with input field named *input )
    for (int i=0;i<input.length;i++)
       output += input<i>;
    return output
    *UDF2 (Simple UDF with input field named input)*
    int i = 1;
    String [] value = new String[112];
    while (input.indexOf(";") != -1)
    String counter = "";
    Integer i_int = new Integer (i);
    if (i<10)
        counter = "00"+ i_int.toString();
    else if (i>9 && i<100)
         counter = "0"+ i_int.toString();
    else counter = i_int.toString();
    if (input.startsWith(counter)) {
      value<i> = input.substring(3, input.indexOf(";"));
      if (input.indexOf(";") != -1 )
         input = input.substring(input.indexOf(";")+1);   
    else
      value <i> = "";
    i++;
    int j;
    GlobalContainer globalContainer = container.getGlobalContainer();
    globalContainer.setParameter("Output", value);
    Now do a mapping like this
    Value (context root)--> UDF1 > UDF2> target root node (ie Bewsatz)
    By this step you set all the values in global container named Output
    3. Now for each target  field call this UDF
    *UDF3 (Simple UDF with input field named pos)*
    GlobalContainer globalContainer = container.getGlobalContainer();
    String[] Value = (String[] )globalContainer.getParameter("Output");;
    String outvalue;
    if (Value != null) {
    outvalue = Value(pos) ;
    return outvalue;
    Call this UDF for each output field with positions like 1, 2, 3, ...111
    Please try this
    Regards
    Suraj

  • How to Use a UDF in PLD?

    I want to use a user defined field in a PLD of a marketing document. Can anybody tell me how to access this UDF because its not in the column of the respective table.
    Thx

    Hi,
    Where is UDF located ? You actually could include the UDF in the PLD of marketing document.
    I have a customer that want to print a certain UDF that used to record driver of container truck, it is UDF in the title of marketing document. They want to use it in the delivery print out. I suggest them to create database type field, select related table and seek the UDF description in the column not the UDF code (you do this in the properties windows). Don't forget that you must use description of UDF instead of UDF code to seek it in the column.
    Rgds,
    JM

  • Clarification Needed For Alerts : UDF

    Hi Team,
    I am configuaring AE & IE Alerts . In IE Alerts, In Container variables am seeing UDF ALERT XX, etc..
    Im unable to understand what is the use of UDF ALERTs in Container variables?????
    Thanks in Advance.

    Hi,
    Probably looking at the udf and mapping would give an idea for how they are used.
    Regards,
    ---Saitsh

  • Shared Libray UDF does not work for all objects

    I have created a shared UDF Library and am successfully using the code in other mappings.
    however when i am trying to apply the code to two new mappings, the code does not work!  there is nothing special about the code.  just get the MessageID.
    public String GetMessageID(Container container) throws StreamTransformationException{
    //This UDF gets the PI message ID
    String constant;
    java.util.Map map;
    map = container.getTransformationParameters();
    constant = (String) map.get(StreamTransformationConstants.MESSAGE_ID);
    return constant;
    it works when i enter the messageID in graphical mapping, but when i test end to end, it does not work!
    and as i mentioned, it works in two other interfaces...   but not in the new one! 
    any thoughts?

    after applying the latest patches it seems to have corrected iteslf

  • File record number in a Flat file

    Hi Guys,
    I am working on Idoc to file scenario and generating a file at the target.
    at the file...for each line i have to add a line count.
    i have 2 header and 5 detail records set..and details are repeating multiple times.
    For Ex:
    H1........001
    H2....002
    D1------003
    D2----
    004
    D3----
    005
    D4-------006
    D5----
    007
    Footer-----008
    Could someone help me in resolving this issue?
    Thanks
    sahil

    Hi Sahil,
    You can write UDF as follow
    AbstractTrace trace=  (AbstractTrace)container.getTrace();
    GlobalContainer globalContainer = container.getGlobalContainer();
    String str = (String) globalContainer.getParameter ("COUNTER");
    if(str!=null){
         int tempRowCounter =(new Integer (str)).intValue();
         globalContainer.setParameter("COUNTER",tempRowCounter++);
        return tempRowCounter+"";
    }else{
         globalContainer.setParameter("COUNTER", "1");
         return "1";
    Regards
    Ritu

  • User Defined Function Output

    I have a UDF that converts float data into output, howevere, it add .01 in isolated cases.
    The Input is as follows
    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:MT_AMT xmlns:ns0="http://test.bob.com">
       <SSN>123456789</SSN>
       <DATA>PH80.00            170915.76 AAE</DATA>
    </ns0:MT_AMT>
    The out is as follows
    <?xml version="1.0" encoding="UTF-8"?>
    <ns0:MT_AMT1 xmlns:ns0="http://test.bob.com"><SSN>123456789</SSN><DATA>PH 80.00 170915.77AAE                                                                                </DATA></ns0:MT_AMT1>
    The code is as follows
    MappingTrace mTrace = container.getTrace();
    GlobalContainer globalContainer = container.getGlobalContainer();
    globalContainer.setParameter("Value"," ");
              //1.Map directly the source data to target data and make changes to below lengths.
              StringBuffer sBuf = new StringBuffer(a);
              //          Correction : Make the length of sBuf equal to 21 in order to reduce the risk of runtime exception
              if (sBuf.length() < 21) {
                   while (sBuf.length() != 21) {
                        sBuf.append(' ');
              //2.     Schedule Hours : Format the data into "ZZ9.99" at position 3-8
              String substring = sBuf.substring(2, 8);
              substring = formatNumber(substring, 4, 6, 2);
              sBuf.replace(2, 8, substring);
              //3.     Base Rate : Format the data into "ZZZZZZ9.99" at position 9-29. The target position will be 9-18
              substring = null;
              substring = sBuf.substring(8, 29);
              substring = formatNumber(substring, 8, 10, 2);
              sBuf.replace(8, 18, substring.substring(0, 10));
              sBuf.delete(18, 29);
              //4.     Performance Rating : For now no mapping is defined
              //At last append 434 spaces to the record
              sBuf = appendSpaces(sBuf, 434);
              return sBuf.toString();
    /*MappingTrace mTrace = container.getTrace();
    /* mTrace.addInfo("Exception thrown  = " + ex.getMessage() + ", Legacy Invoice Number: " + globalContainer.getParameter("INVOICENUMBER").toString() + ", "  + interfaceName + ", " + lookUp + ", " + lookUpTable + ", " + keyString);
    The below Function is for handling Trailer Records
         private String trailerRecord(String a, int count) {
              //1.Map directly the source data to target data and make changes to below lengths.
              StringBuffer sBuf = new StringBuffer(a);
              //2.Get the number of records from Global container and fill it at position 1-6
              //Subtract 1 to exclude the trailer record
              count = count - 1;
              Integer counter = new Integer(count);
              String substring = counter.toString();
              //3.Format the number to ZZZZZ9 format
              substring = formatNumber(substring, 7, 6, 0);
              sBuf.replace(0, 6, substring.substring(0, 6));
              //At last append 449 spaces to the record
              sBuf = appendSpaces(sBuf, 449);
              return sBuf.toString();
    The below Function is for appending trailing spaces to the output record
         private StringBuffer appendSpaces(StringBuffer sub, int num) {
              for (int i = 0; i < num; i++) {
                   sub.append(' ');
              return sub;
    The below Function is for formatting numbers Records
         private String formatNumber(
              String input,
              int position,
              int length,
              int decPlaces)
              throws NumberFormatException {
              //17.08.2007 : If empty string has come, send back the same
              int int1 = input.lastIndexOf(' ');
              int int2 = input.length();
              if (int1 == int2) {
                   return input;
              // position = actual position of dec place (e.g.4 for ZZ9.99)
              //length = actual length (e.g. 6 for ZZ9.99)
              //decPlaces = (e.g. 2 for ZZ9.99)
              //First get the input converted into float and back so as to add a decimal sign if it does not exist
              float f;
              try {
                   f = Float.parseFloat(input);
                                                                                    } catch (NumberFormatException ex) {
                   throw new NumberFormatException(
                        "Exception Occurred:" + ex.getMessage());
              StringBuffer sb = new StringBuffer(length);
              sb.insert(0, f);
                                                                                    //Identify the position of decimal sign and then shift it gradually
              int index = sb.indexOf(".");
              if (index < position && index != -1) {
                   while (index < (position - 1)) {
                        sb.insert(0, " ");
                        index = sb.indexOf(".");
                   /*If there is no decimal sign, put one at the desired position                         
                                            if(index == -1){
                                                 int int1 = Integer.parseInt(input);
                                                 sb.ins;
                                                 sb.insert(position,".");
              //Fill blank spaces after decimal sign with zero
              while (sb.length() < length) {
                   sb.append("0");
              return sb.toString();
    Any suggestions as to why this occurs? The additional .01.

    Hi !
    Check this:
    /people/thorsten.nordholmsbirk/blog/2006/04/03/never-ever-use-xis-built-in-arithmetic-functions
    how to Convert  the STRING TO FLOAT.
    Regards,
    Matias
    ps: please award points if helpful

  • Interview question for support engineer

    interview question for support engineer ....please can i get this sir..need to interview for apple as support engineer...thank you

    Hi Fritz,
    Let us address the problem one by one.
    1. You might need to change the source structure to :
    -root 1..1
    --Value 1..unbounded
    Please note root and Value are the names given by me you can use any names as per your wish. But we cannot have the source as you specified, will this source be ok for you?
    2. Give File content conversion parameter
    recordset name = Vale
    Value.endSeparator 'nl'
    By doing this there will be a Value node created when the source file has a newline character
    3. In message mapping create two UDF
    *UDF1 (Simple ?UDF with input field named *input )
    for (int i=0;i<input.length;i++)
       output += input<i>;
    return output
    *UDF2 (Simple UDF with input field named input)*
    int i = 1;
    String [] value = new String[112];
    while (input.indexOf(";") != -1)
    String counter = "";
    Integer i_int = new Integer (i);
    if (i<10)
        counter = "00"+ i_int.toString();
    else if (i>9 && i<100)
         counter = "0"+ i_int.toString();
    else counter = i_int.toString();
    if (input.startsWith(counter)) {
      value<i> = input.substring(3, input.indexOf(";"));
      if (input.indexOf(";") != -1 )
         input = input.substring(input.indexOf(";")+1);   
    else
      value <i> = "";
    i++;
    int j;
    GlobalContainer globalContainer = container.getGlobalContainer();
    globalContainer.setParameter("Output", value);
    Now do a mapping like this
    Value (context root)--> UDF1 > UDF2> target root node (ie Bewsatz)
    By this step you set all the values in global container named Output
    3. Now for each target  field call this UDF
    *UDF3 (Simple UDF with input field named pos)*
    GlobalContainer globalContainer = container.getGlobalContainer();
    String[] Value = (String[] )globalContainer.getParameter("Output");;
    String outvalue;
    if (Value != null) {
    outvalue = Value(pos) ;
    return outvalue;
    Call this UDF for each output field with positions like 1, 2, 3, ...111
    Please try this
    Regards
    Suraj

  • One LIFNR, based on a function can send multiple values to traget.

    Dear SDNers,
    I need your help to solve this problem…
    Let me explain the situation.
    I have a field value “LIFNR”, which is sending a value from the source to target.
    Here by using a User Define Function based on parameters I have to map the exact target.
    The problem is:
    Currently I am having a function which is sending  a value to the target based on parameters and some times the target values are more that a single value. At that situation the function returns a random value to the target value.
    In the below Old Function there is a method used to execute only one value, if more than one values are there then it will select a random value from them and send that value to the destination.
    IFIdentifier src = XIVMFactory.newIdentifier(strContext, senderAgency, senderScheme);
    IFIdentifier dst = XIVMFactory.newIdentifier(strContext, receiverAgency , receiverScheme);
    String strResult = XIVMService.executeMapping(src, dst, a);
    Solution as in New Function,
    I have created a array to that particular destination variable and stored all value in array and passed to that target value. I have bold that letters.
    //here I run a loop to store multiple destination value
    if(receiverService.length>1)
    for(i=0;i<receiverService.length;i++)
    if (receiverService.equals("EM1CLNT003")||receiverService.equals("KM1CLNT003")||receiverService.equals("C11CLNT003")) receiverAgency<i> = "C11CLNT003";
    I am sending both the functions
    My question is is that LIFNR can send the multiple values to the detination for this change ?
    And also I want to know how to execute this program and transport and testing this UDF.
    Please need your inputs.
    Thanks
    Bala Prasad
    4. Old Function
    java.util.regex.Pattern;java.util.Vector;java.util.regex.Matcher;com.sap.aii.mapping.value.api.*;
    public String get_Value_Mapping_Table_V(String a,String scheme,String context,Container container){
    // PART1 : First we need to get the sender - and receiver service from the container object
    GlobalContainer globalContainer;
    String senderService = new String();
    String receiverService = new String();
    java.util.Map map;
    //Fill variables
    globalContainer = container.getGlobalContainer();
    map = globalContainer.getParameters();
    // Get the sender- and receiver service constants
    senderService = (String) map.get(
    StreamTransformationConstants.SENDER_SERVICE);
    receiverService = (String) map.get(
    StreamTransformationConstants.RECEIVER_SERVICE);
    // PART2: Now we need to find the correct value mapping table
    String strContext = context;                                //some context value
    String senderScheme = scheme;                                    //VendorNumber or VendorAccountGroup
    String receiverScheme = scheme;
    String receiverAgency = new String();
    if (receiverService.equals("EL1CLNT100")||receiverService.equals("KL1CLNT100")||receiverService.equals("PL1CLNT100")) receiverAgency = "PL1CLNT100";
    if (receiverService.equals("D01CLNT100")||receiverService.equals("T01CLNT100")||receiverService.equals("P01CLNT100")) receiverAgency = "P01CLNT100";
    if (receiverService.equals("EM1CLNT003")||receiverService.equals("KM1CLNT003")||receiverService.equals("C11CLNT003")) receiverAgency<i> = "C11CLNT003";
    String senderAgency =  "MEPCLNT100";
    IFIdentifier src = XIVMFactory.newIdentifier(strContext, senderAgency, senderScheme);
    IFIdentifier dst = XIVMFactory.newIdentifier(strContext, receiverAgency , receiverScheme);
                try {
                            String strResult = XIVMService.executeMapping(src, dst, a);
                            return strResult;
                } catch (ValueMappingException e) {
                            return a;
    5. New Function
    java.util.regex.Pattern;java.util.Vector;java.util.regex.Matcher;com.sap.aii.mapping.value.api.*;
    public String get_Value_Mapping_Table_N(String a,String scheme,String context,Container container){
    // PART1 : First we need to get the sender - and receiver service from the container object
    GlobalContainer globalContainer;
    String senderService = new String();
    String receiverService = new String();
    java.util.Map map;
    //Fill variables
    globalContainer = container.getGlobalContainer();
    map = globalContainer.getParameters();
    // Get the sender- and receiver service constants
    senderService = (String) map.get(
    StreamTransformationConstants.SENDER_SERVICE);
    receiverService = (String) map.get(
    StreamTransformationConstants.RECEIVER_SERVICE);
    // PART2: Now we need to find the correct value mapping table
    String strContext = context;                                //some context value
    String senderScheme = scheme;                                    //VendorNumber or VendorAccountGroup
    String receiverScheme = scheme;
    String receiverAgency[] = new String(); //here I changed into a array to store multiple value
    if (receiverService.equals("EL1CLNT100")||receiverService.equals("KL1CLNT100")||receiverService.equals("PL1CLNT100")) receiverAgency = "PL1CLNT100";
    if (receiverService.equals("D01CLNT100")||receiverService.equals("T01CLNT100")||receiverService.equals("P01CLNT100")) receiverAgency = "P01CLNT100";
    //here I run a loop to store multiple destination value
    if(receiverService.length>1)
    for(i=0;i<receiverService.length;i++)
    if (receiverService.equals("EM1CLNT003")||receiverService.equals("KM1CLNT003")||receiverService.equals("C11CLNT003")) receiverAgency<i> = "C11CLNT003";
    }String senderAgency =  "MEPCLNT100";
    IFRequest src = XIVMFactory.newIFRequest(strContext,senderAgency,senderScheme);
    IFRequest dst = XIVMFactory.newIFRequest(strContext,receiverAgency,receiverScheme);
                try {
                            String strResult = XIVMService.executeMapping(src, dst, a);
                            return strResult;
                } catch (ValueMappingException e) {
                            return a;

    Janaki,
    "and it did not work."
    That's useless information.
    When asking for help with a technical question here, you need to describe exactly what you did, showing all code, explaining the entire context in which the code is used, and showing all error messages and actual results along with a description of the expected results.
    One thing though, if this example is based on the standard EMP table, why does "depno" have no "t" in it in all your references?
    Scott

  • How do you set the system MESSAGE_ID to an XML field value?

    Hi experts,
    I need to set the value of the system MESSAGE_ID to a field that an external company will send in the XML file. What I could gather thus far is that it should look something like this:
    //externalRef and container are passed as parameters:
    GlobalContainer globalContainer;
    String headerField;
    java.util.Map map;
    globalContainer = container.getGlobalContainer();
    globalContainer.setParameter("MessageId", externalRef);
    map = globalContainer.getParameters();
    headerField = (String) map.get(StreamTransformationConstants.MESSAGE_ID);
    return headerField;
    The problem is the setParameter() function - not sure how it is supposed to work. The GETting of the MessageId works though but I need to SET it while mapping the file. Any ideas?

    use the sample code as provided in the link - http://help.sap.com/saphelp_nw04/helpdata/EN/78/b4ea10263c404599ec6edabf59aa6c/frameset.htm
    in your case it will be MESSAGE_ID - http://help.sap.com/saphelp_nw04/helpdata/EN/b3/9a2aeb24dc4ab6b1855c99157529e4/frameset.htm

  • Multiple occurence of IDOC node for certain input combination in mapping

    Hi All,
    My scenario is as below:
    Input sturucture:
    FieldA
    FieldB
    FieldC
    FieldD
    FieldX
    FieldY
    FieldZ
    Output structure is IDOC WPUWBW01.
    Now field A,B,C and D forms key of my source record. So as far as key remains same i have to post all items in one idoc. I am able to achieve this with combination of split by value Fn and collapse context Fn.
    Now in addition to above if my Field B = "1200" and Field Y = "1" it should generate IDOC node twice ...
    and if Field B = "1200" and Field Y = "6" it should generate IDOC node once.
    Any idea how this can be achieved.
    Regards,
    Siddhesh S.Tawate
    PS: Also let me know how to use the container and queue in UDF's

    Now in addition to above if my Field B = "1200" and Field Y = "1" it should generate IDOC node twice ...
    and if Field B = "1200" and Field Y = "6" it should generate IDOC node once.
    duplicate the IDOC node twice so that you have three IDOC nodes in all.
    For two IDOC nodes apply the condition
    Field B = 1200
                        ------And ----ifWithoutElse     --------------------TargetIDOCNode
    Field Y = 1                     Then(Blank Constant)
    For the remaining IDOC node apply the condition:
    Field B = 1200
                        ------And ----ifWithoutElse     --------------------TargetIDOCNode
    Field Y = 6                     Then(Blank Constant)
    You can also try using createIf function....
    regards,
    Abhishek.

Maybe you are looking for