Skip to Main Content

Oracle Forms

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

OLE2 from Forms 10g to Microsoft Word 2007 Mail Merge

user11188121Aug 19 2009
We have an Oracle Form that allows the user to print off information on the Form to a Microsoft Word document via OLE2 and mail merging; Forms version is 10.1.2.0.2 as it the version of OAS (from Linux Redhat AS4). This currently works fine if the user has Microsoft Word 2000, but since a recent upgrade to Office 2003 and now in some cases 2007, this functionality doesn't work. The JInitiator Console displays the following error messages:

---------------------------------
Oracle JInitiator: Version 1.3.1.22
Using JRE version 1.3.1.22-internal Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\jovinc

Proxy Configuration: Manual Configuration

Proxy: stpproxy:80

Proxy Overrides: 172.27*,172.28*,10*,10.*,intranet.fnfis.com*,ljtcapd05.fnfis.com,ukbiprodlx01,ukbiprodlx01.certegy.com,ukbiprodlx02*,ukbiprodlx02.certegy.com*

JAR cache enabled
Location: C:\Documents and Settings\jovinc\Oracle Jar Cache
Maximum size: 50 MB
Compression level: 0



----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
q: hide console
s: dump system properties
t: dump thread list
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------

Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmall_jinit.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmrwinteg.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/java/frmwebutil.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/java/jacob.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYCommonLive/CommonImages.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYLogonLive/LogonImages.jar from JAR cache

Loading http://ukbiprodlx01.certegy.com:7778/forms/CTYXplorerLive/XplorerImages.jar from JAR cache

proxyHost=null

proxyPort=0

connectMode=HTTP, native.

Forms Applet version is : 10.1.2.0

2009-Aug-19 11:30:43.785 ERROR>WUO-714 [OleFunctions.setExceptionValues()] Unable to get the last OLE Error details; Exception
null

2009-Aug-19 11:30:43.785 ERROR>WUO-707 [OleFunctions.invoke_obj()] Unable to invoke Method: TypeText; Exception
com.jacob.com.ComFailException: A COM exception has been encountered:
At Invoke of: TypeText
Description: Type mismatch.



2009-Aug-19 11:30:44.848 ERROR>WUO-707 [OleFunctions.invoke_obj()] Unable to invoke Method: Execute; Exception
com.jacob.com.ComFailException: Invoke of: Execute
Source: Microsoft Word
Description: This method or property is not available because the document is not a mail merge main document.
---------------------------------------------------------

The below code is used within the Form when they invoke the 'Print' function:

-----------------------
PROCEDURE PR_print_invoice
IS
--
l_t_application CLIENT_OLE2.OBJ_TYPE;
l_t_documents CLIENT_OLE2.OBJ_TYPE;
l_t_source_doc CLIENT_OLE2.OBJ_TYPE;
l_t_letter_doc CLIENT_OLE2.OBJ_TYPE;
l_t_merge_doc CLIENT_OLE2.OBJ_TYPE;
l_t_mail_merge CLIENT_OLE2.OBJ_TYPE;
l_t_selection CLIENT_OLE2.OBJ_TYPE;
l_t_args CLIENT_OLE2.LIST_TYPE;
l_t_args_move_right CLIENT_OLE2.LIST_TYPE;
--
l_v_sourcefile VARCHAR2(2000);
l_v_letter VARCHAR2(2000);
l_v_mergefile VARCHAR2(2000);
l_v_destination_directory VARCHAR2(2000);
l_v_source_directory VARCHAR2(2000);
--
l_n_ok NUMBER;
l_n_tax NUMBER;
l_n_total_value NUMBER;
l_n_total_tax NUMBER;
l_v_country VARCHAR2(3);
l_t_bca_client_address_line1 bill_client_address.bca_client_address_line1%TYPE;
l_t_bca_client_address_line2 bill_client_address.bca_client_address_line2%TYPE;
l_t_bca_client_address_line3 bill_client_address.bca_client_address_line3%TYPE;
l_t_bca_client_address_line4 bill_client_address.bca_client_address_line4%TYPE;
l_t_bca_client_address_line5 bill_client_address.bca_client_address_line5%TYPE;
l_t_bca_client_address_line6 bill_client_address.bca_client_address_line6%TYPE;
l_t_bcl_client_name bill_client.bcl_client_name%TYPE;
l_t_bcl_client_id bill_client.bcl_client_id%TYPE;
l_t_trt_rate tax_rate.trt_rate%TYPE;
l_t_rli_description_1 reference_list.rli_description_1%TYPE;
l_n_item_count NUMBER := 0;
l_b_debug BOOLEAN;
l_b_ok BOOLEAN;
l_n_bookmark NUMBER := 0;
l_n_counter PLS_INTEGER;
--
CURSOR l_cur_client( p_ti_bcl_seq_num IN bill_client.bcl_seq_num%TYPE )
IS
SELECT bcl_client_id
, bcl_client_name
FROM bill_client
WHERE bcl_seq_num = p_ti_bcl_seq_num
;
--
CURSOR l_cur_client_address( p_ti_bcl_seq_num IN bill_client.bcl_seq_num%TYPE )
IS
SELECT bca_client_address_line1
, bca_client_address_line2
, bca_client_address_line3
, bca_client_address_line4
, bca_client_address_line5
, bca_client_address_line6
FROM bill_client_address bca
, role
WHERE bca_bcl_seq_num = p_ti_bcl_seq_num
AND rol_ref_type = 'INVPOINT'
AND rol_bcl_seq_num = p_ti_bcl_seq_num
AND rol_bca_seq_num = bca_seq_num
;
--
CURSOR l_cur_items( p_ti_mih_seq_num IN manual_invoice_header.mih_seq_num%TYPE )
IS
SELECT mil_tco_seq_num
, mil_value
, mil_description
, mil_quantity
, rownum
FROM manual_invoice_line mil
WHERE mil_mih_seq_num = p_ti_mih_seq_num
;
--
CURSOR l_cur_count_items( p_ti_mih_seq_num IN manual_invoice_header.mih_seq_num%TYPE )
IS
SELECT count(*)
FROM manual_invoice_line
WHERE mil_mih_seq_num = p_ti_mih_seq_num
;
--
CURSOR l_cur_tax_rate( p_ti_tco_seq_num IN tax_rate.trt_tco_seq_num%TYPE
, p_ti_mih_invoice_date manual_invoice_header.mih_invoice_date%TYPE )
IS
SELECT trt_rate
FROM tax_rate
WHERE trt_tco_seq_num = p_ti_tco_seq_num
AND p_ti_mih_invoice_date BETWEEN trt_effective_date AND NVL( trt_effective_end_date, p_ti_mih_invoice_date )
;
--
CURSOR l_cur_ref_list( p_ti_rli_code reference_list.rli_code%TYPE )
IS
SELECT rli_description_1
FROM reference_list
WHERE rli_rty_code = 'INTYP'
AND rli_bcy_seq_num = NVL( :GLOBAL.bcy_seq_num, 1 )
AND rli_code = p_ti_rli_code
;
--
CURSOR l_cur_country( p_ti_bcy_seq_num bill_country.bcy_seq_num%TYPE )
IS
SELECT bcy_short_name
FROM bill_country
WHERE bcy_seq_num = p_ti_bcy_seq_num
;
--
PROCEDURE PR_Insert_Cell( p_vi_text IN VARCHAR2 )
IS
l_n_bookmark NUMBER := 0;
BEGIN
--
l_n_bookmark := 1;
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG( l_t_args, p_vi_text );
CLIENT_OLE2.INVOKE( l_t_selection, 'TypeText', l_t_args);
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
--
EXCEPTION
WHEN FORM_TRIGGER_FAILURE
THEN
RAISE;
WHEN OTHERS
THEN
PA_lib_msg.PR_others_exception( 'PA_hci_misc.PR_print_invoice.PR_insert_cell', l_n_bookmark );
END;
--
BEGIN
--
l_n_bookmark := 1;
SYNCHRONIZE;
--
l_n_bookmark := 2;
OPEN l_cur_country( :GLOBAL.bcy_seq_num );
FETCH l_cur_country INTO l_v_country;
CLOSE l_cur_country;
--
-- Determine invoice names and locations and fetch them from the server
l_n_bookmark := 3;
l_v_sourcefile := pa_lib_security.fn_fetch_environment( 'ManualInvoiceSourceFile' );
l_v_letter := pa_lib_security.fn_fetch_environment( l_v_country || 'ManualInvoiceMergeFile' );
l_v_source_directory := pa_lib_security.fn_fetch_environment( 'SourceManualInvoiceDirectory' );
l_v_destination_directory := pa_lib_security.fn_fetch_environment( 'DestinationManualInvoiceDir' );
l_b_debug := ( pa_lib_security.fn_fetch_environment( 'ManualInvoiceDebug' ) = 'Y' );
--
l_b_ok := webutil_file_transfer.as_to_client( l_v_destination_directory||l_v_sourcefile, l_v_source_directory||l_v_sourcefile );
l_b_ok := webutil_file_transfer.as_to_client( l_v_destination_directory||l_v_letter, l_v_source_directory||l_v_letter );
--
l_n_bookmark := 4;
IF ( :SYSTEM.FORM_STATUS = 'CHANGED' )
THEN
l_n_bookmark := 5;
DO_KEY('commit_form');
END IF;
--
l_n_bookmark := 6;
OPEN l_cur_count_items( :blk_manual_inv_header.mih_seq_num );
FETCH l_cur_count_items INTO l_n_item_count;
CLOSE l_cur_count_items;
--
IF ( l_n_item_count = 0 )
THEN
pa_lib_msg.pr_message_alert( 'STB', -119 );
RETURN;
END IF;
--
l_n_bookmark := 7;
SET_APPLICATION_PROPERTY( CURSOR_STYLE, 'BUSY' );
--
-- Start Word
l_n_bookmark := 8;
l_t_application := CLIENT_OLE2.CREATE_OBJ( 'Word.Application' );
l_t_documents := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'Documents' );
--
IF ( l_b_debug )
THEN
CLIENT_OLE2.SET_PROPERTY( l_t_application, 'Visible', 1 );
END IF;
--
-- Open source file
l_n_bookmark := 9;
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG( l_t_args, l_v_destination_directory||l_v_sourcefile );
l_t_source_doc := CLIENT_OLE2.INVOKE_OBJ( l_t_documents, 'Open', l_t_args );
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
--
-- Populate source file with invoice items
l_n_bookmark := 10;
OPEN l_cur_client( :parameter.p_bcl_seq_num );
FETCH l_cur_client INTO l_t_bcl_client_id, l_t_bcl_client_name;
--
IF ( l_cur_client%NOTFOUND )
THEN
CLOSE l_cur_client;
pa_lib_msg.pr_message_alert( 'STB', -121 );
END IF;
CLOSE l_cur_client;
--
l_n_bookmark := 11;
OPEN l_cur_client_address( :parameter.p_bcl_seq_num );
FETCH l_cur_client_address INTO l_t_bca_client_address_line1
, l_t_bca_client_address_line2
, l_t_bca_client_address_line3
, l_t_bca_client_address_line4
, l_t_bca_client_address_line5
, l_t_bca_client_address_line6;
--
IF ( l_cur_client_address%NOTFOUND )
THEN
CLOSE l_cur_client_address;
pa_lib_msg.pr_message_alert( 'STB', -122 );
END IF;
CLOSE l_cur_client_address;
--
l_n_bookmark := 12;
OPEN l_cur_ref_list( :blk_manual_inv_header.mih_invoice_type );
FETCH l_cur_ref_list INTO l_t_rli_description_1;
--
IF ( l_cur_ref_list%NOTFOUND )
THEN
CLOSE l_cur_ref_list;
pa_lib_msg.pr_message_alert( 'STB', -123 );
END IF;
CLOSE l_cur_ref_list;
--
-- Move to first data column
l_n_bookmark := 13;
l_t_selection := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'Selection' );
l_t_args_move_right := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 12 );
CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 1 );
CLIENT_OLE2.ADD_ARG( l_t_args_move_right, 0 );
--
FOR l_n_counter IN 1 .. 19
LOOP
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
END LOOP;
--
l_n_bookmark := 14;
l_n_total_value := 0;
l_n_total_tax := 0;
--
FOR l_r_items IN l_cur_items( :blk_manual_inv_header.mih_seq_num )
LOOP
--
l_n_bookmark := 15;
OPEN l_cur_tax_rate( l_r_items.mil_tco_seq_num, :blk_manual_inv_header.mih_invoice_date );
FETCH l_cur_tax_rate INTO l_t_trt_rate;
--
IF ( l_cur_tax_rate%NOTFOUND )
THEN
CLOSE l_cur_tax_rate;
pa_lib_msg.pr_message_alert( 'STB', -124 );
END IF;
CLOSE l_cur_tax_rate;
--
l_n_tax := ROUND( l_r_items.mil_value * ( l_t_trt_rate / 100 ), 2 );
l_n_total_tax := l_n_total_tax + l_n_tax;
l_n_total_value := l_n_total_value + l_r_items.mil_value;
--
END LOOP;
--
l_n_bookmark := 16;
FOR l_r_items IN l_cur_items( :blk_manual_inv_header.mih_seq_num )
LOOP
--
l_n_bookmark := 17;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_r_items.mil_description );
--
l_n_bookmark := 18;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( TO_CHAR( l_r_items.mil_quantity ) );
--
l_n_bookmark := 19;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( TO_CHAR( l_r_items.mil_value, '99999999.90' ) );
--
l_n_bookmark := 20;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
OPEN l_cur_tax_rate( l_r_items.mil_tco_seq_num, :blk_manual_inv_header.mih_invoice_date );
FETCH l_cur_tax_rate INTO l_t_trt_rate;
IF ( l_cur_tax_rate%NOTFOUND )
THEN
CLOSE l_cur_tax_rate;
pa_lib_msg.pr_message_alert( 'STB', -124 );
END IF;
CLOSE l_cur_tax_rate;
PR_insert_cell( TO_CHAR( l_t_trt_rate ) || '%' );
--
l_n_bookmark := 21;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
l_n_tax := ROUND( l_r_items.mil_value * ( l_t_trt_rate / 100 ), 2 );
PR_insert_cell( TO_CHAR( l_n_tax, '99999999.90' ) );
--
l_n_bookmark := 22;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( TO_CHAR( l_r_items.rownum ) );
--
l_n_bookmark := 23;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( UPPER( l_t_rli_description_1 ) );
--
l_n_bookmark := 24;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bcl_client_name );
--
l_n_bookmark := 25;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line1 );
--
l_n_bookmark := 26;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line2 );
--
l_n_bookmark := 27;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line3 );
--
l_n_bookmark := 28;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line4 );
--
l_n_bookmark := 29;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line5 );
--
l_n_bookmark := 30;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bca_client_address_line6 );
--
l_n_bookmark := 31;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( TO_CHAR( :blk_manual_inv_header.mih_invoice_date, 'DD/MM/YYYY' ) );
--
l_n_bookmark := 32;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
PR_insert_cell( l_t_bcl_client_id );
--
l_n_bookmark := 33;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
IF ( :blk_manual_inv_header.mih_invoice_prefix IS NULL )
THEN
PR_insert_cell( TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '0000000009' ) || '/' ||
TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09') );
ELSE
IF ( NVL( LENGTH( :blk_manual_inv_header.mih_invoice_prefix), 0 ) = 1 )
THEN
PR_insert_cell( :blk_manual_inv_header.mih_invoice_prefix ||
TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '000000009' ) || '/' ||
TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09' ) );
ELSE
PR_insert_cell( :blk_manual_inv_header.mih_invoice_prefix ||
TO_CHAR( :blk_manual_inv_header.mih_invoice_number, '00000009' ) || '/' ||
TO_CHAR( :blk_manual_inv_header.mih_issue_number, '09' ) );
END IF;
END IF;
--
l_n_bookmark := 34;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
IF ( l_r_items.rownum = 1 )
THEN
PR_insert_cell( TO_CHAR( l_n_total_value, '99999999.90') );
END IF;
--
l_n_bookmark := 35;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
IF ( l_r_items.rownum = 1 )
THEN
PR_insert_cell( TO_CHAR( l_n_total_tax, '99999999.90' ) );
END IF;
--
l_n_bookmark := 36;
CLIENT_OLE2.INVOKE( l_t_selection, 'MoveRight', l_t_args_move_right );
IF ( l_r_items.rownum = 1 )
THEN
PR_insert_cell( TO_CHAR( l_n_total_value + l_n_total_tax, '99999999.90' ) );
END IF;
--
END LOOP;
--
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args_move_right );
--
-- Open merge file
l_n_bookmark := 37;
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG( l_t_args, l_v_destination_directory||l_v_letter );
l_t_letter_doc := CLIENT_OLE2.INVOKE_OBJ( l_t_documents, 'Open', l_t_args );
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
--
-- Do mail merge
l_n_bookmark := 38;
l_t_mail_merge := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_letter_doc, 'MailMerge');
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.INVOKE( l_t_mail_merge, 'Execute', l_t_args );
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
--
-- Print
l_n_bookmark := 39;
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
l_t_merge_doc := CLIENT_OLE2.GET_OBJ_PROPERTY( l_t_application, 'ActiveDocument' );
CLIENT_OLE2.ADD_ARG( l_t_args, 0 );
CLIENT_OLE2.INVOKE( l_t_merge_doc, 'PrintOut', l_t_args );
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
--
-- Cleanup
l_n_bookmark := 40;
IF ( NOT( l_b_debug ) )
THEN
--
l_t_args := CLIENT_OLE2.CREATE_ARGLIST;
CLIENT_OLE2.ADD_ARG( l_t_args, 0 );
CLIENT_OLE2.INVOKE( l_t_documents, 'Close', l_t_args );
CLIENT_OLE2.DESTROY_ARGLIST( l_t_args );
CLIENT_OLE2.INVOKE( l_t_application, 'QUIT' );
--
END IF;
--
CLIENT_OLE2.RELEASE_OBJ( l_t_selection );
CLIENT_OLE2.RELEASE_OBJ( l_t_mail_merge );
CLIENT_OLE2.RELEASE_OBJ( l_t_source_doc );
CLIENT_OLE2.RELEASE_OBJ( l_t_letter_doc );
CLIENT_OLE2.RELEASE_OBJ( l_t_merge_doc );
CLIENT_OLE2.RELEASE_OBJ( l_t_documents );
CLIENT_OLE2.RELEASE_OBJ( l_t_application );
--
l_n_bookmark := 41;
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
--
EXCEPTION
--
WHEN FORM_TRIGGER_FAILURE
THEN
SET_APPLICATION_PROPERTY(CURSOR_STYLE,'DEFAULT');
RAISE;
WHEN OTHERS
THEN
PA_lib_msg.PR_others_exception('PA_hci_misc.PR_print_invoice',l_n_bookmark);
--
END;
---------------------------------
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Sep 16 2009
Added on Aug 19 2009
0 comments
3,060 views