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...
Oracle AppsOracle Apps
Search
pow er ed by
SATURDAY, JANUARY 22, 2011
Updating Price List Lines - API Approach
Script for Updating Price List Lines :-
Issue :- Need to update unit price of items which are in given Price List ans having unit price as $9999999.
Process Followed :- First end date all the lines in QP_LIST_LINES which falls under above conditions and then insert
new records in QP_LIST_LINES.
API Used :- qp_price_list_pub.process_price_list(Both for Insert and Update)
Steps Followed :-
1. Create a staging table to store Item_Id, New Unit_Price, Transaction_ID, Status and Errror_Message.
2. Created a synonym, sequence, trigger and index on staging table.
3. Validated Items Ids given (For Duplicate Records, Null Records and existence of item ids) in the data file).
4. Send List_Header_Id, List_Line_Id, Pricing_Attribute_Id and field that has to be updated (In this example,
end_date_active) and operation should be qp_globals.g_opr_update.
================================================================
===========
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 SYNONYM lss_unit_price_stg FOR lss.lss_unit_price_stg;
Join this siteJoin this site
w ith Google Friend Connect
Members (4)
Already a member? Sign in
FOLLOWERS
▼ 2011 (4)
► May (2)
▼ January (2)
Concurrent ProgramInformation
Updating Price List Lines- API Approach
BLOG ARCHIVE
Vamsi Mantripragada
View my complete profile
ABOUT ME
Share Report Abuse Next Blog» Create Blog Sign In
--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); -- Prod
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
);
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
Newer Post Home
Subscribe to: Post Comments (Atom)
Posted by Vamsi Mantripragada at 12:11 AM
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;
/
0
Com m ent as: Select profile...
Post Comment Preview
0 comments:
Post a Comment
DAILY CALENDAR
Embed Blogger SlideshowCreate Stunning Travel Slideshow In AMinute. Its Free & Easy To Share!tripwow.tripadvisor.com/slideshow
September 2011
Su M Tu W Th F Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30
Copyright © 2011 - Vamsi Mantripraga All Rights Reserved. Picture Window template. Powered by Blogger.