PreparedStatement in batched mode gives Exception

Hi
I have a problem.
I am running PreparedStatement in batched mode, actually I am using Springs BatchSQLUpdate component.
Now i am creating a batch of about 10000 inserts / updates. However if any single of these inserts / updates fails, it gives exception with DataIntegrityViolation, BadSQLGrammer etc.
I am also maintaining a parallel cache of the values that I am using to bind the preparedstatements.
So for statement 1 in the batch, i know what values are being used.
My question is when the batch update fails, how can we identify which SQL statement, i mean which index in the batch caused the issue?
Please help me as I am stuck and need to build some robust exception handling for PreparedStatement batch loads.
Niki

Niki-Nono wrote:
The insertPreparedStatements.get() in my code returns a BatchSqlUpdate object which has already been assigned a statement and also have passed the array of object values to it.
I have done this using batchSqlUpdate.update(objects); where objects is an array of values.
THe code block that I executes the flush(). This throws an exception. In some cases it is a BadSQLGrammerException for cases where we try to insert alphabets in integer columns or in some cases DataIntegrityViolation where the batch has 2 sets of values with same primary key.
The results array is null when i check the value in the catch block.
And the flush() does not proceed with execution of the complete batch in fact it aborts when even 1 statement fails.
I hope it is clearer now.
However, if all the statements go through, I have seen that the results array has correct values as to how many rows were updated / inserted.
Please let me know.OK, I really wasn't sure about what it did on flush, as there's no explicitly stated exception and nothing in the method description. The array will be null since it hasn't been set with the return value from flush since an exception was thrown.
From what I can tell this Spring class uses, under the hood, the batch functionality from JDBC. So the particular exceptions you;re getting will have started life as SQLExceptions...which themselves will be of the BatchSQLException I mention in my first post. I'm wondering if the Spring exceptions contain the SQLException. I would hope so, and I have a vague recollection that the original is wrapped so you should be able to do something along the lines of:
catch (DataAccessException ex)
    SQLException ex = ex.getCause();
    if (ex instanceof java.sql.BatchUpdateException)
        // Get the info from here.
}Now, this is only a concept, and I haven't tested it or anything, but I would hope something along these lines should get you to the data you're after.

