IDoc to JDBC scenario - UDF

Hi,
Hope you all are doing well. I have an IDoc to JDBC scenario. The IDoc structure is as follows:
   <IDOC BEGIN="1">
      <Structure 1>
         <DEFINITION>xxxx</DEFINITION>
         <CREATE_DATE>20070706</CREATE_DATE>
      </Structure 1 SEGMENT="1">
      <Structure 2>
         <ELEMENT>xxx1</ELEMENT>
         <CREATE_DATE>20070719</CREATE_DATE>
      </Structure 2>
      <Structure 2>
         <ELEMENT>xxx2</ELEMENT>
         <CREATE_DATE>20070719</CREATE_DATE>
      </Structure 2>
      <Structure 3>
         <ELEMENT>xxx1</ELEMENT>
         <PROJECT>yyyy1</DEFINITION>
      </Structure 3>
      <Structure 3>
         <ELEMENT>xxx1</ELEMENT>
         <PROJECT>yyyy2</PROJECT>
      </Structure 3>
      <Structure 3>
         <ELEMENT>xxx2</ELEMENT>
         <PROJECT>yyyy3</DEFINITION>
      </Structure 3>
      <Structure 3>
         <ELEMENT>xxx2</ELEMENT>
         <PROJECT>yyyy4</PROJECT>
      </Structure 3>
   </IDOC>
Structures 1, 2 and 3 are at the same level/hierarchy in the IDoc. Structure 3 contains the project name of records in structure 2. The requirement is that if the records in structure 2 have the create date as the current date then the corresponding project in structure 3 has to be passed on to the database by creating a statement. To do this, we need to check the date of the record in structure 2 and if the date is equal to the current date then we have to use the element in structure 2 to select the corresponding rows in structure 3 to be passed on to the database. The INSERT statements have to be created for each of the rows of Structure 3 to be passed on to the database.
How do I achieve this?
I tried using node and text standard functions functions but was unable to achive the objective. Can I use UDF to read the IDoc structures and determine the statements?
regards
Debansu

