0% found this document useful (0 votes)
89 views

Sample PLSQL Code

The document describes a procedure that inserts extension attributes into a table. It defines record types for the extension attributes and errors. The procedure loops through transactions, lines, taxes, generating extension attributes for each. It calls the insert procedure, handles errors, and returns any error records.

Uploaded by

mohd farhan
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
89 views

Sample PLSQL Code

The document describes a procedure that inserts extension attributes into a table. It defines record types for the extension attributes and errors. The procedure loops through transactions, lines, taxes, generating extension attributes for each. It calls the insert procedure, handles errors, and returns any error records.

Uploaded by

mohd farhan
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 5

Signature of the API is as follows:

PROCEDURE insert_ar_extension_attributes(extension_attr_tbl IN
ARP_UTIL.EXTENSION_ATTR_TBL_TYPE,
x_msg_count OUT NOCOPY
NUMBER,
x_msg_data OUT NOCOPY
VARCHAR2,
x_return_status OUT NOCOPY
VARCHAR2);

In this case EXTENSION_ATTR_TBL_TYPE is a PL/SQL table of


EXTENSION_ATTRIBUTE_RECORD record type, and definition of
EXTENSION_ATTRIBUTE_RECORD record type is as given below:

TYPE EXTENSION_ATTRIBUTE_RECORD IS RECORD


(EXTN_ENTITY_ID AR_EXTENSION_ATTRIBUTES.EXTN_ENTITY_ID%type,
ASSOCIATED_EXTN_ENTITY_ID1
AR_EXTENSION_ATTRIBUTES.ASSOCIATED_EXTN_ENTITY_ID1%type,
ASSOCIATED_EXTN_ENTITY_ID2
AR_EXTENSION_ATTRIBUTES.ASSOCIATED_EXTN_ENTITY_ID2%type,
ENTITY_TYPE_CODE AR_EXTENSION_ATTRIBUTES.ENTITY_TYPE_CODE%type,
PROCESS_TYPE_CODE AR_EXTENSION_ATTRIBUTES.PROCESS_TYPE_CODE%type,
ATTRIBUTE_NAME AR_EXTENSION_ATTRIBUTES.ATTRIBUTE_NAME%type,
ATTRIBUTE_VALUE AR_EXTENSION_ATTRIBUTES.ATTRIBUTE_VALUE%type
);

Sample Code that could be used in the query is given below for easy
reference:

DECLARE

cursor trx_cursor is (select trx.customer_trx_id, trx.trx_number


from ar_document_transfers adt, ra_customer_trx_all trx where
adt.source_id=trx.customer_trx_id and
(trx.ready_for_xml_delivery_flag is null or
trx.ready_for_xml_delivery_flag!='Y') and
adt.request_id=:request_id);

l_return_status VARCHAR2(30);
l_msg_count NUMBER;
l_msg_data VARCHAR2(2000);
msg_rec FND_MESSAGE.MSG_REC_TYPE;
err_count number:=0;

ext_attr_err ARP_UTIL.EXT_ATTR_ERROR_RECORD;
ext_attr_err_tbl ARP_UTIL.EXT_ATTR_ERROR_TBL_TYPE;

TYPE refcursor IS REF CURSOR;


xdo_cursor refcursor;

extension_attr_rec ARP_UTIL.EXTENSION_ATTRIBUTE_RECORD;
extension_attr_tbl ARP_UTIL.EXTENSION_ATTR_TBL_TYPE;
ext_attr_count number:=0;

BEGIN

ext_attr_err_tbl := ARP_UTIL.EXT_ATTR_ERROR_TBL_TYPE();

FOR trx IN trx_cursor LOOP

extension_attr_tbl:=ARP_UTIL.extension_attr_tbl_TYPE();

FOR m in 1..20 LOOP


ext_attr_count:=ext_attr_count+1;
extension_attr_rec.EXTN_ENTITY_ID:=trx.customer_trx_id;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID1:=null;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID2:=null;
extension_attr_rec.ENTITY_TYPE_CODE:='INVHEADER';
extension_attr_rec.PROCESS_TYPE_CODE:='XML';
extension_attr_rec.ATTRIBUTE_NAME:='Ext_atrr_'||to_char(m);
extension_attr_rec.ATTRIBUTE_VALUE:='Ext_attr_val_'||to_char(m);
extension_attr_tbl.extend;
extension_attr_tbl(ext_attr_count):=extension_attr_rec;
END LOOP;

declare

cursor line_cursor is (select customer_trx_line_id from


ra_customer_trx_lines_all where customer_trx_id=trx.customer_trx_id
and line_type='LINE');
l_cust_trx_line_id
ra_customer_trx_lines_all.customer_trx_line_id%type;
begin

