Multiple records as a single transaction in JDBC Receiver Adapter

Hi,
I am sending multiple records in a single message to a JDBC receiver adapter to get updated to the database. How to make all the insert a single transaction. Like all the records has to be inserted else all has to be rolled back.
For eg for table Employee two fields EMPNO and EMPNAME
EMPNO  EMPNAME
1            Jay
2            Christie
These two records are in the same message and has to be updated
if one fails the other has to be rolled back.
How can i achieve it using a JDBC Receiver Adapter.
Thanks
Sebin

Hi Rolf Micus,
My xml structure to insert 2 tables are as follow:-
<?xml version="1.0" encoding="UTF-8"?>
<ns0:MT_PODB xmlns:ns0="http://abeam.com/xi/fer_filejdbc_scenarios1">
..   <STATEMENT_HEADER>
....      <ROW action="INSERT">
......         <TABLE>ZPO_HEADER</TABLE>
......        <access>
........            <PONUMBER>001</PONUMBER>
........            <PODATE>20070801</PODATE>
........            <POAMOUNT>200.99</POAMOUNT>
....         </access>
....      </ROW>
..   </STATEMENT_HEADER>
..   <STATEMENT_DETAIL>
....      <ROW action="INSERT">
......         <TABLE>ZPODETAIL</TABLE>
......         <access>
........            <PONUMBER>001</PONUMBER>
........            <PONO>1</PONO>
........            <POITEMCODE>A12345</POITEMCODE>
........            <POITEMDESC>Testing A</POITEMDESC>
........            <POITEMAMOUNT>2990.00</POITEMAMOUNT>
........            <POITEMQTY>55</POITEMQTY>
......         </access>
....      </ROW>
..   </STATEMENT_DETAIL>
</ns0:MT_PODB>
Fro the structure that you have declared..there is only contained 1 statement, try to admend your MT to have 2 statements.
If you wish to insert multiple records, just create a loop/multiple of access tag inside STATEMENT tag. For example, multiple records insert into Header should have multiple access tag in Header STATEMENT. Same goes for muliple records insert into Details STATEMENT should have multiple access tag in Details STATEMENT.
With this structure, whenever any records insert/update/delete failed...it will rollback all the transactions together, ie. Header and Details.
PS: For different table, please create different STATEMENT.
Hope it helps.
Message was edited by: Pua Ming Fei