Hi Debansu,
Use this Queue type UDF
public void UDF(String[] curDate, String[] Element_Str2, String[] date, String[] Element_Str3, String[] project, ResultList result, Container container) throws StreamTransformationException{
for(int i=0; i<date.length; i++)
    if (curDate[0].equals(date<i>))
     for(int j=0; j<project.length; j++)
       if (Element_Str2<i>.equals(Element_Str2[j]))
          result.addValue(project[j]);
Here first parameter is current date function, second parameter is 2nd structure element field, third parameter is date field from 2nd structure, fourth parameter is 3rd structure element field and fifth parameter is project field from 3rd structure.
Regards,
VR

Similar Messages

  • PI : Idoc to JDBC scenario : repeating segments mapping issue

    Experts
    Please help.
    Question reg. mapping for ECC idoc to JDBC scenario.
    I am using the ORDRSP idoc which has multiple segments as below.
    IDOC -> multiple E1EDK14 segments with 2 fields (QUALF and ORGID)
    Depending on the value of the QUALF field i need to populate the column in my target structure.
    QUALF 001  => Colmn a
    QUALF 002 => Colmn b
    For now my graphical mapping is very simple - QUALF => column a (done just to find out how PI mapping works)
    What happens in my case, is the PI Payload shows all the E1EDK14 segments however only the value 006 present in the first occurence goes into the target column.
    How do I repeat a mapping between QUALF and target col. for multiple occurences of the same segment?
    Please can you guide me reg. use of context, loop over segment, UDF = which will be the best solution to achieve this?

    Hi
    My mapping is as below. I will take an example of a sales order that has 2 line items 00010, 00020. The payload is as follows
    I see this payload in the SXMB_MONI transaction => Receiver grouping => Payloads
    - <ZORDRES>
    - <IDOC BEGIN="1">
    + <EDI_DC40 SEGMENT="1">
    + <E1EDK01 SEGMENT="1">
    + <E1EDK14 SEGMENT="1">
      <QUALF>006</QUALF>
      <ORGID>01</ORGID>
      </E1EDK14>
    + <E1EDK14 SEGMENT="1">
      <QUALF>007</QUALF>
      <ORGID>01</ORGID>
      </E1EDK14>+ <E1EDK03 SEGMENT="1">
    + <E1EDK03 SEGMENT="1">
    + <E1EDK03 SEGMENT="1">
    + <E1EDK03 SEGMENT="1">
    + <E1EDKA1 SEGMENT="1">
    + <E1EDKA1 SEGMENT="1">
    + <E1EDKA1 SEGMENT="1">
    + <E1EDKA1 SEGMENT="1">
    + <E1EDKA1 SEGMENT="1">
    + <E1EDK02 SEGMENT="1">
    + <E1EDK02 SEGMENT="1">
    + <E1EDK17 SEGMENT="1">
    + <E1EDK18 SEGMENT="1">
    + <E1EDK18 SEGMENT="1">
    + <E1EDP01 SEGMENT="1">
      <POSEX>000010</POSEX>
    + <E1EDP01 SEGMENT="1">
      <POSEX>000020</POSEX>
      </E1EDP01>+ <E1EDS01 SEGMENT="1">
      <SUMID>001</SUMID>
      <SUMME>2</SUMME>
      </E1EDS01>
    + <E1EDS01 SEGMENT="1">
      <SUMID>002</SUMID>
      <SUMME>1100.00</SUMME>
      <SUNIT>GBP</SUNIT>
      </E1EDS01>
      </IDOC>
      </ZORDRES>
    There are 2 problems. First one which I discovered after posting the query. I can see only the line item 10 in the query that gets contructed in PI to insert the data into the target jdbc table. Please see jdbc receiver communication channel log below
    If you see above there are 2 E1EDP01 segments for line 00010, 00020.
    INSERT INTO  tblOItem  (IDocDate, IDocTime, SalesOrderNo, ItemNo, Plant, ItemCategory, UnitSellPrice, QuantityOrdered, QuantityAllocated, ScheduledDeliveryDate) VALUES (20111206, 135530, 0015002085, 000010, 0086, ZTAN, 0.00, 1.000, 1.000, 20111201)
    My source and target mappings are as below.
    ZSALORD
        IDOC
           BEGIN
             E1EDK01
             E1EDP01
               POSEX               =============>  SalOrdItm table column itemno
    My target side structure (idoc to jdbc scenario is as follows)
    I have mapped the E1EDP01 to Statement - I thought this will build one query per line item (per occurence of E1EDP01) but this is not working.
    MT_OITEM
      Statement
        dbtablename       ============> SalOrdItm
          action      =================> Insert
          table
          access
            Itemno      (this is one of the columns from the table)
    The occurence of E1EDP01 is 0..9999999 while the occurence of Statement node is 1...unbounded.
    Please is there any email address where I can send you screen shots if the above is not clear.
    I need to get this interface delivered as soon as possible but am STUCK.
    Edited by: gary jojo on Dec 6, 2011 3:06 PM

  • Pass system ack of JDBC adapter to ERP in IDoc - XI - JDBC scenario

    Dear all,
    i have an IDoc -> XI -> JDBC scenario (without using ccBPM). In the standard way the ERP system, sending the IDoc waits for an application acknowledgement. However the JDBC adapter is only capeable to send system acknowledgements.
    Is there a way to pass these acknowledgements to the IDoc status record?
    In help.sap.com (http://help.sap.com/saphelp_nwpi71/helpdata/en/ab/bdb13b00ae793be10000000a11402f/frameset.htm) under "IDoc Processing with the IDoc Adapter " there is a table that maps XI system/applic acknowledgement to IDoc status. So in my opinion the status record of my IDoc should at least chenge to the corresponding status for the system ack.
    Can anyone tell, if this is really working? What if I deactivate the acknowledgement request in the NOALE programm?
    In any case, can I achieve to transfer the system ack to the IDoc status without using a ccBPM?
    Many thanks and best regards
    Florian

    Is there a way to pass these acknowledgements to the IDoc status record?
    Without BPM, No.
    So in my opinion the status record of my IDoc should at least chenge to the corresponding status for the system ack.
    The ack referred here is related to idoc status whether it is properly reached till XI or not and not related to the JDBC ack.
    What if I deactivate the acknowledgement request in the NOALE programm?
    Then u won't have any ALEAUD message at sender R3.
    In any case, can I achieve to transfer the system ack to the IDoc status without using a ccBPM?
    No
    Regards,
    Prateek

  • IDOC to JDBC scenario in case of Cost Element Group IDOC.

    This is an IDOC to JDBC scenario.
    The Cost Element Group IDOC is having different segments. The main segment E1COGH (1...unbound) is consisting of different subsegment like E1OGS (0...unbound) & E1COGV (0...unbound). The main segment (E1COGH) along with subsegments E1OGS & E1COGV) is occuring more that 1 times. I have to insert data into the table, which we can do in single rows (no hierarchy  is possible in tables). I have used "use one as many" in message mapping. Now if E1OGS or E1COGV is repeating in a single E1COGH segment then we dont get any error. But if I duplicate the main segment then I am getting runtime exception.
    Please suggest about how to map in this case.

    In my scenario:
         E1COGH
         |
          -> E1COGS
             E1COGV
    where     E1CGH -> Main segment
         E1COGS & E1COGV -> sub segment
    E1COGH -> 1..unbound
    E1COGS -> 1..unbound
    E1COGV -> 1..unbound
    At the target side I have created two Statement Structure (ie.Statement & Statement_1) . One for E1COGS (ie. Statement) & the other for E1COGV (ie. Statement_1).
    Case 1 ->  If E1COGS is present in the main segment E1COGH then it is mapped AS IS.
    Case 2 -> If E1COGS is not present in the main segment E1COGH then it is mapped as blank.
    This will be mapped with Statement & in the absence of E1COGS this Statement structure is SUPPRESSED.
    Similarly,
    Case 1 -> If E1COGV is present in the main segment E1COGH then it is mapped AS IS.
    Case 2 -> If E1COGV is not present in the main segment E1COGH then it is mapped as blank.
    This will be mapped with Statement_1 & in the absence of E1COGV this Statement_1 structure is SUPPRESSED.
    All the elements of the segment E1COGH, E1COGHT & E1COGHR are replicated in all the rows for X (no. of occurance of E1COGS) + Y (no. of occurance of E1COGV).
    While testing in Message Mapping, I am able to get the output as for multiple occurence of E1COGS & E1COGV in a single E1COGH.
    But if I increse the occurence of E1COGH the it is giving the following error :
    Runtime exception during processing target field mapping /ns0:MT_Cost_Element_Group_Response/Statement/DBtablename/access/GROUPNAME. The message is: Exception:[com.sap.aii.mappingtool.tf3.IllegalInstanceException: Too few values in first queue in function useOneAsMany. It must have the same number of contexts as second queue.] in class com.sap.aii.mappingtool.flib3.NodeFunctions method useOneAsMany[com.sap.aii.mappingtool.flib3.CollapseContexts@51197231, , ]
    Please suggest how to map the occurence of E1COGH simultaneously with the occurence of E1COGS & E1COGV.

  • Mapping issue in idoc to JDBC scenario

    mapping issue in idoc to JDBC scenario
    source structure
    E1KNB1M
      BUKRS = 1000
    E1KNB1M
      BUKRS=  9000
    E1KNB1M
      BUKRS=  2000
    THE NODE E1KNB1M is repeated many times and the field BUKRS is also repeated with E1KNB1M as above
    TARGET field : ISFRANCHISE
    if any where value of BUKRS =9000 we have to pass Y to the target filed, else N
    if BUKRS = 9000   THEN ISFRANCHISE= Y
                   ELSE
                ISFRANCHISE=N
    I've done the mapping as below
    BUKRS = 9000--> IF THEN Y ELSE N--
    > ISFRANCHISE
    BUT everry time the target value is N only
    pl suggest
    rgds
    mojib

    mapped like this
    BUKRS--->SORT---->
                                                 EQUALS --------IF---THEN    Y
    9000------------------------>                                               ----------------->ISFRANCHISE
                                                                  ELSE   N
    context of BUKRS set to parent node
    its worked
    thanks to all for valuable suggestions
    rgds
    mojib

  • IDOC-XI-JDBC scenario,   jdbc sent too slow

    i have a IDOC-XI-JDBC scenario,
    the problem is that near 5 Lac IDOC is sent to XI, each IDOC is processes by an instance of the scenario, and the sent to the Database is too clow...means 4000 records per hour,
    can i configure the JDBC receiver adapter in a way, so that it becomes faster/more concurrent,

    Hey,
    First raise the issue to the  DBA he might help resolve the ISSUE more efficently.
    Secondly check in the JDBC adapter -> Adavance mode -> Disconnect from the data base after processing each message shouldn't be set.
    Even check with Database Transaction Isolation Level -> default is value of the connected database.
    <b>The isolation level  determines how transactions running in parallel can influence each other</b>
    http://help.sap.com/saphelp_nw04/helpdata/en/64/ce4e886334ec4ea7c2712e11cc567c/content.htm
    Why not  the other way around > Collect multiple idocs in a file restrict maxium number of idocs to required value then send the file ?
    Stefan Grube Example:
    /people/stefan.grube/blog/2006/09/18/collecting-idocs-without-using-bpm
    if it is with bpm then collect multiple idoc with occurance change and send them.
    <b>Cheers,
    *RAJ*
    **REWARD POINTS IF FOUND USEFULL <b>

  • Error in IDoc to JDBC scenario

    Hi friends,
        I am configuring an IDoc to JDBC scenario in XI.When I am testing the scenario in Test Configuration then it is getting processed successfully but when I am tseting the entire configuration then in sxmb_moni the following error is showing:
    "Error occurred during back-routing Error in communication channel". Please help as I am unable to understand the error.
    regards
    Debansu

    Hi Debansu,
    Please go through the link it may help to solve your problem.
    JDBC Adapter / Acknowledgements
    Error in back routing Error in communication channel
    Regards,
    Sridhar Goli
    Edited by: sridhar goli on Aug 11, 2008 11:35 AM

  • Problem in Idoc to JDBC scenario(uses BPM)

    Hi
    I have a IDoc to JDBC scenario which also uses BPM.
    The JDBC adapter has to execute a Stored procedure on Sybase database.
    I work on XI3.0 SP14.
    When I am sending IDoc to XI it is failing in CALL adapter step.
    The error message is "Unable to convert sender service TruckLiftAccountUpdate to an ALE logical system".
    However this scenario is working in Production with same settings.But it is not working in Quality and it is giving the above error.
    Can any one help me in this.
    Thanks in advance.
    KP

    Thanks for your quick reply..
    All the settings are in place.
    Here the Idoc is coming to BPM and BPM cant able to execute the stored procedure.and we are getting the error from BPM to target system.
    Here error is unable to convert the sender service(from BPM service) to ALE
    logical system.
    same settings are there in Production but it is not working in QA.
    Thanks in adavnce,
    KP

  • IDOC to JDBC Scenario error

    Hi All,
    I am doing a IDOC to JDBC Scenario.I am done with IR and ID.
    The Table in the DB is TABLE1 with Field1 and Field2.
    Now when I run thescenario it throws an error ,
    2009-03-19 12:41:06 Success INSERT INTO  TABLE1 (Field1, Field2) VALUES (KM247850, FINJTIA)
    2009-03-19 12:41:06 Error Unable to execute statement for table or stored procedure. 'TABLE1' (Structure 'Statement') due to java.sql.SQLException: [EUDNT038]The name "KM247850" is not permitted in this context. Valid expressions are constants, constant expressions, and (in some contexts) variables. Column names are not permitted.
    But it has successfully generated the SQL Query which I think is perfect.
    But whats the error which follows that?
    How do I resolve it?
    Thanks,
    Venu

    Hi,
    It could be due to wrong structure of JDBC, compare your target structure with this blog..
    /people/sap.user72/blog/2005/06/01/file-to-jdbc-adapter-using-sap-xi-30
    Regards,
    Sarvesh

  • IDOC to JDBC scenario: Does INSERT command expect a result value?

    Hello,
    we have an IDoc-to-JDBC-scenario configured on our XI 3.0, which uses the INSERT command to put a dataset coming from R/3 into a SQL database. This works fine.
    Now a trigger has been activated on the database, which sets a flag to each dataset after inserting.
    Because of this a system error occurs in the Adapter Engine and I found in the AuditLog (logSQLStatement=true), that the INSERT command is processed correcty, but in the next step an error is shown up: 'SQLServerException. A result set was generated for update.'
    Could it be, that the trigger returns a result value, which can't be handled on the XI ?
    If yes, how can I solve this issue? I have read something about the different methods execute(), executeUpdate() and executeQuery(), but I don't know how and where this has to be configured...
    Thanks in advance,
    Juergen

    Hi Upendra,
    I got some more information from the database adminstrator:
    He used the following command 'exec xp_cmdshell @ExportCmd , no_output'
    whereas @ExportCmd contains the command.
    With the no_output option, the xp_cmdshell does not return a recordset.
    I hope this will be helpful to you.
    Grtz,
    Juergen

  • IDOC -to-JDBC Scenario for Purchasing Info Record  - Urgent !!!

    Hi All,
           I am working on IDOC-to-JDBC Scenario and i have no concepts about IDOCs. I know how to configure an IDOC in XI , but i have no idea how to start for it in SAP.
           Can anybody help me on how to find the INFREC IDOC in SAP, how to configure it , how to insert data into that IDOC and then finally how do we test that if its working or not .
    Thanks & Regards,
    Ruchi

    Hi All,
           I am working on IDOC-to-JDBC Scenario and i have no concepts about IDOCs. I know how to configure an IDOC in XI , but i have no idea how to start for it in SAP.
           Can anybody help me on how to find the INFREC IDOC in SAP, how to configure it , how to insert data into that IDOC and then finally how do we test that if its working or not .
    Thanks & Regards,
    Ruchi

  • Idoc to jdbc scenario of sap xi

    Hi All,
    i want step by step procedure for developing idoc 2 jdbc scenario. Anybody have this scenario, please send me that.
    Thanks & Regards,
    Nagarjuna.

    Hi
    Have a look at these threads
    /people/laxman.molugu/blog/2006/08/13/integration-with-databases-made-easy-150-part-1
    Re: Idoc triggering from a transaction
    Message Mapping - JDBC to IDoc
    Re: JDBC - System/Application Acknowledgement
    /people/michal.krawczyk2/blog/2005/09/01/xi-idoc-adapter--edidc40--demystified
    Process Integration (PI) & SOA Middleware
    **Reward points if helpfull**

  • Idoc to jdbc scenario problum in queue ?

    hi experts
    I am facing a problem in IDOC to JDBC Scenario (PI 7,1) . When i trigger the idoc first time it is inserting in to the data base . when i trigger second and third time  struck in the queue .By default the quality of service it is taking EOIO,
    My question  is :
    1. How to clear the Queue ? and is there is any method it automatically release the queue ?
    2. How to change the QOS EOIO to EO .(i don't find any option at jdbc adapter level to give QOS  ) ?
    Thank You
    G.Praveen Kumar

    Hi,
    >>1. How to clear the Queue ? and is there is any method it automatically release the queue ?
    To Re-process Automatically
    /people/sap.user72/blog/2005/11/29/xi-how-to-re-process-failed-xi-messages-automatically
    >>2. How to change the QOS EOIO to EO .(i don't find any option at jdbc adapter level to give QOS ) ?
    For any Adapter, Receiver  side QOS option wont be there. Sender side only will be available.
    As soon as you trigger the Idoc from ECC, this will be sent to receiver in the Idoc generation order only
    REgards
    Seshagiri

  • Storage Issue in Database while executing Idoc to Jdbc scenario

    Hi,
    I am testing an Idoc to JDBC scenario. The scenario executes correctly, but the number of records getting stored in the database are not equalling the data present in the Idoc.
    Eg: If the Idoc has data for around 75000 records to be saved, only around 50000 records are getting saved in JDBC SQl server database.
    Please let me know what could be the issue and how to resolve it.
    Regards
    Kiran.

    Check the output XML in XI;ie, the output of your mapping. Does it have the same number of records as the Idoc? if no the issue is in the mapping.
    Regards
    Bhavesh

  • Very strange error : IDOC to jdbc scenario

    Hi
    I am getting a very strange error when I see the log for the idoc to jdbc scenario that I am building.
    The mapping test shows the header record and line item record properly in the mapping result.
    insert, access nodes, fields with access nodes are all formed correctly.
    However the communication channel log shows below error.
    Could not execute statement for table/stored proc. "tblTestItem" (structure "Item") due to com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ')'.
    JDBC Message processing failed, due to Error processing request in sax parser: Error when executing statement for table/stored proc. 'tblTestItem' (structure 'Item'): com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ')'.
    The message status was set to WAIT.
    The query that I see in the log is :INSERT INTO  tblTestItem () VALUES ()
    However mapping tool shows that all nodes are correctly formed.
    Please assist.

    Hi
    I am still getting this issue even after the below steps so kind of stuck - actually very much stuck.
    1. Restart of the dev environment
    2. Tried with a new extension of the idoc
    In the communication channel log for the JDBC receiver channel I still see
    INSERT INTO tblItem () VALUES ()
    The payload that I see in the message content tab is as follows
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:MT_XXX_XXXX xmlns:ns0="http://capita.com/pi/XXXX">
    - <Statement>
    - <dbTableName action="INSERT">
      <table>tblItem</table>
      </dbTableName>
    - <access>
      <InvoiceNo>0000000009293467</InvoiceNo>
      </access>
      </Statement>
      </ns0:MT_XXX_XXXX>
    How do I debug the jdbc adapter to see how it converts the above xml output from the mapping step (note that this output is from an actual run and not test tool) to a sql query.
    Very strange that the column names are present in the target payload but it is not reflecting in the query.
    I have other tables being populated with the same jdbc receiver communication channel which makes this more and more confusing.
    PLEASE ADVICE.

Maybe you are looking for

  • Can't get online, but airport says I'm connected?

    Hi, I bought a Netgear wireless router, and after talking on the phone for over an hour with support, I got everything working. I have a Mac Mini, and my boyfriend has a new iMac, in the same room, that is also hooked up wirelessly to the same router

  • I get error (-50)

    Everytime i try 2 put a song on to my ipod it comes up with a error sayin cannot be updated.the disk could not be read from or writen to then its usualy followed by cannot be updated.an unkown error occured (-50.Ive tried to restor it and that doesn'

  • Loading class file stored in BLOB field

    - I am able to store and retrieve Java files and XML files in and from a BLOB field, but when I store a class file and try and load it using Class Loader, it us unable to load the class. The size of the class file increases by 1 byte when I retrieve

  • Can I use ddr3 memory in a macbook runing ddr2  memory

    I have a macbook pro running 1067 Mhz DDR3 4GB and just updated to 8GB. Can I use the old DDR3 4GB in my old macbook which runns DDR2 memmory? Any advise would be great. Thanks

  • Mass availability check in subcontracting PO's

    Hi, is there a way to mass availability check in subcontracting PO's? Thanks, Sebastian