open line_cursor;
loop
fetch line_cursor into l_cust_trx_line_id;
exit when line_cursor%NOTFOUND;

FOR k in 1..20 LOOP


ext_attr_count:=ext_attr_count+1;
extension_attr_rec.EXTN_ENTITY_ID:=l_cust_trx_line_id;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID1:=trx.customer_trx_id;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID2:=null;
extension_attr_rec.ENTITY_TYPE_CODE:='INVLINE';
extension_attr_rec.PROCESS_TYPE_CODE:='XML';
extension_attr_rec.ATTRIBUTE_NAME:=to_char(l_cust_trx_line_id)||'_LI
NE_ATTR_'||to_char(k);
extension_attr_rec.ATTRIBUTE_VALUE:=to_char(l_cust_trx_line_id)||'_L
INE_ATTR_'||to_char(k);

extension_attr_tbl.extend;
extension_attr_tbl(ext_attr_count):=extension_attr_rec;

END LOOP;

declare
cursor tax_cursor is (select customer_trx_line_id from
ra_customer_trx_lines_all where customer_trx_id=trx.customer_trx_id
and LINK_TO_CUST_TRX_LINE_ID=l_cust_trx_line_id and
line_type='TAX');
l_cust_trx_tax_line_id
ra_customer_trx_lines_all.customer_trx_line_id%type;
begin

open tax_cursor;
loop
fetch tax_cursor into l_cust_trx_tax_line_id;
exit when tax_cursor%NOTFOUND;

FOR i in 1..20 LOOP


ext_attr_count:=ext_attr_count+1;
extension_attr_rec.EXTN_ENTITY_ID:=l_cust_trx_tax_line_id;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID1:=l_cust_trx_line_id;
extension_attr_rec.ASSOCIATED_EXTN_ENTITY_ID2:=null;
extension_attr_rec.ENTITY_TYPE_CODE:='INVTAX';
extension_attr_rec.PROCESS_TYPE_CODE:='XML';
extension_attr_rec.ATTRIBUTE_NAME:=to_char(l_cust_trx_tax_line_id)||
'_TAX_ATTR_'||to_char(i);
extension_attr_rec.ATTRIBUTE_VALUE:=to_char(l_cust_trx_tax_line_id)|
|'_TAX_ATTR_'||to_char(i);

extension_attr_tbl.extend;
extension_attr_tbl(ext_attr_count):=extension_attr_rec;

end LOOP;
end loop;
close tax_cursor;

end;

end loop;

close line_cursor;
end;
ARP_UTIL.insert_ar_extension_attributes(extension_attr_tbl,x_msg_cou
nt => l_msg_count,
x_msg_data => l_msg_data,
x_return_status => l_return_status);

IF l_return_status = fnd_api.g_ret_sts_error OR
l_return_status = fnd_api.g_ret_sts_unexp_error THEN

FOR i in 1 .. l_msg_count LOOP

fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_true, l_msg_data,


l_msg_count);

FND_MESSAGE.SET_ENCODED (l_msg_data);
msg_rec:=FND_MESSAGE.GET_MESSAGE_RECORD;

ext_attr_err_tbl.extend;
err_count:=err_count+1;
ext_attr_err.TRX_NUMBER:=trx.trx_number;
ext_attr_err.ERROR_MESSAGE:=msg_rec.user_message;
ext_attr_err_tbl(err_count):=ext_attr_err;

fnd_msg_pub.Delete_Msg(1);
END LOOP;

fnd_msg_pub.Delete_Msg;

END IF;

l_return_status:='';
ext_attr_count:=0;

arp_util.update_ready_for_xml_flag( trx.customer_trx_id,'Y',l_msg_co
unt,l_msg_data,l_return_status);

IF l_return_status = fnd_api.g_ret_sts_error OR
l_return_status = fnd_api.g_ret_sts_unexp_error THEN

FOR i in 1 .. l_msg_count LOOP

fnd_msg_pub.get(fnd_msg_pub.g_first, fnd_api.g_true, l_msg_data,


l_msg_count);

FND_MESSAGE.SET_ENCODED (l_msg_data);
msg_rec:=FND_MESSAGE.GET_MESSAGE_RECORD;

ext_attr_err_tbl.extend;
err_count:=err_count+1;
ext_attr_err.TRX_NUMBER:=trx.trx_number;
ext_attr_err.ERROR_MESSAGE:=msg_rec.user_message;
ext_attr_err_tbl(err_count):=ext_attr_err;

fnd_msg_pub.Delete_Msg(1);
END LOOP;

fnd_msg_pub.Delete_Msg;

END IF;

end loop;

OPEN :xdo_cursor FOR


select t.TRX_NUMBER, t.ERROR_MESSAGE from
TABLE(ext_attr_err_tbl) t;
commit;

END;

You might also like