Similar Messages

  • Transaction Handling - JDBC Receiver Adapter - Multiple SP Calls

    Hello,
    I have the following scenario:
    I send an XML-SQL structure with multiple statment elements (each of them calling a different stored procedure). A stored procedure raises an error back to the JDBC Receiver Adapter in case of error.
    Is it possible to have transaction handling in the JDBC Receiver to ensure:
    - Commit only after ALL stored procedures where succesful (no error risen during calls)
    - Rollback of ALL already called stored procedures in case an error has been risen
    How can I implement these requirements in the JDBC Receiver Adapter?

    One more comment, I have found the following info for JDBC Drivers:
    <i> "JDBC driver's default is to autocommit, meaning that the result of every SQL statement is permanent as soon as it is executed. This is why the course hasn't had to be concerned with transactions so far, and is perfectly acceptable in many cases."</i>
    So I think that each SP-Call is automatically commited in case autocommit on JDBC Driver Level is set to "true". Does anyone know where I can change these settings? Directly on JDBC Receiver Adapter or do I have to go to Visual Admin for those changes?

  • Multiple records for a single transaction - Issue in LSMW

    Hi,
    i'm facing a issue in LSMW
    i have the data coming up in the flat file. the data which constitutes the single transaction consists of  data from multiple records from the flat file..
    suppose we have 10 records in the flat file... and all the 10 records related to ony  2 transactions i.e say 6 records to first transaction and next 4 records to next transaction.
    we have a direct input method to handle this data like field1 for first record, field2 for 2nd record and so on...
    while uploading, we will get all the records one by one into our source structure. My question is can we handle this scenario in lsmw? if yes, pls suggest
    Thanks in advance
    Shekhar

    Hi Kris,
    this is regarding the asset creation via AS01..
    we are getting the flat file in that way. Lets assume like this:
    suppose for one transaction we may need to fill 5 depreciation keys and for another option only 3 dep. keys we need to fill.
    then in the flat file, we can get like 5 records for first transaction i.e asset and 3 records for 2nd transaction
    Can we handle this via lsmw
    Regards
    shekhar

  • Concatenate multiple records into one single record

    Hello everyone,
    Can anyone guide me how to merge multiple records into one single record
    like......... I am getting the data in the file like
    aaaaa/bbbbbbb/ccccccccccc/dddddddddddd/eee
    ffffff/gggg/hhhhhhhhhhhhhh
    /123/4567/55555/99999999/kaoabfa/eee
    fffff/kkkkkkkk/llllllllllllllllllllllll
    when i use gui_upload I am getting the data into the internal table in the above format.
    My main intension is to split the record at / to multiple lines and dowload it into another file.
    What i am planning to do is... if the line does not start with / then i want to concatenate the multiple lines into single line and then split it into multiple records. Can anyone guide me how to achieve this.

    Yes, it should work.
    In my example
    Loop at itab.
    concatenate i_text itab into i_text.
    endloop.
    You change that loop for the loop of your internal table with the file records
    So if you have this three records
    'aaaa/bbb/ccc'
    '/dddd/efg'
    'hijk/lmn'
    i_text will look like this at the end
    'aaaa/bbb/ccc/dddd/efghijk/lmn'
    then in this part of the code
    split i_text at '/' into table itab2.
    itab2 will have the records looking like this
    aaaa
    bbb
    ccc
    dddd
    efghijk
    lmn'

  • MessageTransformBean - SimplePlain2XML - Multiple records on a single line

    Hi,
    I am trying to convert multiple record from a single line to multipe rows in an XML message with the MessageTransformBean.
    If the record look like this it's working:
    RECORD1textETC
    RECORD2textETC
    But the incoming message are all on a single line:
    RECORD1textETCRECORD2textETC
    Is there a way to add a linefeed to my incoming message after X characters, or to tell the adapter to split by length instead of spliting on the end of line?
    Thanks,
    Martin

    I had to code a custom Module Adapter to do it.
    Here's the main part of the module adapter EOLConvertBean...
    Message msg = (Message) inputModuleData.getPrincipalData();
    XMLPayload xmlpayload = msg.getDocument();
    byte[] content = xmlpayload.getContent();
    byte crlf = 0x0A; // end of line char
    int current = 0;  // current bytes read     
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int lines = content.length / recordLen; // record len = insert EOL after X recordLen
    // TODO change for do while for 1x line record
    for (int i = 0; i <= lines; i++) {
         baos.write(content, current, recordLen);
         baos.write(crlf);
         current += recordLen;
    xmlpayload.setContent(baos.toByteArray());
    inputModuleData.setPrincipalData(msg);
    Edited by: Martin Lavoie Rousseau on Oct 6, 2010 9:08 PM

  • How to insert multiple records in a single query

    Dear all,
    Can you please tell
    how to insert multiple records in a single query ??

    INSERT INTO table_name (column_1, column_2) VALUES ('value_A', 'value_B')OR
    INSERT INTO table_name
    (column_1, column_2)
    SELECT 'value_A', 'value_B' FROM DUAL
    UNION ALL
    SELECT 'value_C', 'value_D' FROM DUAL
    ;Edited by: Benton on Nov 9, 2010 1:59 PM

  • Issue with processing time of JDBC receiver adapter

    Hi all,
    We are using PI 7.1 EHP1.
    We have an issue with JDBC receiver adapter taking too much time to process messages.
    We are using XML SQL format message protocol with INSERT_UPDATE as the document format.
    Each message can contain multiple records, i.e. 1 single message can result in many updates/inserts.
    Currently, time taken to process in 6-12 secs which is quite high considering the messages are not very large in size.
    We sent the statements to Oracle DBA to see if anything about the queries being used is causing issues. Awaiting inputs.
    In the mean time, wanted to check if there is anything that can be done from PI side that will help us improving the processing time.
    Thanks in Advance,
    Sailaja.

    Hi,
           i think the main cause is  query taking long time to execute in DataBase.
          -> increase the read time and response time in the JDBC receiver adapter.
      In the advanced mode table section of sender channel and receiver channel configurations, we can set driver properties for each DB connection. Any such property would have to contain prefix 'driver:'(with out quotes).
    For Oracle Database JDBC thin driver 10.2.0.3 version, the property oracle.jdbc.ReadTimeout helps to set read timeout while reading from the socket. Also for setting login time out in Oracle, we use oracle.net.CONNECT_TIMEOUT. To set these two properties use as follows: driver:oracle.jdbc.ReadTimeout 1000 driver:oracle.net.CONNECT_TIMEOUT 1000 The TimeOut Driver properties like ReadTimeout and CONNECT_TIMEOUT are in milliseconds.
    Refer note 1078420 for more details
    please go through this blog i hope it will help you.
        http://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/c059d583-a551-2c10-e095-eb5d95e03747
    regards,
      ganesh
    Edited by: ganesh.nijampudi on Oct 25, 2011 12:00 PM

  • Error while updating database using jdbc receiver adapter

    Hi All,
    I am trying to update a single record using jdbc receiver adapter.
    This is my the message that is getting created..
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:Data xmlns:ns0="urn:Test">
    - <STATEMENT>
    - <TABLENAME ACTION="UPDATE_INSERT">
      <TABLE>ORDERS</TABLE>
    - <ACCESS>
      <OrderID>99999</OrderID>
      <CustomerID>VICTE</CustomerID>
      <EmployeeID>3</EmployeeID>
      <ShipAddress>VICTE</ShipAddress>
      </ACCESS>
    - <KEY>
      <OrderID compareOperation="EQ">99999</OrderID>
      <ShipAddress compareOperation="EQ">VICTE</ShipAddress>
      </KEY>
      </TABLENAME>
      </STATEMENT>
      </ns0:Data>
    But in Adapter Monitoring i am getting the following error..
    <i>Error while parsing or executing XML-SQL document: Error processing request in sax parser: Error when executing statement for table/stored proc. 'ORDERS' (structure 'STATEMENT'): java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Line 1: Incorrect syntax near 'VICTE'.</i>
    Regards,
    Rahul

    Rahul,
    > In this case i believe the interface has to be synch.
    > So what will the response message type be like..
    Not necessary. UPDATE can be asynch as well.
    Can you turn the trace on like pointed by Michal and then you can see the Query in the Audit Log of the adapter montioring. Try to execute the same query from your DB Client like TOAD and see what is the Syntax error you are getiing.!
    The problem looks like some field has some dataype / column name mismatch.
    Regards
    Bhavesh

  • Alerts for JDBC Receiver Adapter

    Hi ,
    I am using JDBC receiver adapter. I have configured the alert category and Alert rules. Alerts are getting for Mapping etc.
    When ever error occured in the SQL server whether its firewall issue or some other issue. The alerts are not created. Instead I can see the error message in RWB Message monitoring and communicaton channel monitoring.
    Please let me know How can raise alerts if the error occured at the JDBC receiver side.
    Thanks in advance,
    Kevin

    Hi Kevin,
    Probabaly the alert rule did not capture the error in the adapter engine.
    The filter for sender and receiver interface details in the alert rule can cause this issue depending on when and how the error occured. Can you create an alert rule with * for all entries, for adapter engine and check?
    Also do NOT check the option "suppress multiple alerts from this rule" because it will prevent subsequent alerts from this rule, if there is already one and not yet confirmed.
    Further please check the alerts in SALRT table in se16 if its created properly or via transaction ALRTDISP.
    Please use the report SXMSALERT_LOGREADER for troubleshooting and checking the alert logs.
    Hope this helps.
    Regards,
    Francis

  • JDBC receiver adapter for AS400-query time out due to Escape Symbol

    Hello,
    I am uisng JDBC receiver adapter for AS 400, When I execute query, the query needs to have arguments in the open and close single ticks ('    12345' )
    My XML pay load looks like this, which is RFC sender. Look at dcudcstmr in <i><b>(' 838912')</b></i>.  When receiver gets this message the ' (single quotes are disappeared.
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns1:MT_Cma_Customer_Select_Request xmlns:ns1="http://freemanco.com/xi/Get_Customer">
    - <Statement>
    - <LawsonCustomer action="SQL_QUERY">
      <access>select f1.DACMCMPNY from sap.sapcustvew f1, sap.sapcustvew f2 where f2.dcudcstmr in <i><b>(' 838912')</b></i> and (f1.dcudcstmr=f2.dcudcstmr or f2.komaster=f1.dcudcstmr)</access>
      </LawsonCustomer>
      </Statement>
      </ns1:MT_Cma_Customer_Select_Request>
    On the Receiver JDBC adapter I have tried with different combinations of Escape Symbol for Aposrophe as follows
    <b>   \
       '</b>
    As you know this is related to epcape character, I get following error all the time. Looks like the query is not able to execute in the specified time. My question is how do I get single quote as part of query.
    <b>select f1.DACMCMPNY from sap.sapcustvew f1, sap.sapcustvew f2 where f2.dcudcstmr in ( 100001) and (f1.dcudcstmr=f2.dcudcstmr or f2.komaster=f1.dcudcstmr) 2007-09-20 15:56:42 Error Unable to execute statement for table or stored procedure. 'LawsonCustomer' (Structure 'Statement') due to java.sql.SQLException:
    [SQL0666] Estimated query processing time 13766 exceeds limit 8000. 2007-09-20 15:56:42 Error MP: exception caught with cause com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'LawsonCustomer' (structure 'Statement'): java.sql.SQLException:
    [SQL0666] Estimated query processing time 13766 exceeds limit 8000. 2007-09-20 15:56:42 Error Exception caught by adapter framework: Error processing request in sax parser: Error when executing statement for table/stored proc. 'LawsonCustomer' (structure 'Statement'): java.sql.SQLException:
    [SQL0666] Estimated query processing time 13766 exceeds limit 8000. 2007-09-20 15:56:42 Error Delivery of the message to the application using connection JDBC_http://sap.com/xi/XI/System failed, due to: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'LawsonCustomer' (structure 'Statement'): java.sql.SQLException:
    [SQL0666] Estimated query processing time 13766 exceeds limit 8000.. Setting message to status failed. 2007-09-20 15:56:42 Error The message status set to FAIL. 2007-09-20 15:56:42 Error Returning synchronous error message to calling application: com.sap.aii.af.ra.ms.api.RecoverableException: Error processing request in sax parser: Error when executing statement for table/stored proc. 'LawsonCustomer' (structure 'Statement'): java.sql.SQLException:
    [SQL0666] Estimated query processing time 13766 exceeds limit 8000</b>
    Any feedback or helpfull tips appreciated.
    Thank you,
    Balaji

    Raj,
    Thank you for the reponse. I am using UDF on sender to generate sql statement as you see in sender XML message. After the message reaching receiver, gets executed but no response from AS400 becasue of missing single quotes in the sql query executed.
    Sender XML sends
    <access>select f1.DACMCMPNY from sap.sapcustvew f1, sap.sapcustvew f2 where f2.dcudcstmr in <u><b>(' 838912')</b></u> and (f1.dcudcstmr=f2.dcudcstmr or f2.komaster=f1.dcudcstmr)</access>
    Receiver executes as
    select f1.DACMCMPNY from sap.sapcustvew f1, sap.sapcustvew f2 where f2.dcudcstmr in ( <b><u>838912</u></b>) and (f1.dcudcstmr=f2.dcudcstmr or f2.komaster=f1.dcudcstmr)
    As you see the single quotes are missing. Like I said in previous posting I tried with following Escape Symbol for Aposrophe.
    Let me know if you need more information.
    Thank you,
    Balaji

  • JDBC Receiver Adapter: Guarnteed delivery

    Hi All,
    I have a JDBC receiver scenario.  I was investigating the Guarnteed ( Exactly Once ) delivery option of the JDBC receiver adapter.  The Following two scenarios needs to be validated
    The Technical scenario is SAP R/3 ---  XI -
    Database
    Scenario1 :  The message has been triggered by SAP r/3 to XI.  The Target Database then crashed.   The message errors out in the Adapter engine and was not sent to the database. Would the messsage be resent again, till successful delivery. Do we need to set the Advance Mode, parameter "Number of Re-tries of database Transaction on SQL error".  Or should this happen automatically from the Adapter without any setting in the adapter configuration.
    Scenario2:  There is a setting as Exactly Once Handling .
    i have gone through the documentation on SAP help
    [http://help.sap.com/erp2005_ehp_03/helpdata/EN/22/b4d13b633f7748b4d34f3191529946/frameset.htm]
    But this is not very illustrative
    it has 2 modes  
      PERSISTENCE ( values local and DB )
      CONFLICT RESOLUTION ( Error or Redo )
    Is this only after a post-commit system crash? Can anybody provide some more documentation, or blogs for the same.
    In all we would expect that, a message Triggered from R/3 should always be delivered to the database.
    please let me know know your opinions on the same.
    Thanks in advance,
    Best Regards
    Abhishek

    Would the messsage be resent again, till successful delivery
    The default behaviour of adapter engine is to try sending data to receiver 3 times at an interval of 5 minutes after which the message goes into system error. You may change this behavior through visual admin. After this, you may also manually restart the message.
    Do we need to set the Advance Mode, parameter "Number of Re-tries of database Transaction on SQL error"
    This is not mandatory. As I mentioned above, it is handled to a certain exten automatically.
    Is this only after a post-commit system crash?
    The persistance factors when defined could help in error handling cases. This could also be used when a system crash occurs at the time of message processing. Then the message processing has to be done for the second time and one of the two conflict resolution methods are used.
    Regards,
    Prateek

  • Synchronous  JDBC Receiver Adapter

    Hi,
    My requirement is JDBC--- XI --- JDBC (Sync) — JDBC.
    Let me be more precise about the above scenario.
    JDBC sender picks up a record from DB1 and sends to DB2 and gets a response from DB2 and send the response to DB3.
    I am sure this can be handled only through BPM.
    But my question will a JDBC Receiver adapter gets a response back to XI. If this is possible , can some one tell me how can I achieve it.
    Thanks
    Shaik

    <i>I am sure this can be handled only through BPM. </i>
    BPM required.
    <i>
    But my question will a JDBC Receiver adapter gets a response back to XI.</i>
    Yes.
    The weblog by Bhavesh would also b helpful.
    Regards,
    Prateek
    Message was edited by:
            Prateek Srivastava

  • Executing Select query using JDBC Receiver Adapter

    I created couple types in Oracle and also new function instead of procedure
    Can I execute the above query using JDBC Receiver Adapter.
    select *
    from  the ( select cast( apr.get_distribut('', '', '', 'hdfcgd', 'CAN') as dsrTable )
             from dual );
    If possible how my message structure should look like...

    Hi vikram,
       If you use JDBC as Receiver Adapter you can only post the data to the data base I do no think so we can select the records from the data base.
       If you use JDBC as Sender hope,we can the select query in the sender communication channel.
        Hope I am clear.
      Thanks and Regardds,
      Chandu.

  • Jdbc receiver adapter

    Hi all,
    I want to insert data into two tables and want to get data from one of those tables(using SELECT in the attribute 'action') after they are inserted with the data.
    So how should be my receiver jdbc datatype structure.
    Can anybody please tell me?
    Thanks & Regards
    Radhika.

    Check this  blog for Synhronous select of data froma Database,
    /people/bhavesh.kantilal/blog/2006/07/03/jdbc-receiver-adapter--synchronous-select-150-step-by-step
    /people/jegathees.waran/blog/2007/03/02/oracle-table-functions-and-jdbc-sender-adapter
    Please see the below URL for logic.
    http://www.flickr.com/photos/8764045@N06/549186611/
    http://www.flickr.com/photos/8764045@N06/549186651/
    hope it will help u ..

  • JDBC Receiver Adapter -- Synch Select. ERROR

    Hello,
    We have implemented the scenario described by Bhavesh Kantilal in blog 3928:
    JDBC Receiver Adapter -- Synchronous Select – Step by Step 
    /people/bhavesh.kantilal/blog/2006/07/03/jdbc-receiver-adapter--synchronous-select-150-step-by-step
    but modified to our requirements.
    An Idoc is coming in, mapped to a sync receiver jdbc as described to collect data from a jdbc table.
    Result when connecting the oracle database with the jdbc receiver adapter:
    Error processing request in sax parser: Error when executing statement for table/stored proc. 'T_ST_MAINDRIVER' (structure 'STATEMENT'): java.sql.SQLException: ORA-00942: table or view does not exist
    Oh, like to complete the information by the payload from the jdbc rec. connect:
    <?xml version="1.0" encoding="UTF-8" ?>
    - <ns0:MT_JDBC_LOOPUP_ID xmlns:ns0="http://www.xxx.org/excel">
    - <STATEMENT>
    - <TABLENAME ACTION="SELECT">
      <TABLE>T_ST_MAINDRIVER</TABLE>
      <ACCESS />
    - <KEY>
      <MAINDRIVER compareOperation="=">Optomechanical</MAINDRIVER>
      </KEY>
      </TABLENAME>
      </STATEMENT>
      </ns0:MT_JDBC_LOOPUP_ID>
    The table exists on the database. So, what is our mistake? Do you have any ideas?
    Best regards
    Dirk
    Message was edited by:
            Dirk Meinhard
    Message was edited by:
            Dirk Meinhard

    Hi Anil,
    I am back on my JDBC problem and I am one step further!
    Thank you for this hint. Looks like this is the solution.
    So I like to add my next question !
    My new error is resulting from my query command.
    I have set "=" to find a specific entry as compare operation.
    Error when executing statement for table/stored proc. 'IRIS.T_ST_MAINDRIVER' (structure 'STATEMENT'): java.sql.SQLException: FATAL ERROR document format in structure 'TABLENAME': unexpected value '=' for attribute 'compare' found
    Looks like this is not ok .
    This is my xml of this query:
    <ns0:MT_JDBC_LOOPUP_ID xmlns:ns0="http://www.xxx.org/excel">
       <STATEMENT>
          <TABLENAME ACTION="SELECT">
             <TABLE>IRIS.T_ST_MAINDRIVER</TABLE>
             <ACCESS/>
             <KEY>
                <MAINDRIVER compareOperation="=">Optomechanical</MAINDRIVER>
             </KEY>
          </TABLENAME>
       </STATEMENT>
    </ns0:MT_JDBC_LOOPUP_ID>
    Can you, or anybody else, give the helping idea?
    regards
    Dirk

Maybe you are looking for

  • PC Will Not Boot With Sound Blaster Live Va

    My PC won't boot with the SBLV card but when i put the SB Vibra 28 card back in it will boot. The card dosen't look burnt out anywhere,the sound card could have **bleep** itself,any ideas.also i have another problem i can't get the SB Vibra 28 driver

  • No space on startup disk?  Problem with Mail?

    Bought a new MacBook Pro Retina 15, 8mb ram.   Recently when running Mail, it refuses to close when I quit the application.  Worse, I get a window (screenshot attached) saying that I have no more space for running applications on my startup disk, eve

  • FCC with javapping

    > I want to Know What is the structure of source data type You can use dummy values for the source data type. Just enter one node with any name you like. > and How to configure sender comm. channel Like you are doing it always, but of cause, no conve

  • Adding a new layer at the beginning

    I have created a flash file with 5 pictures, i wish to add a additional picture at the beginning (not the end) of the time line. Is there an easy way to insert this new image and move all the other images down along the time line so the new immage ap

  • Flash CS5.5 Memory Errors

    Running Flash CS5.5 on the following system: Win7, 64-bit Core i7 12 GB I am experiencing numerous soft crashes and occasional hard crashes associated with claim of "insufficient memory"..."out of memory" etc. Same exact file in my old version of CS3