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.
AgataThis 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,
KaiHi 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?
AlHello 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.
Scottbefore 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
nullMathan,
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
Johnthanks 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
-
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
-
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