Oracle Apps - Updating Price List Lines - API Approach
Oracle Apps - Updating Price List Lines - API Approach
Report Abuse
Next Blog
Create Blog
Sign In
Oracle Apps
Disclaimer :- ---------------------------------------------------- Opinions expressed in this blog are entirely my own and do not reflect the position of my employer, Oracle or any other corporation. I'm NOT responsible for any damages in whatever form caused by the usage of the content of this blog. I created this Blog to share my knowledge, especially with Oracle Application ERP...
Search
pow er ed by
Members (4)
Process Followed :- First e nd date all the line s in Q P_LIST_LINES which falls unde r above conditions and the n inse rt ne w re cords in Q P_LIST_LINES.
BLOG ARCHIVE
2011 (4) May (2) January (2) Concurrent Program Information Updating Price List Lines - API Approach
Steps Followed :1. C re ate a staging table to store Ite m _Id, Ne w Unit_Price , Transaction_ID, Status and Errror_Me ssage . 2. C re ate d a synonym , se que nce , trigge r and inde x on staging table . 3. Validate d Ite m s Ids give n (For Duplicate R e cords, Null R e cords and e x iste nce of ite m ids) in the data file ). 4. Se nd List_He ade r_Id, List_Line _Id, Pricing_Attribute _Id and fie ld that has to be update d (In this e x am ple , e nd_date _active ) and ope ration should be qp_globals.g_opr_update.
ABOUT ME
================================================================ =========== Staging Table , Synonym, Sequence, Trigger Creation SET serverout on size 1000000 CL SCR; PROMPT +------------------------------------------------------------------------+ PROMPT Execution of script starts PROMPT +------------------------------------------------------------------------+ --drop table lss_unit_price_stg; CREATE TABLE lss_unit_price_stg( transaction_id_stg NUMBER NOT NULL ,status_stg VARCHAR2(2) ,item_id NUMBER ,unit_price NUMBER ,error_message VARCHAR2(2000) ); --drop synonym lss_unit_price_stg; CREATE SY NONY M lss_unit_price_stg FOR lss.lss_unit_price_stg;
--drop index lss_unit_price_stg_ui; CREATE UNIQUE INDEX lss_unit_price_stg_ui ON lss_unit_price_stg(transaction_id_stg); --drop sequence lss_unit_price_stg_s1; CREATE SEQUENCE lss_unit_price_stg_s1 START WITH 1 INCREMENT BY 1; -- Creation Of Trigger CREATE OR REPLACE TRIGGER lss_unit_price_stg_trg BEFORE INSERT ON lss_unit_price_stg FOR EACH ROW BEGIN IF :NEW.transaction_id_stg IS NULL THEN SELECT lss_unit_price_stg_s1.NEXTVAL, 'N' INTO :NEW.transaction_id_stg, :NEW.status_stg FROM DUAL; END IF; END; / ============================ Package Specification CREATE OR REPLACE PACKAGE lss_unit_price_update_pkg IS PROCEDURE unit_price_validate (p_list_header_id IN NUMBER); PROCEDURE unit_price_load (p_list_header_id IN NUMBER); END lss_unit_price_update_pkg; / =============================== Package Body
CREATE OR REPLACE PACKAGE BODY lss_unit_price_update_pkg IS PROCEDURE unit_price_validate (p_list_header_id IN NUMBER) IS l_error_msg VARCHAR2 (3000); l_item_id NUMBER; CURSOR item_stg_cur IS SELECT item_id, transaction_id_stg FROM lss_unit_price_stg WHERE status_stg IN ('N', 'VE'); CURSOR dup_item_cur IS SELECT item_id FROM lss_unit_price_stg GROUP BY item_id HAVING COUNT (*) > 1;
CURSOR item_nul_cur IS SELECT transaction_id_stg FROM lss_unit_price_stg WHERE item_id IS NULL; BEGIN -- Validating Item_Id FOR item_stg_rec IN item_stg_cur LOOP BEGIN SELECT DISTINCT inventory_item_id INTO l_item_id FROM qp_list_lines WHERE 1 = 1 AND list_header_id = p_list_header_id --AND operand = 9999999 --AND end_date_active IS NULL AND inventory_item_id = item_stg_rec.item_id; EXCEPTION WHEN OTHERS THEN l_error_msg := 'Inventory Item Id Not Found' || SQLERRM || ';;'; UPDATE lss_unit_price_stg SET status_stg = 'VE', error_message = error_message || l_error_msg WHERE 1 = 1 AND item_id = item_stg_rec.item_id; COMMIT; END; END LOOP; DBMS_OUTPUT.put_line ('Vallidating ItemID'); -- Validating for Duplicate records FOR dup_item_rec IN dup_item_cur LOOP BEGIN l_error_msg := 'Duplicate Item Id ;;'; UPDATE lss_unit_price_stg SET status_stg = 'VE', error_message = error_message || l_error_msg WHERE item_id = dup_item_rec.item_id; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Error While updating Staging Table for the Item(Duplicate)' || dup_item_rec.item_id ); END; END LOOP; DBMS_OUTPUT.put_line ('Vallidating Duplicate Records'); -- Validating Null Item Ids
FOR item_nul_rec IN item_nul_cur LOOP BEGIN l_error_msg := 'Given Item Id is Null ;;'; UPDATE lss_unit_price_stg SET status_stg = 'VE', error_message = error_message || l_error_msg WHERE transaction_id_stg = item_nul_rec.transaction_id_stg; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Error While updating Staging Table for the Transaction(NULL)' || item_nul_rec.transaction_id_stg ); END; END LOOP; DBMS_OUTPUT.put_line ('Vallidating D'); BEGIN UPDATE lss_unit_price_stg SET status_stg = 'V' WHERE status_stg = 'N' AND error_message IS NULL; COMMIT; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ('Exception while updating staging table for successfully calidated records' ); END; END unit_price_validate; PROCEDURE unit_price_load (p_list_header_id IN NUMBER) AS pl_code VARCHAR2 (2000); l_price NUMBER; l_count NUMBER; l_msg_dummy VARCHAR2 (2000); l_output VARCHAR2 (2000); l_msg_data VARCHAR2 (2000); l_msg_count NUMBER; l_list_line_id NUMBER; l_pricing_attribute_id NUMBER; l_item_id NUMBER; gpr_return_status VARCHAR2 (10) := NULL; gpr_msg_count NUMBER := 0; gpr_msg_data VARCHAR2 (2000); gpr_price_list_rec qp_price_list_pub.price_list_rec_type; gpr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; gpr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; gpr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; gpr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; gpr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; gpr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type;
gpr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; ppr_price_list_rec qp_price_list_pub.price_list_rec_type; ppr_price_list_val_rec qp_price_list_pub.price_list_val_rec_type; ppr_price_list_line_tbl qp_price_list_pub.price_list_line_tbl_type; ppr_price_list_line_val_tbl qp_price_list_pub.price_list_line_val_tbl_type; ppr_qualifiers_tbl qp_qualifier_rules_pub.qualifiers_tbl_type; ppr_qualifiers_val_tbl qp_qualifier_rules_pub.qualifiers_val_tbl_type; ppr_pricing_attr_tbl qp_price_list_pub.pricing_attr_tbl_type; ppr_pricing_attr_val_tbl qp_price_list_pub.pricing_attr_val_tbl_type; i NUMBER := 1; k NUMBER := 0; j NUMBER := 0; v_userid NUMBER; v_applid NUMBER; v_respid NUMBER; v_loginid NUMBER; CURSOR item_stg_cur IS SELECT item_id, transaction_id_stg FROM lss_unit_price_stg WHERE status_stg = 'V'; BEGIN DBMS_OUTPUT.put_line (p_list_header_id); BEGIN fnd_client_info.set_org_context (141); END; BEGIN SELECT user_id INTO v_userid FROM fnd_user WHERE user_name LIKE 'XXXX'; EXCEPTION WHEN NO_DATA_FOUND THEN v_userid := NULL; END; BEGIN SELECT MAX (login_id) INTO v_loginid FROM fnd_logins WHERE 1 = 1 AND user_id = v_userid; EXCEPTION WHEN NO_DATA_FOUND THEN v_loginid := NULL; END; BEGIN SELECT application_id, responsibility_id INTO v_applid, v_respid FROM fnd_responsibility_tl WHERE responsibility_name LIKE 'Oracle Pricing Manager'; EXCEPTION WHEN NO_DATA_FOUND THEN v_applid := NULL;
v_respid := NULL; END; fnd_global.apps_initialize (v_userid, v_respid, v_applid); FOR item_stg_rec IN item_stg_cur LOOP BEGIN DBMS_OUTPUT.put_line ('Entered Loop'); SELECT qpll.list_line_id, qppa.pricing_attribute_id, qpll.inventory_item_id INTO l_list_line_id, l_pricing_attribute_id, l_item_id FROM qp_list_lines qpll, qp_pricing_attributes qppa WHERE qpll.list_line_id = qppa.list_line_id AND qpll.list_header_id = p_list_header_id AND qpll.inventory_item_id = item_stg_rec.item_id; DBMS_OUTPUT.put_line ('Retrieving The Price List'); gpr_price_list_rec.list_header_id := p_list_header_id; gpr_price_list_rec.list_type_code := 'PRL'; gpr_price_list_rec.NAME := 'Test_Price_List_API_990'; gpr_price_list_rec.description := 'Test_Price_List_API_990'; gpr_price_list_rec.currency_code := 'USD'; pl_code := NULL; gpr_price_list_rec.operation := qp_globals.g_opr_update; gpr_pricing_attr_tbl.DELETE; k := 1; gpr_price_list_line_tbl (k).list_line_id := l_list_line_id; gpr_price_list_line_tbl (k).operation := qp_globals.g_opr_update; gpr_price_list_line_tbl (k).end_date_active := NULL; gpr_price_list_line_tbl (k).last_updated_by := v_userid; gpr_price_list_line_tbl (k).last_update_login := v_loginid; gpr_pricing_attr_tbl (k).pricing_attribute_id := l_pricing_attribute_id; gpr_pricing_attr_tbl (k).list_line_id := l_list_line_id; gpr_pricing_attr_tbl (k).product_attr_value := TO_CHAR (l_item_id); gpr_pricing_attr_tbl (k).operation := qp_globals.g_opr_update; BEGIN qp_price_list_pub.process_price_list (p_api_version_number => 1, p_init_msg_list => fnd_api.g_false, p_return_values => fnd_api.g_false, p_commit => fnd_api.g_false, x_return_status => gpr_return_status, x_msg_count => gpr_msg_count, x_msg_data => gpr_msg_data, p_price_list_rec => gpr_price_list_rec, p_price_list_line_tbl => gpr_price_list_line_tbl, p_pricing_attr_tbl => gpr_pricing_attr_tbl, x_price_list_rec => ppr_price_list_rec, x_price_list_val_rec => ppr_price_list_val_rec, x_price_list_line_tbl => ppr_price_list_line_tbl, x_price_list_line_val_tbl => ppr_price_list_line_val_tbl, x_qualifiers_tbl => ppr_qualifiers_tbl, x_qualifiers_val_tbl => ppr_qualifiers_val_tbl, x_pricing_attr_tbl => ppr_pricing_attr_tbl, x_pricing_attr_val_tbl => ppr_pricing_attr_val_tbl -- Prod
); DBMS_OUTPUT.put_line ('The Price List Line' || k || 'is inserted' ); DBMS_OUTPUT.put_line ( 'Price List line : ' || gpr_pricing_attr_tbl (k).product_attr_value ); COMMIT; BEGIN UPDATE lss_unit_price_stg SET status_stg = 'L' WHERE transaction_id_stg = item_stg_rec.transaction_id_stg; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Excpetion when updating Staging table for Item(Updated Item)' || l_item_id ); END; IF gpr_return_status <> 'S' THEN oe_msg_pub.get (k, fnd_api.g_false, gpr_msg_data, l_msg_dummy ); l_output := (TO_CHAR (k) || ': ' || l_msg_data); DBMS_OUTPUT.put_line (l_output); BEGIN UPDATE lss_unit_price_stg SET status_stg = 'LE', error_message = error_message || l_output || ';;' WHERE transaction_id_stg = item_stg_rec.transaction_id_stg; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line ( 'Excpetion when updating Staging table for Item(Update Failed)' || l_item_id ); END; END IF; EXCEPTION WHEN OTHERS THEN BEGIN UPDATE lss_unit_price_stg SET status_stg = 'LE', error_message = error_message || 'Unknown Exception ;;' WHERE transaction_id_stg = item_stg_rec.transaction_id_stg; EXCEPTION WHEN OTHERS
THEN DBMS_OUTPUT.put_line ( 'Excpetion when updating Staging table for Item(Update Failed)' || l_item_id ); END; DBMS_OUTPUT.put_line ('Error Processing The Price List...'); DBMS_OUTPUT.put_line ( 'Price List Name : ' || gpr_price_list_rec.NAME ); DBMS_OUTPUT.put_line (SQLERRM); END; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.put_line (SQLERRM); END; END LOOP; END unit_price_load; END lss_unit_price_update_pkg; /
Posted by Vamsi Mantripragada at 12:11 AM
0
Newer Post
Subscribe to: Post Comments (Atom)
Home
DAILY CALENDAR
C reate Stunning Travel Slideshow In A Minute. Its Free & Easy To Share!
tripwow.tripadvisor.com /slide show
Su 4 11 18 25 5 12 19 26
M 6 13 20 27
Tu
September 2011 W 1 7 8 14 15 21 22 28 29
Th 2 9 16 23 30
F 3 10 17 24
Sa
Copyright 2011 - Vamsi Mantripraga All Rights Reserved. Picture Window template. Powered by Blogger.