Sample PLSQL Code

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 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