Similar Messages

  • How to get back fields from INSERT statement in batch mode(getGeneratedKeys

    Hi,
    I wanted to insert records to database and get back some fields.
    I create prepared statement:
    preparedStatement = connection.prepareStatement(sqlQuery, columnIndexes);
    then I set parameters.
    Following code works properly:
    preparedStatement.executeUpdate();
    generatedKeys = preparedStatement.getGeneratedKeys();
    if (generatedKeys.next()) {
    doSomething();
    But when I try to do this by batch I get exception:
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 22
         at oracle.jdbc.driver.T4CNumberAccessor.unmarshalOneRow(T4CNumberAccessor.java:190)
         at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:612)
         at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:216)
         at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:966)
         at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:10644)
         at org.jetel.component.DBOutputTable.runInBatchMode(DBOutputTable.java:619)
    My "batch" code:
    for(...){
    setParameters(preparedStatement);
    preparedStatement.addBatch();
    preparedStatement.executeBatch();
    Isn't it a bug?
    Can I get back fields (eg. from last insert added to batch)?
    I hope somebody can help me.
    Agata

    This code works for me but only inserting one row. More than one causes an ArrayIndexOutOfBoundsException once sendBatch is called.

  • Download created XML File in batch mode // Parse XML file into single lines

    Hello!
    I upload a CSV file and based on that CSV file I create an XML "object". First I uploaded and downloaded it via gui frontendclass, but as it has to be run in a batch in the night I need to upload and download the data via OPEN DATASET.
    The import and transformation of the CSV file works fine, also the transfer into an itab with the same structure as a CSV line is ok. I also create the XML file, which could be downloaded easily with gui-download but it is not permittet.
    Import of data: I scan the folder and get the filenames into a itab, I loop over that itab and read the single files like this:
         OPEN DATASET ls_convert_batch FOR INPUT IN TEXT MODE ENCODING DEFAULT.
          CLEAR tab.
          IF sy-subrc = 0.
            DO.
              READ DATASET ls_convert_batch INTO line.
              IF sy-subrc <> 0.
                EXIT.
              ELSE.
                CLEAR tmptab.
                SPLIT line AT ';' INTO  tmptab-product
                                        tmptab-contract
                                        tmptab-extagent.
                APPEND tmptab TO tab.
              ENDIF.
            ENDDO.
          ENDIF.
    The XML file has a strucutre like
    <file>
    - <file formant_no="1.1" format_date="02.10.2003">
      <status>V</status>
      <number>001001025</numbner>
      <name>Schmeisser,Christof</name>
    - <details>
    -    <detail>
             <contract>00000003494</contract>
             <name>Schmeisser, Christof</name>
             <invoice_no>000000003840</invoice_no>
             <due_date>20100601</due_date>
             <amount>140,00</amount>
         </detail>
    -    <detail>
             <contract>00000003495</contract>
             <name>Schmeisser, Christof</name>
             <invoice_no>000000003841</invoice_no>
             <due_date>20100601</due_date>
             <amount>130,00</amount>
         </detail>
    - </details>
    <elements>2</elements>
    <amount_overall>270</amount_overall>
    </file>
    At the moment I download it like this:
    CALL METHOD cl_gui_frontend_services=>gui_download
            EXPORTING
              bin_filesize = l_xml_size
              filename     = filename
              filetype     = 'BIN'
    *        CONFIRM_OVERWRITE = '0'
            CHANGING
              data_tab     = l_xml_table
            EXCEPTIONS
              OTHERS       = 24.
          IF sy-subrc <> 0.
            MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
          ELSEIF sy-subrc = 0.
            lv_create_counter = lv_create_counter + 1.
          ENDIF.
    But I need to download it via OPEN TRANSFER CLOSE Dataset as it has to run in batch mode.
    Anyone has an idea? I am really desperate here. One idea would be to parse the single lines into a string and then create the XML file line by line as text and save it with ending XML, should work. But I don't know how!
    Thank you very much in advance,
    kind regards from Tallinn, Estonia,
    Christof!
    Edited by: Christof Schmeisser on Nov 25, 2010 7:51 PM
    I edited the heading, would be too general and missleading!

    Tipos Pools
    TYPE-POOLS: ixml.
    CLASS cl_ixml DEFINITION LOAD.
    TYPES: BEGIN OF xml_node_type,
             node   TYPE char50,
             vlnode TYPE string,
           END OF xml_node_type,
           BEGIN OF xml_line_type,
             data(256) TYPE x,
           END OF xml_line_type.
    Tabelas Internas
    DATA: ti_xml_node        TYPE TABLE OF xml_node_type.
    Variáveis TYPE REF
    *Type REF para utilizar no XML
    DATA: ixml_type             TYPE REF TO if_ixml,
          streamfactory_type    TYPE REF TO if_ixml_stream_factory,
          ostream_type          TYPE REF TO if_ixml_ostream,
          istream_type          TYPE REF TO if_ixml_istream,
          parser_type           TYPE REF TO if_ixml_parser,
          renderer_type         TYPE REF TO if_ixml_renderer,
          document_type         TYPE REF TO if_ixml_document,
          encoding_type         TYPE REF TO if_ixml_encoding,
          node_type             TYPE REF TO if_ixml_node,
          element_dtrans_type   TYPE REF TO if_ixml_element,
          element_xml_in_type   TYPE REF TO if_ixml_element,
          element_roteiros_type TYPE REF TO if_ixml_element,
          element_roteiro_type  TYPE REF TO if_ixml_element,
          element_vias_type     TYPE REF TO if_ixml_element,
          element_via_type      TYPE REF TO if_ixml_element,
          element_dummy_type    TYPE REF TO if_ixml_element,
          gw_xml_node           TYPE TABLE OF xml_node_type,
          gw_xml_node_ret       TYPE TABLE OF xml_node_type,
          gw_xml_node_err       TYPE TABLE OF xml_node_type,
          gw_xml_node_xml       TYPE TABLE OF xml_node_type,
          gw_xml_table          TYPE TABLE OF xml_line_type,
          gw_xml_table2         TYPE TABLE OF xml_line_type,
          gs_xml_node           TYPE xml_node_type,  "WA para leitura do xml
          gs_xml_node_ret       TYPE xml_node_type,  "WA para leitura do xml retorno
          gs_xml_node_err       TYPE xml_node_type,  "WA para leitura do xml erro
          gs_xml_node_xml       TYPE xml_node_type,  "WA para leitura do xml info sucesso
          gs_xml_table2         TYPE xml_line_type.  "WA para importar xml
    Variáveis do Programa
    DATA: l_value              TYPE string,
          l_rc                 TYPE i,
          l_xml_size           TYPE i,
          cod_cartaorepom      TYPE char20 VALUE '123456789',
          v_caminho_exp        TYPE string VALUE 'C:TEMP',
          v_salvaarquivo       TYPE string,
          v_nomearquivo        TYPE string,
          w_nodetext           TYPE string,
          v_roteiros           TYPE string,
          v_roteiro            TYPE string,
          v_roteiro_codigo     TYPE string,
          v_percurso_codigo    TYPE string,
          v_percurso_descricao TYPE string,
          v_cidade_origem      TYPE string,
          v_estado_origem      TYPE string,
          v_cidade_destino     TYPE string,
          v_estado_destino     TYPE string,
          v_transporte_tipo    TYPE string,
          v_cartao_taxa        TYPE string,
          v_cobra_taxa         TYPE string.
    Constants
    CONSTANTS: cc_39         TYPE string VALUE '39', " Numero 39.
               cc_dt_trans   TYPE string VALUE 'data_transfer'," document_type(name)
               cc_metodo_cod TYPE string VALUE 'metodo_codigo'," document_type(name)
               cc_xml_in     TYPE string VALUE 'xml_in'," document_type(name)
               cc_ct_tx_ativ TYPE string VALUE 'cartao_taxa_ativacao'," document_type(name)
               cc_cartao     TYPE string VALUE 'cartao', " Parâmetro Perform.
               cc_xml        TYPE string VALUE '.XML'," extenção
               cc_bin        TYPE char10 VALUE 'BIN'." filetype
    START-OF-SELECTION.
      PERFORM yf_inicia_criacao_xml USING cc_39.
      element_roteiro_type  = document_type->create_simple_element(
                     name   = cc_ct_tx_ativ
                     parent = element_xml_in_type  ).
      PERFORM yf_dummy_roteiro USING cod_cartaorepom cc_cartao.
      PERFORM yf_finaliza_xml.
      PERFORM yf_exporta_xml USING v_caminho_exp.
      PERFORM yf_convert_xml_to_itab TABLES gw_xml_node_ret
                                      USING v_salvaarquivo.
    END-OF-SELECTION.
    *&      Form  yf_inicia_criacao_xml
          text
         -->VALUE(P_0783)  text
    FORM yf_inicia_criacao_xml USING value(p_0783).
      DATA: s_encoding_type TYPE string VALUE 'ISO-8859-1'.
    Cria o ixml factory
      ixml_type = cl_ixml=>create( ).
    *Cria o objeto com modelo
      document_type = ixml_type->create_document( ).
    *Cria o cabeçalho encoding="iso-8859-1"
      encoding_type = ixml_type->create_encoding( byte_order = 0
                        character_set = s_encoding_type ).
    *Cria o root "DATA_TRANSFER"
      element_dtrans_type = document_type->create_simple_element(
                    name  = cc_dt_trans
                  parent  = document_type ).
    *Cria o node "METODO_CODIGO" e preenche com um valor passado no L_VALUE
      l_value = p_0783.
      CONDENSE l_value.
      element_dummy_type = document_type->create_simple_element(
                    name = cc_metodo_cod
                   value = l_value
                  parent = element_dtrans_type ).
    *Cria o node "XML_IN"
      element_xml_in_type   = document_type->create_simple_element(
                  name   = cc_xml_in
                  parent = element_dtrans_type  ).
    ENDFORM.                    " yf_inicia_criacao_xml
    *&      Form  yf_dummy_roteiro
          text
         -->VALUE(P_0996)  text
         -->VALUE(P_0997)  text
    FORM yf_dummy_roteiro USING value(p_0996)
                                value(p_0997).
      l_value  = p_0996.
      CONDENSE l_value.
      element_dummy_type = document_type->create_simple_element(
                    name = p_0997
                   value = l_value
                  parent = element_roteiro_type ).
    ENDFORM.                    " yf_dummy_roteiro
    *&      Form  yf_finaliza_xml
          text
    FORM yf_finaliza_xml.
    *Cria o stream factory
      streamfactory_type = ixml_type->create_stream_factory( ).
    *Conecta a internal table de XML com o stream factory
      ostream_type = streamfactory_type->create_ostream_itable( table = gw_xml_table  ).
      CALL METHOD ostream_type->set_encoding
        EXPORTING
          encoding = encoding_type.
    *Rendering the document
      renderer_type = ixml_type->create_renderer( ostream  = ostream_type
                                            document = document_type ).
      l_rc = renderer_type->render( ).
    *Salva o documento XML
      l_xml_size = ostream_type->get_num_written_raw( ).
    ENDFORM.                    " yf_finaliza_xml
    *&      Form  yf_exporta_xml
          text
         -->VALUE(P_0783)  text
    FORM yf_exporta_xml USING value(p_0783).
      CONCATENATE cod_cartaorepom
                  sy-datum
                  sy-uzeit
                  cc_xml
             INTO v_nomearquivo.
      CONCATENATE p_0783
                  v_nomearquivo
             INTO v_salvaarquivo.
      TRANSLATE v_nomearquivo TO UPPER CASE.
    *Exporta o XML
      CALL METHOD cl_gui_frontend_services=>gui_download
        EXPORTING
          bin_filesize = l_xml_size
          filename     = v_salvaarquivo
          filetype     = cc_bin
        CHANGING
          data_tab     = gw_xml_table
        EXCEPTIONS
          OTHERS       = 24.
      IF sy-subrc = 0.
       PERFORM yf_sapgui_progress_indicator USING cc_msg_xml_ok.
      ELSE.
        MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      ENDIF.
    ENDFORM.                    " yf_exporta_xml
    *&      Form  yf_convert_xml_to_itab
          text
         -->P_GW_XML_NODE_RET  text
         -->P_FILENAME         text
    FORM yf_convert_xml_to_itab  TABLES p_gw_xml_node_ret LIKE gw_xml_node
                                USING  p_filename.
      DATA l_count.
      ixml_type = cl_ixml=>create( ).
    Now Create Stream Factory
      streamfactory_type = ixml_type->create_stream_factory( ).
      CALL METHOD cl_gui_frontend_services=>gui_upload
        EXPORTING
          filename   = p_filename
          filetype   = cc_bin
        IMPORTING
          filelength = l_xml_size
        CHANGING
          data_tab   = gw_xml_table2
        EXCEPTIONS
          OTHERS     = 19.
      IF sy-subrc = 0.
        istream_type = streamfactory_type->create_istream_itable( table = gw_xml_table2
                                                            size  = l_xml_size ).
        document_type = ixml_type->create_document( ).
        parser_type = ixml_type->create_parser( stream_factory = streamfactory_type
                                         istream         = istream_type
                                         document        = document_type ).
        IF parser_type->parse( ) NE 0.
          IF parser_type->num_errors( ) NE 0.
            l_count = parser_type->num_errors( ).
          ENDIF.
        ENDIF.
        CALL METHOD istream_type->close( ).
        CLEAR istream_type.
        node_type = document_type.
        PERFORM yf_get_data USING node_type.
        p_gw_xml_node_ret[] = gw_xml_node[].
        CLEAR gw_xml_node[].
      ENDIF.
    ENDFORM.                    " yf_convert_xml_to_itab
    *&      Form  yf_get_data
          text
         -->VALUE(X_NODE)  text
    FORM yf_get_data    USING value(x_node) TYPE REF TO if_ixml_node.
      DATA: indent      TYPE i.
      DATA: ptext       TYPE REF TO if_ixml_text.
      DATA: string      TYPE string.
      DATA: temp_string(100).
      CASE x_node->get_type( ).
        WHEN if_ixml_node=>co_node_element.
          string = x_node->get_name( ).
          w_nodetext = string.
          CLEAR string.
          string = x_node->get_value( ).
          IF NOT w_nodetext IS INITIAL OR
             NOT string IS INITIAL.
            gs_xml_node-node   = w_nodetext.
            gs_xml_node-vlnode = string.
            IF NOT gs_xml_node-vlnode IS INITIAL.
              APPEND gs_xml_node TO gw_xml_node.
              CLEAR  gs_xml_node.
            ENDIF.
          ENDIF.
      ENDCASE.
    Get the next child
      x_node = x_node->get_first_child( ).
    Recurse
      WHILE NOT x_node IS INITIAL.
        PERFORM yf_get_data USING x_node.
        x_node = x_node->get_next( ).
      ENDWHILE.
    ENDFORM.                    "yf_get_data

  • Help needed in consuming BTQueryAUI query in batch mode

    Hi Friends,
    I am trying to consume BTQueryAUI in a custom function module. I have a requirement where in when i receive a external ref nbr, i need to update the status of crm service request to completed. We have already built logic to store the external nbr info in AET field on Service request and enhance inbox search to take give the results accordingly. now when i try to consume the query service with standard query parameters in batch mode..its not working..
    REPORT  ZTEST_CSOCRM.
    DATA : ob_oref           TYPE REF TO zcl_im_z_badi_inbox_search,
      C_ITEM_1O                TYPE CRMT_AUI_MAP_ITEM_TYPE VALUE 'ONEORDER',
       l_param1o_tab   TYPE crmt_name_value_pair_tab,
       is_name         type standard table of CRMT_NAME_VALUE_PAIR,
       wa_name         like line of is_name,
          l_sort_1o_tab   TYPE crmtt_aui_sorting,
           lv_result_1o  TYPE REF TO cl_crm_bol_entity_col.
    data QUERY_1O type ref to CL_CRM_BOL_QUERY_SERVICE.
    CONSTANTS:
      abap_true      TYPE abap_bool VALUE 'X',
      abap_false     TYPE abap_bool VALUE ' '.
    data: c_BTQueryAUI          TYPE crmt_ext_obj_name
                                        VALUE 'BTQueryAUI',
           c_query1o              TYPE crmt_ext_obj_name VALUE  'BTQueryAUI',
          ob_query                    TYPE REF TO
                                        cl_crm_bol_query_service,
    ob_result                   TYPE REF TO if_bol_bo_col,
    ob_core                     TYPE REF TO cl_crm_bol_core,
             lr_aui_dq        TYPE REF TO cl_crm_aui_advquery_service,
             lr_aui           type ref to cl_crm_aui_query_service.
    wa_name-name = 'ASSIGNEDTYPE'.
    wa_name-value = '0000'.
    append wa_name to is_name.
    wa_name-name = 'DATETYPE'.
    wa_name-value = '0001'.
    append wa_name to is_name.
    wa_name-name = 'MAINCATEGORY'.
    wa_name-value = 'ZBGW'.
    append wa_name to is_name.
    wa_name-name = 'SORTEDBY'.
    wa_name-value = '0000'.
    append wa_name to is_name.
    wa_name-name = 'SORTEDBY2'.
    wa_name-value = '0000'.
    append wa_name to is_name.
    wa_name-name = 'TIMEPERIOD'.
    wa_name-value = '0000'.
    append wa_name to is_name.
    wa_name-name = 'ZZFLD000006'.
    wa_name-value = '0000012345'.
    append wa_name to is_name.
    wa_name-name = 'DESCRIPTON'.
    wa_name-value = '*test*'.
    append wa_name to is_name.
    l_param1o_tab = IS_NAME.
    ob_core = cl_crm_bol_core=>get_instance( ).
            ob_core->start_up( 'ALL' ).
    TRY.
          query_1o  = cl_crm_bol_query_service=>get_instance( c_query1o ).
        CATCH: cx_crm_unsupported_object.
      ENDTRY.
    query_1o->set_query_parameters( EXPORTING it_parameters = l_param1o_tab
                                                  iv_convert    = abap_false  ).
    lv_result_1o ?= query_1o->get_query_result( ).
            ob_query = cl_crm_bol_query_service=>get_instance( c_BTQueryAUI ).
      ob_query->set_query_parameters( EXPORTING it_parameters = l_param1o_tab
                                                  iv_convert    = abap_false  ).
      lv_result_1o ?= ob_query->get_query_result( ).

    Tried obtaining the output using SQL and the result is as follows:
    SQL> WITH T AS
      2  (
      3  SELECT 1 COL1 FROM DUAL
      4  UNION
      5  SELECT 2 COL1 FROM DUAL
      6  UNION
      7  SELECT 3 COL1 FROM DUAL
      8  UNION
      9  SELECT 4 COL1 FROM DUAL
    10  UNION
    11  SELECT 5 COL1 FROM DUAL
    12  UNION
    13  SELECT 8 COL1 FROM DUAL
    14  UNION
    15  SELECT 9 COL1 FROM DUAL
    16  UNION
    17  SELECT 10 COL1 FROM DUAL
    18  UNION
    19  SELECT 13 COL1 FROM DUAL
    20  UNION
    21  SELECT 14 COL1 FROM DUAL
    22  UNION
    23  SELECT 15 COL1 FROM DUAL
    24  UNION
    25  SELECT 16 COL1 FROM DUAL
    26  UNION
    27  SELECT 23 COL1 FROM DUAL
    28  UNION
    29  SELECT 24 COL1 FROM DUAL
    30  )
    31  SELECT OUTPUT FROM
    32  (
    33  SELECT DECODE(COL3,NULL,COL1, COL2)  || '-' || LEAD(DECODE(COL3,NULL,COL3, COL1)) OVER (ORDER BY DECODE(COL3,NULL,COL1, COL2)) OUTPUT  FROM
    34  (
    35  SELECT COL1, LEAD(COL1) OVER (ORDER BY COL1) COL2, LAG(COL1) OVER (ORDER BY COL1) COL3 FROM T
    36  )
    37  WHERE
    38  (COL2 - COL1 > 1 OR COL2 IS NULL OR COL3 IS NULL)
    39  )
    40  WHERE OUTPUT != '-';
    OUTPUT                                                                         
    1-5                                                                            
    8-10                                                                           
    13-16                                                                          
    23-24

  • How to Upload a file in a Batch Mode ?

    Hi, I want to upload a Comma separated value File via RFC to a BW system.
    The scenario is the following: From a Portal server i call the BAPI using JC0/JCA.
    The problem is that GUI_UPLOAD does not support a BATCH job. At least i get a error when calling the BAPI: Exception condition "NO_BATCH" raised. 
    How do i upload a file in a Batch Mode ?
    Thanks,
    Kai

    Hi Kai,
    Sorry for the delay. The delay was in trying to get to talk to the Basis team.
    Here is how we have it.
    On the message server of every instance, there will be a SAP admin id that is '<SID>ADM' or 'SAPSERVER<SID>' where SID is the system ID. We use the '<SID>ADM' user id.
    On the external NT fileserver, there has to be a user id created on the NT box with the same SAP admin id and this id on the NT box should have access rights do Read/Write.
    All of these have to be in the same domain (or different domains that have trust access to each other).
    So, there is basis,network and security groups involved.
    Once these are in place, we can have file access to the external fileserver box.
    We use logical filenames at our place (Transaction FILE).
    This makes all the file transfer locations well organized and manageable.
    Hope that answers your question regarding this.
    Regards,
    -Ramesh

  • Getting a COM error when calling MenuItemExecute in batch mode

    I support an internal document management system for our corporate contracts. Among other applications, I have one that runs nightly in batch mode to store new invoices and connect them via bookmarks to their corresponding “parent” contract files. The original program was created in 2005 with Acrobat 7 (later updated to Acrobat 8) and it worked well for several years. However, a few months ago I upgraded the system to Acrobat 9 and since then the program has not run consistently.
    The “program” actually consists of a VB application and two plug-ins. The VB application does as much work as it can with IAC and the JSO bridge, but because the files are (owner) password protected one plug-in automatically applies the necessary password using AVDocDidOpen when the VB application opens the AVDoc. The VB application then also calls the other plug-in using MenuItemExecute. The second plug-in is used to create the bookmarks between the two files by grabbing info off bookmark strings and creating the necessary actions. It also applies the password to the files.
    Here is brief outline form is how this is all structured:
    pdDocParent.Open
             pdDocInvoice.Open
                     avDocParent.Open (This triggers the first plug-in to apply the password)
                             Create bookmark strings in both files using JSO bridge
                                    MenuItemExecute (To create the bookmark action in the parent)
                                    pdDocParent.Save
                            avDocParent.Close
                            avDocInvoice.Open (This triggers the first plug-in to apply the password)
                                    MenuItemExecute (To create the bookmark action in the invoice)
                                    pdDocInvoice.Save
                            avDocInvoice.Close
                    pdDocInvoice.Close
            pdDocParent.Close
    Since the upgrade, I’m getting a COM error [The server threw an exception. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))] on a non-consistent basis when the application tries to call MenuItemExecute. When I say “non-consistent” I mean that some days the program will process several hundred files just fine. Other days it won’t process any. Then some days it will not process the first, oh, four files but will process the next 300. Usually it runs fine when started interactively, but even then the error sometimes occurs.
    I recompiled both plug-ins and the VB app using the Acrobat 9 SDK (headers for the plug-in and the Acrobat type library for the VB app) but that didn’t make any difference. I added code to check if the MenuItem is available and it is in all cases.
    After reviewing this more, I got to thinking that perhaps a race condition was the culprit—that a string hadn’t been completely written before the second plug-in tried to create an action for it. So I added some half-second pauses along the way, but that doesn’t seem to have helped, either.
    At this point the only thing I can think of is to rewrite the application as a pure plug-in. But it’s a long and involved application and if I can get the current app to work I’d prefer to do that. I tested it with Acrobat 10.1 and encountered similar problems.
    As I said, it’s been working fine up until Acrobat 9. Does anyone know of anything that might have changed with Acrobat 9 that I haven’t considered? Is there anything else I might check? Thanks.

    Leonard,
    I'd be interested in hearing why you think that because others at Adobe have told me it's OK. Acrobat is only being called by one user at a time and we've paid for a full license.
    Thanks,
    Dick

  • Photoshop CS3 Actions Batch mode bug?

    I posted this in the Mac forum but received no responses after a couple of days, so I am trying it here.
    Photoshop CS3 Actions seem to have a bug such that when used in Automate > Batch mode it will use the name of the first file opened in the batch session for every file processed in that session. Since that name is used in Save step, this means having to deal with the "File Already Exist" dialog for every file in the batch because it is attempting to save at the designated location with the same file name. If the continue option is chosen each time, the final result is one file with the first opened file name, but with the contents of the last processed file.
    To confirm that this is a problem particular to the opening step, I have disabled all processing steps as well as the saving step by toggling them in the Actions panel. I then ran the action in batch mode on a folder containing 4 files. This resulted in 4 opened files all with the same name but different image content.
    This was with the "Override 'Open' Action Commands" checked/not checked, and the "Suppress File Open Options Dialogs"  checked/not checked. The  problem described also occurs when using a Droplet.
    By comparison, Photoshop CS exhibits the expected behavior: when an action is used in batch mode to process an entire folder of files, the name of each file is retained after opening and used after processing in the save or export step.
    The above described behavior of CS3 is a change acquired along the way to the CS3 version (I do not have the CS2 version to test). But more importantly, can someone please report if the CS4 version behaves as I described for CS3, or if it has been returned to the CS behavior?
    OS X 10.4.11
    G4 800 MHz 2 MB L3/processor 1.25 GB SDRAM
    Is this a known bug?
    Al

    Hello Miguel,
    I was going to come back to post some of my findings, one of which relates to your staement:
    "- The open command created by Photoshop 6 doesn't keep the file's name, it is a much simple open command, and so it opens the file with the own file's name."
    In my case I found that my CS version of the "same" action worked, while the  CS3 version failed, precisely because the earlier one records less detail for the open step.
    My need is to convert dozens of Quark pdf files to GIF and JPEG files for the web. What I found after several days of testing is that it is best to record the opening step in CS3 NOT using a pdf file, so that the "Open As Generic Pdf with 'Name____' " would not be coded into the opening step. Instead I recorded the whole action using a PSD file. Then I can proceed to run it in Batch mode choosing a folder of Quark pdf files as the source location with "Override 'Open' Action Commands" checked, and the "Suppress File Open Options Dialogs"  checked, and it opens all the pdf files just fine in some background process, not getting stuck in the details of the file name, and proceeds to cary out the flattening, saving, and closing steps to my chosen target location and uses the finder file name of each pdf files in the source folder to save a filename.ext in the Target folder.
    Contrary to what I stated in my original post, "Override 'Open' Action Commands" checked/not checked does indeed make a difference. If it is not checked, the files do open in batch mode, but the other steps are not performed. There is much more about this that I would like to know, and this may not be a general solution for all types of files that a user may wish to process in batch mode, but it works for my case. The main trick is to use as simple an opening step as possible when recording the action, and then letting Photoshop use whatever background process it requires to open a particular file type. I tested this by manually saving a pdf file to each of the twenty some odd formats available in the save as dialog to a Source folder, and then proceeded to batch process that folder with the action described above, and it worked for all except one.
    So while there may not be a bug involved in this problem, there certainly is a lack of documentation about how the "improvements" in the opening step in newer versions of Photoshop affect using Actions in Batch mode.
    Please comment if you can further explain any of the reported results. In particular, what is the situation in CS4?
    Thanks,
    Al

  • RE: Reporting after many forte tasks run in batch mode?

    Actually, if you're looking for MAKEAPPDISTRIB (I assume that's how you
    create distributable) you can see if the command was succesfull or not.
    <<deployrep.js>> This Jscript will look for this string and it will
    generate a report based on the next line in the log file.
    The script assumes you have an environment variable (DESCARTES_ROOT) that
    points to a folder (let's say "D:\TEST"). Under that folder you have a log
    folder ("d:\test\log") which holds the deploy.log log file. You can easily
    change the script to reflect your systems settings.
    The generated report looks like that : <<deployrep.txt>>
    Norocel Popa
    Forte SysEng
    (519)746-8110 x 2292
    -----Original Message-----
    From: [email protected] [mailto:[email protected]]
    Sent: Tuesday, March 16, 1999 11:58 AM
    To: Forte-Users (Adresse de messagerie)
    Subject: Reporting after many forte tasks run in batch mode ?
    Hi,
    I would like to know if overnight builds went okay, and therefore need to
    parse the log(s).
    The issue is that I don't have a proper string to look for (i.e. for
    grep).
    If I consider 'ERROR", then the following message won't be understandable.
    There might a way to cheat with the indentation (i.e. the lines with only
    two first blank chars)..
    Has anyone experimented such a need ?
    J-Paul Gabrielli
    DTS
    SYSTEM ERROR: Service object MySuperApplicationServer.MySuperMgrSO has
    not been partitioned. Therefore, you cannot move it to an existing
    partition.
    Class: qqsp_UsageException
    Error #: [1602, 606]
    Detected at: qqcf_StandardConfig::MoveServiceObject at 3
    Error Time: Tue Mar 16 17:39:26
    Exception occurred (locally) on partition "Fscript_cl9_Client",
    (partitionId = B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1,
    taskId =
    [B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1.1]) in application
    "fscript", pid 22713 on node rambo in environment SuperEnv.

    Hi,
    To trap error message from Forte log, I usually do this
    egrep '(EXCEPTION|Exception|exception|ERROR|Error|error)' filename
    This takes a regular expression to 'egrep' all occurrences of "exception" or
    "error" not matter they are in upper case or lower case.
    Hope this help.
    Regards,
    Peter Sham.
    -----Original Message-----
    From: [email protected] [SMTP:[email protected]]
    Sent: Wednesday, March 17, 1999 12:58 AM
    To: Forte-Users (Adresse de messagerie)
    Subject: Reporting after many forte tasks run in
    batch mode ?
    Hi,
    I would like to know if overnight builds went okay, and
    therefore need to parse the log(s).
    The issue is that I don't have a proper string to look for
    (i.e. for grep).
    If I consider 'ERROR", then the following message won't be
    understandable.
    There might a way to cheat with the indentation (i.e. the
    lines with only two first blank chars)..
    Has anyone experimented such a need ?
    J-Paul Gabrielli
    DTS
    SYSTEM ERROR: Service object
    MySuperApplicationServer.MySuperMgrSO has
    not been partitioned. Therefore, you cannot move it to an
    existing partition.
    Class: qqsp_UsageException
    Error #: [1602, 606]
    Detected at: qqcf_StandardConfig::MoveServiceObject at 3
    Error Time: Tue Mar 16 17:39:26
    Exception occurred (locally) on partition
    "Fscript_cl9_Client",
    (partitionId =
    B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1, taskId =
    [B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1.1]) in
    application
    "fscript", pid 22713 on node rambo in environment
    SuperEnv.
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:<a href=
    "http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>

  • Multiple ALV reports not working in batch mode

    All,
    I have a report that creates a detail and a summary ALV report in one program.
    When run in the foreground it works great  - runs the ALV detail first and displays it and you arrow back and then the runs the ALV summary report and displays it.
    But when run in the background - I get the ALV detail report sent to the spooler but nothing for the ALV summary report.  Well I do get a second report sent to the spooler but it does not have any data displayed.
    I ran this in debug mode - faking out the program to believe it was in Batch Mode.
    Everything appears to look correct when it does the call to ALV - the outtab table has the summary data in it.
    Here is the calls to ALV:
    Function Module to display report in ALV List Format
      IF l_detail = 'X'.
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            i_callback_program      = l_repid
            i_callback_user_command = c_ucomm
            i_grid_title            = p_title
            i_grid_settings         = w_alv_grid
            is_layout               = w_alv_layout
            it_fieldcat             = w_alv_field
            it_sort                 = w_alv_sort
            i_default               = 'X'
            i_save                  = ' '
            it_events               = w_alv_event
            is_print                = w_alv_print
          TABLES
            t_outtab                = t_detail
          EXCEPTIONS
            program_error           = 1
            OTHERS                  = 2.
      ELSEIF l_summry = 'X'.
    be sure th file has the new SNO values assigned B4 calling!
        CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
          EXPORTING
            i_callback_program      = l_repid
            i_callback_user_command = c_ucomm
            i_grid_title            = p_title
            i_grid_settings         = w_alv_grid
            is_layout               = w_alv_layout
            it_fieldcat             = w_alv_field
            it_sort                 = w_alv_sort
            i_default               = 'X'
            i_save                  = ' '
            it_events               = w_alv_event
            is_print                = w_alv_print
          TABLES
            t_outtab                = t_summry
          EXCEPTIONS
            program_error           = 1
            OTHERS                  = 2.
      ENDIF.
    Maybe there something I should be calling or clearing out in the above parms when trying to create to spoolfiles from ALV in background mode.
    Any suggestions are most apprecaited.
    Thanks.
    Scott

    before calling the ALV create a separate spool for each list.
    if sy-batch = 'X'.
    get the print parameters with FM GET_PRINT_RARAMETERS
    pass the parameters (you can change them if you like) to
    NEW-PAGE PRINT ON PARAMETERS your_parameters NO DIALOG
    endif.

  • How to add print buttons in teststand batch mode

    Does anyone know how to add "print test report" buttons to the final test status dialog box in TestStand batch mode?. It would be nice to have a print button for each DUT and also a "print all" button to print all of the reports for the batch.

    Hi Hollister,
    I found this example program titled "Programmatic Printing of TestStand Reports - Modular". It should give you some of the functionality you need while giving you a good springboard to customize it for your specifications.
    Cheers,
    KyleP
    Applications Engineer
    National Instruments

  • Running Reports 6 files in Batch mode in Portal 3.0

    Hai,
    I want to run reports 6 files from webdb. I want to give input parameter values to the reports and then shedul them to run in batch mode. I would be grateful if u explain me the steps in detail.
    Thanks,
    Mathan
    null

    Mathan,
    Actually the Reports forum may be able to help you a little more than this forum can at this point.
    Sue

  • HR_INFOTYPE_OPERATION - Running in Batch Mode

    I have an ABAP which reads data from a flat file into an internal table and then loops through this internal table and updates HR Infotype 15 records via the HR_INFOTYPE_OPERATION function.  In my program I give the user the option of running it in a "Test/no comitt" mode so they can verify the data in their data file and then they can run it in an "Update/Commit" mode.
    The program itself works great as long as I run it on-line.  I catch any errors and report them back to the user before the run it in "Update" mode.  This way if their is a problem with any of the data in the data file then they are made aware of this.  HOWEVER, if I run this same program in Batch mode it abends if their are any problems at all with any of the records in the data file (ie., employee doesn't exist or whatever).  The program just stops and does not give any error message and just indicates that is has Finished by it really hasn't.  I can't find anything in OSS notes around this. The program runs fine in Batch as long as the data file is clean and o.k.
    Has anyone else had this problem or have any ideas?

    Hi Janice
    For what its worth, I know its already too late for a reply to this problem, but documenting it so others can see.
    We had a number of issues updating infotypes 14 & 15 using HR_INFOTYPE_OPERATION. It works great for 14 but works sporadically when used in conjunction with a BDC logic. Function does not work that well for IT15 together with BDC. The key here is that the BDC logic was used in conjunction to calling the function. We had such a requirement.
    Anyway, I debugged the standard code, found some internal buffer clearing modules and used them as well, but that didn't work either. Finally we ended up using just the BDC, without the FM for lack of time and that is working great.
    I wanted to put this for the benefit of others who use it. Depending on how you use it, this FM does have some strange problems such as - not returning any error when it failed, performance problems with huge data loads etc.
    Thanks,
    Anand

  • Reporting after many forte tasks run in batch mode ?

     

    Hi,
    To trap error message from Forte log, I usually do this
    egrep '(EXCEPTION|Exception|exception|ERROR|Error|error)' filename
    This takes a regular expression to 'egrep' all occurrences of "exception" or
    "error" not matter they are in upper case or lower case.
    Hope this help.
    Regards,
    Peter Sham.
    -----Original Message-----
    From: [email protected] [SMTP:[email protected]]
    Sent: Wednesday, March 17, 1999 12:58 AM
    To: Forte-Users (Adresse de messagerie)
    Subject: Reporting after many forte tasks run in
    batch mode ?
    Hi,
    I would like to know if overnight builds went okay, and
    therefore need to parse the log(s).
    The issue is that I don't have a proper string to look for
    (i.e. for grep).
    If I consider 'ERROR", then the following message won't be
    understandable.
    There might a way to cheat with the indentation (i.e. the
    lines with only two first blank chars)..
    Has anyone experimented such a need ?
    J-Paul Gabrielli
    DTS
    SYSTEM ERROR: Service object
    MySuperApplicationServer.MySuperMgrSO has
    not been partitioned. Therefore, you cannot move it to an
    existing partition.
    Class: qqsp_UsageException
    Error #: [1602, 606]
    Detected at: qqcf_StandardConfig::MoveServiceObject at 3
    Error Time: Tue Mar 16 17:39:26
    Exception occurred (locally) on partition
    "Fscript_cl9_Client",
    (partitionId =
    B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1, taskId =
    [B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1.1]) in
    application
    "fscript", pid 22713 on node rambo in environment
    SuperEnv.
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:<a href=
    "http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>

  • Validataion does not work in batch mode

    Hello community,
    We created an FI line item validation for transaction FBV1 that does a validation on a field and displays an error message if the validation fails. We have an RFC that uploads data from an Excel template and runs a BDC Call Transaction to upload and park the document. This worked well when we were on 4.6C but when we upgraded to ECC6.0, the Validation works fine when we manually call the FBV1 in SAP and the Validation DOES get triggered and displays a message if the line item validation fails but when we run FBV1 in batch mode, (RFC which contains a call transaction to FBV1) the validation does not work.
    I set up break a point in the generated program GBTBOFID where the exception error gets triggered and traced the FI Validation. The program will not display the error Validation message when run in batch but when run online, the error message gets triggered.

    Thanks for the prompt reply. I tryied a combination of the following options and did not have much luck with this one.
    Data: x_options type ctu_params.
         clear X_OPTIONS.
         X_OPTIONS-DISMODE = 'A'.
         X_OPTIONS-UPDMODE = 'S'.
         X_OPTIONS-CATTMODE = ' '.
         X_OPTIONS-DEFSIZE = ' '.
         X_OPTIONS-RACOMMIT = ' '.
         X_OPTIONS-NOBINPT = ' '.
         X_OPTIONS-NOBIEND = 'X'.
    CALL TRANSACTION 'FBV1' USING bdcdata options from X_OPTIONS
    After the call transaction the program automatically triggers some SAP generated code for a Validation check for FBV1 line item that we have put in through IMG. The message that should be displayed is in the FI validation check of FBV1.
    I put a break point in the SAP generated code for the Validation where the message should be displayed. The program executes the statement that should raise the exception and display the message. As soon as the statement is executed, conrol returns to the the the SAP transaction FBV1 program and the program continues to finish.
    The statement that executes and does not display the error message is:
    CASE valsevere.
            WHEN  'A'.
              MESSAGE ID msg_id    TYPE valsevere   NUMBER msg_nr
                      WITH msgv1 msgv2 msgv3 msgv4
                      RAISING abend_message.
            WHEN  'E'.    <=== *This option is true and the progam steps
                        " through the following message but does not display it.*
              MESSAGE ID msg_id    TYPE valsevere   NUMBER msg_nr
                      WITH msgv1 msgv2 msgv3 msgv4
                      RAISING errormessage.
            WHEN  OTHERS.
              MESSAGE ID msg_id    TYPE valsevere   NUMBER msg_nr
                      WITH msgv1 msgv2 msgv3 msgv4.
          ENDCASE.
    I should mention that in debug mode, I check the values of msg_id, msg_nr, msgv1 etc. and they all have values of a message class that we have created.
    The above code is in a SAP generated program for FI Validation (GBTBOFI0, include FGBB100R).
    -- We only have this issue when we use the FBV1 transaction in batch mode. Runing FBV1 directly online works fine.
    -- The issue is unique to ECC 6.0 environemnt. We did not have this problem in 4.6C
    Suggestions greatly appreciated.
    Edited by: Rob Burbank on Jan 20, 2010 12:15 PM

  • Batch mode & ClassCastException question

    Hi
    I'm using JDev 10.1.2.1 (1913) and have a problem with a JClient app using batch mode.
    The issue started when I decided to use ranges on my JTable. In sync=Immediate mode the JTable would render with data equaling the number of records requested from my VO plus empty rows (my NextSet and PrevousSet operation buttons made sets appear and disappear in existing rows of the table). For example, picture a table with 100 records and a VO tuned to request in batches of 10. My JTable would render with 10 rows displayed and 90 empty rows. When I click NextSet, the first 10 rows go blank and the next 10 appear. Obviously this is not desired behavior.
    Ok, so I decided to try "Batch" mode which cause the jTable to operate correctly but it causes ClassCastException errors when calling custom VO methods. Since I make sure to cast to interfaces and not implementations (per Steve's article: http://www.oracle.com/technology/products/jdev/tips/muench/batchmode/index.html) I don't understand why I'm getting these.
    Here's a test case to demonstrate:
    1) New Project - Connection: SCOTT
    2) Create EmpVO - Select * from EMP
    3) Tune EmpVO - Batches of 5, as needed; Fill Last Page unchecked
    4) Edit EmpVO class. Create custom method
    public String toString()
    return "Custom method: " + getClass().toString();
    5) Shuttle method to selected for Client Interface (interface EmpVO generated and automatically implemented by EmpVOImpl)
    6) Create EmpAppMod - Assign EmpVO
    7) Create runnable Panel from VO (Swing/JClient for ADF; template=Table)
    8) Modify panel by adding new panel (Constraints = SOUTH) and dragging "NextSet" and "PreviousSet" Operations from the EmpVO1 data control onto new panel as buttons
    9) Under the panel's UIModel you'll see two iterators for the same VO (one for the jTable and one for the buttons). Check the range sizes, the table iterator should be set to -1 and the button iterator to 5 (matches the VO's batch retrieve section).
    10) Edit panel code and add a call to the custom VO method in main():
    System.out.println(((EmpVO)panel.getPanelBinding().findIterBinding("EmpVO1Iter").getViewObject()).toString());
    11) Set Sync=Immediate for the AppMod DC in DataBindings.cpx
    12) Run panel
    Hopefully you'll see the blank row behavior described above and the custom toString() result printed to the console.
    Again, if batch mode works I don't care about this jTable problem.
    Now set Sync=Batch and re-run the panel. In my version the jTable works as expected but I get the ClassCastException...even though I'm casting to the EmpVO interface. In my real application this means I can't call any of my custom VO methods.
    Exception:
    Exception in thread main
    java.lang.ClassCastException: oracle.jbo.common.ws.WSViewObjectImpl
         at mypackage9.PanelEmpVO1.main(PanelEmpVO1.java:95)
    If anyone has a suggestion on how to make this work (in either sync mode) pls let me know.
    thanks
    John

    thanks but I don't understand. I thought I was using the client interface. The call to oracle.jbo.common.ws.WSViewObjectImpl is not being done by me.
    I found another thread (Re: ClassCastException: WSViewObjectImpl where Steve M. says do access the VO interface in batch mode like so:
    ApplicationModule am = (ApplicationModule) actionContext.getBindingContext().findDataControl("YourDataControlName").getDataProvider();
    YourCustomViewObject vo = (YourCustomViewObject) am.findViewObject("view1");
    I'm using a JClient panel to call the custom method so my code is:
    ApplicationModule am = (ApplicationModule)panel.getPanelBinding().getBindingContext().findDataControl("EmpAMDataControl1").getDataProvider();
    EmpVO ep = (EmpVO)am.findViewObject("EmpVO1");
    ep.toString();
    Both the default ApplicationModule and custom EmpVO are interfaces but I still get the ClassCastException
    I don't know if this helps, but if I create a method in my AppMod that calls the custom VO method I don't get the error....but that can't be right - I shouldn't have to create AppMod methods for all custom VO methods. Obviously I missing something fundamental

Maybe you are looking for

  • Dbtab Getting Cleared

    Hi All   I am using one Y table for generation of numbers. This table stores the last no generated for a particular combination. But anyhow this table is getting reset and am unable to find the cause. When i wnt through the coding, i found it ok. Fir

  • Do we need to setup traditional ABAP Transport Management System on XI?

    I was confused that do we need to setup ABAP transport Management System on XI, since the IR and ID object will use CMS or File to transport between DEV->QAS->PRD. If we still need, could you pls let me know why we need it? one more question is: if w

  • Continue playing transisition from state1 to state2 after being in state3.

    OK, I don´t know entirely how to explain this, but I´l give it a shot. I am making an animation with a video. The first thing you will see is a playbutton. When you push it the video starts, and you transit from state1 to state2. Since I have downloa

  • CS3 script compatibility

    Hi, My company has a large investment in CS3.  We have .Net application that uses InDesign scripts.  If we upgrade to the latest version if InDesign, will our scripts break? Thank you, Steve

  • Finders in the deployment tool

    Hi! I'm trying to figure out how to write custom finders in the deployment tool. But I've run into two problems: 1. Can I define my own PrimaryKey class that I use to identify the bean and how do I configure it in the deployment tool? - e.g. findByPr