how to create position hierarchy by using apis
DESCRIPTION
How to Create Position Hierarchy by Using ApisTRANSCRIPT
-
How to Create Position Hierarchy by
Using APIs
Oracle utilizes position as road map to determine how and where documents will
be routed once the approval process has been initiated. Its always very difficult
for functional consultant or application super user to create Position hierarchy
manually specially for organization where they have more number of positions.
This document contains the all script required to create position hierarchy in
oracle application to be used by Purchasing and HRMS system .
2010
Ahmad Bilal
1/25/2010
Email: [email protected]
-
h t t p : / / o r a c l e e b u s i n e s s s u i t e . w o r d p r e s s . c o m / Page 2
I. Create Temporary Table to Load Data
CREATE TABLE RAW_POSIT ION_H_DATA(SLNO NUMBER , PARENT_POSIT ION_ ID NUMBER,
CH ILD_POSIT ION_ ID NUMBER)
II. UPLOAD DATA INTO RAW_POSITION_H_DATA BY USING SQLLDR
DATA FORMAT W ILL BE L IKE THIS
Sl No PARENT_POSITION_ID CHILD_POSITION_ID
1 21165 21164
2 21163 21162
3 21164 21163
III. Verify the Data in table
SELECT *
FROM RAW_POSIT ION_H_DATA H
START W ITH H .PARENT_POSIT ION_ID = 21165 - - (TOP NODE POSIT ION ID L IKE CHAIRMAN OR C .E .O ))
CONNECT BY PR IOR H .CH ILD_POSIT ION_ ID = H .PARENT_POSIT ION_ ID ;
Da ta w i l l sh ow i n h i e r a r ch i ca l o rde r
IV. Alter Table in Order to Capture the New Ids and exceptions
ALTER TABLE APPS_APPLMGR .RAW_POSIT ION_H_DATA ADD (NEW_PARENT_POSIT ION_ ID NUMBER ,
NEW_SUBORDINATE_POSIT ION_ID NUMBER, ERROR_MESSAGE VARCHAR2 (2000 ) , STATUS VARCHAR2 (3 ) ,
OBJECT_VERSION_NUMBER NUMBER , POS_STRUCTURE_ELEMENT_ ID NUMBER);
V. Create Procedure to Define Position Hierarchy Parent Record
-
h t t p : / / o r a c l e e b u s i n e s s s u i t e . w o r d p r e s s . c o m / Page 3
CREATE OR REPLACE PROCEDURE CREATE_POSIT ION_H
IS
P_VAL IDATE BOOLEAN := SYS .D IUT IL . INT_TO_BOOL (0 ) ;
P_POSIT ION_STRUCTURE_ ID NUMBER;
P_OBJECT_VERSION_NUMBER NUMBER;
P_EFFECTIVE_DATE DATE := TO_DATE ( ' 01 -01 -1990 ' , 'DD-MM-YYYY ' ) ; /* TH IS DATE SHOULD
BE AFTER THE ALL POSIT ION EFFECTIVE START DATE * /
P_NAME VARCHAR2 (240) := 'P os i t i on H i e ra r ch y By API ' ;
BEGIN
PER_POSIT ION_STRUCTURE_AP I .CREATE_POSIT ION_STRUCTURE
(P_VAL IDATE => P_VAL IDATE ,
P_EFFECTIVE_DATE => P_EFFECTIVE_DATE ,
P_NAME => P_NAME,
P_BUSINESS_GROUP_ ID => 0 ,
P_COMMENTS => NULL ,
P_ PR IMARY_POSIT ION_FLAG => 'N ' ,
P_REQUEST_ ID => NULL ,
P_ PROGRAM_APPL ICAT ION_ID => NULL ,
P_ PROGRAM_ ID => NULL ,
P_ PROGRAM_UPDATE_DATE => NULL ,
P_ATTRIBUTE_CATEGORY => NULL ,
P_ATTRIBUTE1 => NULL ,
P_ATTRIBUTE2 => NULL ,
P_ATTRIBUTE3 => NULL ,
P_ATTRIBUTE4 => NULL ,
P_ATTRIBUTE5 => NULL ,
P_ATTRIBUTE6 => NULL ,
P_ATTRIBUTE7 => NULL ,
P_ATTRIBUTE8 => NULL ,
P_ATTRIBUTE9 => NULL ,
P_ATTRIBUTE10 => NULL ,
P_ATTRIBUTE11 => NULL ,
P_ATTRIBUTE12 => NULL ,
P_ATTRIBUTE13 => NULL ,
P_ATTRIBUTE14 => NULL ,
P_ATTRIBUTE15 => NULL ,
P_ATTRIBUTE16 => NULL ,
P_ATTRIBUTE17 => NULL ,
P_ATTRIBUTE18 => NULL ,
P_ATTRIBUTE19 => NULL ,
P_ATTRIBUTE20 => NULL ,
P_ POSIT ION_STRUCTURE_ ID => P_POSIT ION_STRUCTURE_ ID ,
P_OBJECT_VERSION_NUMBER => P_OBJECT_VERSION_NUMBER
) ;
COMMIT ;
END;
/
VI. Execute Procedure
BEGIN
CREATE_POSIT ION_H;
COMMIT ;
END;
USE FOLLOWING QUERY TO VERIFY THAT POSIT ION HEADER IS CREATED
SELECT POSIT ION_STRUCTURE_ID
-
h t t p : / / o r a c l e e b u s i n e s s s u i t e . w o r d p r e s s . c o m / Page 4
FROM PER_POSIT ION_STRUCTURES PPS
WHERE PPS.NAME = ' Pos i t i on H i e ra r ch y By AP I ' ;
VII. Create Procedure to Define Hierarchy version
CREATE OR REPLACE PROCEDURE CREATE_POSIT ION_H_VERSION
IS
P_VAL IDATE BOOLEAN := SYS.DIUT IL . INT_TO_BOOL (0 ) ;
P_GAP_WARN ING BOOLEAN;
P_POS_STRUCTURE_VERSION_ID NUMBER;
P_OBJECT_VERSION_NUMBER NUMBER;
P_DATE_FROM DATE := TO_DATE ( ' 01 -01 -1990 ' , ' DD -MM-YYYY ' ) ;
/* TH IS DATE SHOULD BE AFTER THE ALL POSIT ION EFFECTIVE START DATE * /
P_EFFECTIVE_DATE DATE := TO_DATE ( ' 01 -01 -1990 ' , ' DD -MM-YYYY ' ) ;
/* TH IS DATE SHOULD BE AFTER THE ALL POSIT ION EFFECTIVE START DATE * /
P_POSIT ION_STRUCTURE_ ID NUMBER;
P_VERSION_NUMBER NUMBER := 1 ;
BEGIN
SELECT POSIT ION_STRUCTURE_ ID
INTO P_POSIT ION_STRUCTURE_ ID
FROM PER_POSIT ION_STRUCTURES PPS
WHERE PPS.NAME = ' P os i t i on H i e r a r ch y By AP I ' ;
PER_POS_STRUCTURE_VERSION_AP I .CREATE_POS_STRUCTURE_VERSION
(P_VAL IDATE => P_VAL IDATE ,
P_EFFECTIVE_DATE => P_EFFECT IVE_DATE ,
P_POSIT ION_STRUCTURE_ID => P_POSIT ION_STRUCTURE_ ID,
P_DATE_FROM => P_DATE_FROM ,
P_VERSION_NUMBER => P_VERSION_NUMBER,
P_COPY_STRUCTURE_VERSION_ ID => NULL ,
P_DATE_TO => NULL ,
P_REQUEST_ ID => NULL ,
P_PROGRAM_APPL ICAT ION_ ID => NULL ,
P_PROGRAM_ ID => NULL ,
P_PROGRAM_UPDATE_DATE => NULL ,
P_POS_STRUCTURE_VERSION_ ID => P_POS_STRUCTURE_VERSION_ID ,
P_OBJECT_VERSION_NUMBER => P_OBJECT_VERSION_NUMBER ,
P_GAP_WARNING => P_GAP_WARN ING
) ;
COMMIT ;
END;
/
VIII. Execute Procedure
BEGIN
CREATE_POSIT ION_H_VERSION;
COMMIT ;
END;
Use Fo l l ow ing Que r y t o ve r i f y the Ve r s i on Crea ted
SELECT POS_STRUCTURE_VERSION_ID INTO P_POS_STRUCTURE_VERSION_ ID FROM
PER_POSIT ION_STRUCTURES PPS, PER_POS_STRUCTURE_VERSIONS PSV WHERE PPS .NAME = 'P os i t i on H i e ra r ch y
By AP I ' AND PPS.POSIT ION_STRUCTURE_ ID = PSV.POSIT ION_STRUCTURE_ ID;
IX. Create Procedure to Load Elements of Position hierarchy
CREATE OR REPLACE PROCEDURE CREATE_POSIT ION_H IERARCHY_PRC
-
h t t p : / / o r a c l e e b u s i n e s s s u i t e . w o r d p r e s s . c o m / Page 5
IS
P_VAL IDATE BOOLEAN := SYS .D IUT IL . INT_TO_BOOL (0 ) ;
P_POS_STRUCTURE_ELEMENT_ID NUMBER;
P_POS_STRUCTURE_VERSION_ID NUMBER;
P_OBJECT_VERSION_NUMBER NUMBER;
P_EFFECTIVE_DATE DATE := TO_DATE ( ' 01 -01 -1990 ' , 'DD-MM-YYYY ' ) ; /* TH IS DATE SHOULD
BE AFTER THE ALL POSIT ION EFFECTIVE START DATE * /
P_ERROR VARCHAR2 (2000) ;
VNEW_SUBORDINATE_POSIT ION_ID NUMBER;
/* EXTRACT THE NEWHIERARCHY * /
CURSOR CUR
I S
SELECT *
FROM RAW_POSIT ION_H_DATA H
START W ITH H .PARENT_POSIT ION_ID = 21165 - - (TOP NODE POSIT ION ID L IKE CHAIRMAN OR C .E .O ))
CONNECT BY PR IOR H .CH ILD_POSIT ION_ ID = H .PARENT_POSIT ION_ ID ;
BEGIN
- - GET STURCTURE VERS ION ID
SELECT POS_STRUCTURE_VERSION_ ID
INTO P_POS_STRUCTURE_VERSION_ID
FROM PER_POSIT ION_STRUCTURES PPS, PER_POS_STRUCTURE_VERSIONS PSV
WHERE PPS.NAME = ' P os i t i on H i e r a r ch y By AP I '
AND PPS .POSIT ION_STRUCTURE_ ID = PSV .POSIT ION_STRUCTURE_ID;
FOR POS IN CUR
LOOP
BEG IN
HR_POS_HIERARCHY_ELE_AP I .CREATE_POS_H IERARCHY_ELE
(P_VAL IDATE => P_VAL IDATE ,
P_PARENT_POSIT ION_ ID => POS .PARENT_POSIT ION_ ID ,
P_POS_STRUCTURE_VERSION_ ID => P_POS_STRUCTURE_VERSION_ID ,
P_SUBORDINATE_POSIT ION_ ID => POS .CHILD_POSIT ION_ ID ,
P_BUSINESS_GROUP_ ID => 0 ,
P_HR_INSTAL LED => NULL ,
P_EFFECT IVE_DATE => P_EFFECT IVE_DATE ,
P_POS_STRUCTURE_ELEMENT_ID => P_POS_STRUCTURE_ELEMENT_ID ,
P_OBJECT_VERSION_NUMBER => P_OBJECT_VERSION_NUMBER
) ;
UPDATE RAW_POSIT ION_H_DATA H
SET H .POS_STRUCTURE_ELEMENT_ ID = P_POS_STRUCTURE_ELEMENT_ ID,
H .OBJECT_VERSION_NUMBER = P_OBJECT_VERSION_NUMBER,
STATUS = ' I '
WHERE H .SLNO = POS .SLNO;
COMMIT;
EXCEPT ION
WHEN OTHERS
THEN
P_ERROR := SQLERRM;
UPDATE RAW_POSIT ION_H_DATA H
SET H .STATUS = 'E ' ,
ERROR_MESSAGE = P_ERROR
WHERE H .SLNO = POS .SLNO;
COMMIT;
END;
END LOOP;
END;
/
X. Execute Procedure
-
h t t p : / / o r a c l e e b u s i n e s s s u i t e . w o r d p r e s s . c o m / Page 6
BEGIN
CREATE_POSIT ION_HIERARCHY_PRC;
COMMIT ;
END;
Ver i f y P os i t i on H i e ra r ch y by us i ng f o l l ow in g que r y
SELECT LPAD ( ' ' , 5 * LEVEL )
| |HAS.NAME H IERARCHY ,
LEVEL ,
HAP .NAME PARENT_NAME,
PSE . PARENT_POSIT ION_ID ,
HAS .NAME CH ILD_NAME ,
PSE .SUBORDINATE_POSIT ION_ ID
FROM (SELECT NAME ,
POS IT ION_ID
FROM HR_ALL_POSIT IONS_F_TL
WHERE LANGUAGE = USERENV ( ' LANG ' ) ) HAP ,
( SELECT NAME ,
POS IT ION_ID
FROM HR_ALL_POSIT IONS_F_TL
WHERE LANGUAGE = USERENV ( ' LANG ' ) ) HAS ,
PER_POS_STRUCTURE_ELEMENTS PSE
WHERE PSE .BUSINESS_GROUP_ ID = 0
AND HAP .POSIT ION_ID = PSE .PARENT_POSIT ION_ID
AND HAS .POSIT ION_ ID = PSE .SUBORDINATE_POSIT ION_ID
AND PSE .POS_STRUCTURE_VERSION_ID IN ( SELECT POS_STRUCTURE_VERSION_ ID
FROM PER_POSIT ION_STRUCTURES PPS , PER_POS_STRUCTURE_VERSIONS PSV
WHERE PPS.NAME = ' P os i t i on H i e r a r ch y By AP I '
AND PPS .POSIT ION_STRUCTURE_ ID = PSV .POSIT ION_STRUCTURE_ID)
START W ITH PSE .PARENT_POSIT ION_ ID = 21165 - - (TOP NODE POSIT ION ID L IKE CHAIRMAN OR C .E .O ))
CONNECT BY PR IOR PSE .SUBORDINATE_POSIT ION_ ID = PSE .PARENT_POSIT ION_ID
AND PRIOR PSE .POS_STRUCTURE_VERSION_ ID =PSE .POS_STRUCTURE_VERSION_ ID
AND PRIOR PSE .BUSINESS_GROUP_ ID = PSE .BUSINESS_GROUP_ ID