You are on page 1of 8

7/10/2016

UserHooksinOracleHRMS

UserHooksinOracleHRMS
UserHookConcepts

Therearemanytimeswhereweneedputsomeextralogicbeforeorafterhappeningofsomebusiness
event.InSuchcases,weuseuserhookAPI.ItisafunctionalityprovidedinOracleHRMSthroughwhichyou
canhavemorecontrolonapplicationw.r.timplementingbusinessrules.
HowitWorks:
InOracleHRMS,OraclehasprovidedlocationinHRMSAPIs,wherecustomercanputhisbusinesslogic.
WhenAPIprocessingreachesauserhook,coreproductprocessingstopsandanycustomerspecificlogic
forthateventisexecuted.Afterprocessingofcustomerspecificlogic,mainAPIresumesitsprocessing.
Thesearenormallyusedinscenarioswherewewanttoputextralogictoaddfunctionalitynotsupplied
directlybyOracle.Thiscouldincludebusinesseventslike
1.ValidateDataisEITbeforeorafterinsertioneitherthroughselfserviceorcoreHR
2.ValidateDataisSITbeforeorafterinsertioneitherthroughselfserviceorcoreHR
3.Validatingparticularcustomerdata:Forexample,youcouldlimitgradesteppromotionstoamaximumof
onestep.
4.Maintainingadditionaldatainyourownuserdefinedtables
5.Detectingthataparticularbusinesseventhasoccurred:Iftheeventwasanemployeetermination
process,forexample,thiscouldbemadetosendamessagetoyoursecuritydatabasedisablingthe
employeessecuritypass.
Attention:YoushouldnotmanuallyedittheAPIsourcecodefilessuppliedbyOracleIfyoudomodifythese
codes,OracleApplicationswillbeunabletosupporttheproduct,andupgradesmaynotbepossible.Oracle
ApplicationsonlysupportsdirectcallstothepublishedAPIs.Directcallstoanyotherserversidepackage
proceduresorfunctionsthatarewrittenaspartoftheOracleHRMSApplicationssuitearenotsupported.
Note:AllOracleHRMSformsdoesnotuseHRMSAPIs,Userhookcanbeimplementedforonlythoseforms
whichperformfunctionsthroughAPI.TheHR_API_HOOKStableholdsallavailableAPIhooksforAPIs
inHR_API_MODULEStable.

ImplementationStepsForUserHooks
FourstepsarerequiredtoimplementAPIUserHooks:
LetsAssumewewanttoputalogictostopauserifheappliedannualleavemorethan30days.Itshould
validatebeforeAbsenceCreation.SowehavetoperformfollowingstepsinsequenceStep1Identifying
thecorrectUserHookAPI
SELECTahk.api_hook_id,
ahk.api_module_id,
ahk.hook_package,
ahk.hook_procedure
FROMhr_api_hooksahk,hr_api_modulesahm
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

1/8

7/10/2016

UserHooksinOracleHRMS

WHEREahm.module_namelike%_PERSON_ABSENCE%
ANDahm.api_module_type=BP
ANDahk.api_hook_type=AP
ANDahk.api_module_id=ahm.api_module_id
ItwillshowallPersonAbsencerelevantAPIs.WeneedtoselectthecorrectAPIthatmatchedwithour
requirement.ForExampleforabovementionedrequirement,weshallselect
CREATE_PERSON_ABSENCE_AAPI.WeshallnoteitsAPI_HOOK_ID(3840)andAPI_MODULE_ID(1731)
asAPI_HOOK_IDwillbeusedatthetimeofregistrationofuserhookmentionedinStep3aheadand
API_MODULE_IDwillbeneededinrunningtheprocessorinStep4.
Step2.CreatePL/SQLproceduretoexecuteyourlogic.
CREATEORREPLACEPACKAGEAPPS.LSG_USERHOOK_PKG
AS
PROCEDUREXXALB_CREATE_ABS_VAL_P
(P_EFFECTIVE_DATEINDATE
,P_PERSON_IDINNUMBER
,P_BUSINESS_GROUP_IDINNUMBER
,P_ABSENCE_ATTENDANCE_TYPE_IDINNUMBER
,P_ABS_ATTENDANCE_REASON_IDINNUMBER
,P_COMMENTSINLONG
,P_DATE_NOTIFICATIONINDATE
,P_DATE_PROJECTED_STARTINDATE
,P_TIME_PROJECTED_STARTINVARCHAR2
,P_DATE_PROJECTED_ENDINDATE
,P_TIME_PROJECTED_ENDINVARCHAR2
,P_DATE_STARTINDATE
,P_TIME_STARTINVARCHAR2
,P_DATE_ENDINDATE
,P_TIME_ENDINVARCHAR2
,P_ABSENCE_DAYSINNUMBER
,P_ABSENCE_HOURSINNUMBER
,P_AUTHORISING_PERSON_IDINNUMBER
,P_REPLACEMENT_PERSON_IDINNUMBER
,P_ATTRIBUTE_CATEGORYINVARCHAR2
,P_ATTRIBUTE1INVARCHAR2
,P_ATTRIBUTE2INVARCHAR2
,P_ATTRIBUTE3INVARCHAR2
,P_ATTRIBUTE4INVARCHAR2
,P_ATTRIBUTE5INVARCHAR2
,P_ATTRIBUTE6INVARCHAR2
,P_ATTRIBUTE7INVARCHAR2
,P_ATTRIBUTE8INVARCHAR2
,P_ATTRIBUTE9INVARCHAR2
,P_ATTRIBUTE10INVARCHAR2
,P_ATTRIBUTE11INVARCHAR2
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

2/8

7/10/2016

UserHooksinOracleHRMS

,P_ATTRIBUTE11INVARCHAR2
,P_ATTRIBUTE12INVARCHAR2
,P_ATTRIBUTE13INVARCHAR2
,P_ATTRIBUTE14INVARCHAR2
,P_ATTRIBUTE15INVARCHAR2
,P_ATTRIBUTE16INVARCHAR2
,P_ATTRIBUTE17INVARCHAR2
,P_ATTRIBUTE18INVARCHAR2
,P_ATTRIBUTE19INVARCHAR2
,P_ATTRIBUTE20INVARCHAR2
,P_PERIOD_OF_INCAPACITY_IDINNUMBER
,P_SSP1_ISSUEDINVARCHAR2
,P_MATERNITY_IDINNUMBER
,P_SICKNESS_START_DATEINDATE
,P_SICKNESS_END_DATEINDATE
,P_PREGNANCY_RELATED_ILLNESSINVARCHAR2
,P_REASON_FOR_NOTIFICATION_DELAINVARCHAR2
,P_ACCEPT_LATE_NOTIFICATION_FLAINVARCHAR2
,P_LINKED_ABSENCE_IDINNUMBER
,P_BATCH_IDINNUMBER
,P_CREATE_ELEMENT_ENTRYINBOOLEAN
,P_ABS_INFORMATION_CATEGORYINVARCHAR2
P_ABS_INFORMATION1INVARCHAR2,
P_ABS_INFORMATION1INVARCHAR2,
P_ABS_INFORMATION2INVARCHAR2,
P_ABS_INFORMATION3INVARCHAR2,
P_ABS_INFORMATION4INVARCHAR2,
P_ABS_INFORMATION5INVARCHAR2,
P_ABS_INFORMATION6INVARCHAR2,
P_ABS_INFORMATION7INVARCHAR2,
P_ABS_INFORMATION8INVARCHAR2,
P_ABS_INFORMATION9INVARCHAR2,
P_ABS_INFORMATION10INVARCHAR2,
P_ABS_INFORMATION11INVARCHAR2,
P_ABS_INFORMATION12INVARCHAR2,
P_ABS_INFORMATION13INVARCHAR2,
P_ABS_INFORMATION14INVARCHAR2,
P_ABS_INFORMATION15INVARCHAR2,
P_ABS_INFORMATION16INVARCHAR2,
P_ABS_INFORMATION17INVARCHAR2,
P_ABS_INFORMATION18INVARCHAR2,
P_ABS_INFORMATION19INVARCHAR2,
P_ABS_INFORMATION20INVARCHAR2,
P_ABS_INFORMATION21INVARCHAR2,
P_ABS_INFORMATION22INVARCHAR2,
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

3/8

7/10/2016

UserHooksinOracleHRMS

P_ABS_INFORMATION23INVARCHAR2,
P_ABS_INFORMATION24INVARCHAR2,
P_ABS_INFORMATION25INVARCHAR2,
P_ABS_INFORMATION26INVARCHAR2,
P_ABS_INFORMATION27INVARCHAR2,
P_ABS_INFORMATION28INVARCHAR2,
P_ABS_INFORMATION29INVARCHAR2,
P_ABS_INFORMATION30INVARCHAR2,
,P_ABSENCE_CASE_IDINNUMBER
)
ENDLSG_USERHOOK_PKG
/
CREATEORREPLACEPACKAGEBODYAPPS.LSG_USERHOOK_PKG
PROCEDURELSG_CREATE_ABS_VAL_P(
P_EFFECTIVE_DATEINDATE,
P_PERSON_IDINNUMBER,
,P_BUSINESS_GROUP_IDINNUMBER
,P_ABSENCE_ATTENDANCE_TYPE_IDINNUMBER
,P_ABS_ATTENDANCE_REASON_IDINNUMBER
,P_COMMENTSINLONG
,P_DATE_NOTIFICATIONINDATE
,P_DATE_PROJECTED_STARTINDATE
,P_TIME_PROJECTED_STARTINVARCHAR2
,P_DATE_PROJECTED_ENDINDATE
,P_TIME_PROJECTED_ENDINVARCHAR2
,P_DATE_STARTINDATE
,P_TIME_STARTINVARCHAR2
,P_DATE_ENDINDATE
,P_TIME_ENDINVARCHAR2
,P_ABSENCE_DAYSINNUMBER
,P_ABSENCE_HOURSINNUMBER
,P_AUTHORISING_PERSON_IDINNUMBER
,P_REPLACEMENT_PERSON_IDINNUMBER
,P_ATTRIBUTE_CATEGORYINVARCHAR2
,P_ATTRIBUTE1INVARCHAR2
,P_ATTRIBUTE2INVARCHAR2
,P_ATTRIBUTE3INVARCHAR2
,P_ATTRIBUTE4INVARCHAR2
,P_ATTRIBUTE5INVARCHAR2
,P_ATTRIBUTE6INVARCHAR2
,P_ATTRIBUTE7INVARCHAR2
,P_ATTRIBUTE8INVARCHAR2
,P_ATTRIBUTE9INVARCHAR2
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

4/8

7/10/2016

UserHooksinOracleHRMS

,P_ATTRIBUTE10INVARCHAR2
,P_ATTRIBUTE11INVARCHAR2
,P_ATTRIBUTE11INVARCHAR2
,P_ATTRIBUTE12INVARCHAR2
,P_ATTRIBUTE13INVARCHAR2
,P_ATTRIBUTE14INVARCHAR2
,P_ATTRIBUTE15INVARCHAR2
,P_ATTRIBUTE16INVARCHAR2
,P_ATTRIBUTE17INVARCHAR2
,P_ATTRIBUTE18INVARCHAR2
,P_ATTRIBUTE19INVARCHAR2
,P_ATTRIBUTE20INVARCHAR2
,P_PERIOD_OF_INCAPACITY_IDINNUMBER
,P_SSP1_ISSUEDINVARCHAR2
,P_MATERNITY_IDINNUMBER
,P_SICKNESS_START_DATEINDATE
,P_SICKNESS_END_DATEINDATE
,P_PREGNANCY_RELATED_ILLNESSINVARCHAR2
,P_REASON_FOR_NOTIFICATION_DELAINVARCHAR2
,P_ACCEPT_LATE_NOTIFICATION_FLAINVARCHAR2
,P_LINKED_ABSENCE_IDINNUMBER
,P_BATCH_IDINNUMBER
,P_CREATE_ELEMENT_ENTRYINBOOLEAN
,P_ABS_INFORMATION_CATEGORYINVARCHAR2
P_ABS_INFORMATION1INVARCHAR2,
P_ABS_INFORMATION1INVARCHAR2,
P_ABS_INFORMATION2INVARCHAR2,
P_ABS_INFORMATION3INVARCHAR2,
P_ABS_INFORMATION4INVARCHAR2,
P_ABS_INFORMATION5INVARCHAR2,
P_ABS_INFORMATION6INVARCHAR2,
P_ABS_INFORMATION7INVARCHAR2,
P_ABS_INFORMATION8INVARCHAR2,
P_ABS_INFORMATION9INVARCHAR2,
P_ABS_INFORMATION10INVARCHAR2,
P_ABS_INFORMATION11INVARCHAR2,
P_ABS_INFORMATION12INVARCHAR2,
P_ABS_INFORMATION13INVARCHAR2,
P_ABS_INFORMATION14INVARCHAR2,
P_ABS_INFORMATION15INVARCHAR2,
P_ABS_INFORMATION16INVARCHAR2,
P_ABS_INFORMATION17INVARCHAR2,
P_ABS_INFORMATION18INVARCHAR2,
P_ABS_INFORMATION19INVARCHAR2,
P_ABS_INFORMATION20INVARCHAR2,
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

5/8

7/10/2016

UserHooksinOracleHRMS

P_ABS_INFORMATION21INVARCHAR2,
P_ABS_INFORMATION22INVARCHAR2,
P_ABS_INFORMATION23INVARCHAR2,
P_ABS_INFORMATION24INVARCHAR2,
P_ABS_INFORMATION25INVARCHAR2,
P_ABS_INFORMATION26INVARCHAR2,
P_ABS_INFORMATION27INVARCHAR2,
P_ABS_INFORMATION28INVARCHAR2,
P_ABS_INFORMATION29INVARCHAR2,
P_ABS_INFORMATION30INVARCHAR2,
P_ABSENCE_CASE_IDINNUMBER
)
IS
L_ABSENCE_TYPEVARCHAR2(500):=NULL
L_ASSIGNMENT_IDNUMBER
L_ABSENCE_START_DATEDATE:=NVL(P_DATE_START,P_DATE_PROJECTED_START)
L_ABSENCE_END_DATEDATE:=NVL(P_DATE_END,P_DATE_PROJECTED_END)
L_ABSENCE_FUTURE_ST_DATEDATE
L_ABSENCE_FUTURE_END_DATEDATE
BEGIN
SELECTNAME
INTOL_ABSENCE_TYPE
FROMPER_ABSENCE_ATTENDANCE_TYPES
WHEREABSENCE_ATTENDANCE_TYPE_ID=P_ABSENCE_ATTENDANCE_TYPE_ID
ANDBUSINESS_GROUP_ID=P_BUSINESS_GROUP_ID
IFUPPER(TRIM(L_ABSENCE_TYPE))=ANNUALLEAVETHEN
IFL_ABSENCE_END_DATEL_ABSENCE_START_DATE>30THEN
HR_UTILITY.SET_MESSAGE(800,LSG_ANN_LEAVE_GREATER_THAN_30)
HR_UTILITY.RAISE_ERROR
ENDIFENDIFEND
ENDLSG_CREATE_ABS_VAL_P
ENDLSG_USERHOOK_PKG

3.Registeryourprocedurewithoneormorespecificuserhooks.
WeshallusetheAPI_HOOK_IDidentifiedinStep1intheparameterp_api_hook_id.ThroughthisAPI,
customlogicwillberegisteredagainstuserhook.
DECLARE
L_API_HOOK_IDNUMBER:=3840
L_API_HOOK_CALL_IDNUMBER
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

6/8

7/10/2016

UserHooksinOracleHRMS

L_OBJECT_VERSION_NUMBERNUMBER
L_SEQUENCENUMBER
BEGIN
SELECTHR_API_HOOKS_S.NEXTVAL
INTOL_SEQUENCE
FROMDUAL
HR_API_HOOK_CALL_API.CREATE_API_HOOK_CALL
(P_VALIDATE=>FALSE,
P_EFFECTIVE_DATE=>TO_DATE(01JAN1952,DDMONYYYY),
P_API_HOOK_ID=>L_API_HOOK_IDNUMBER,
P_API_HOOK_CALL_TYPE=>PP,
P_SEQUENCE=>L_SEQUENCE,
P_ENABLED_FLAG=>Y,
P_CALL_PACKAGE=>LSG_USERHOOK_PKG,CUSTOMPACKAGE
P_CALL_PROCEDURE=>LSG_CREATE_ABS_VAL_P,CUSTOMPROCEDURE
P_API_HOOK_CALL_ID=>L_API_HOOK_CALL_ID,
P_OBJECT_VERSION_NUMBER=>L_OBJECT_VERSION_NUMBER)
DBMS_OUTPUT.PUT_LINE(L_API_HOOK_CALL_ID||L_API_HOOK_CALL_ID)
END
Afterthisstep,youshallbeabletoseethereferenceofyourcustompackage/procedureintable
HR_API_HOOK_CALLS.Youcancheckitbyusingfollowingquery
SELECT*
FROMHR_API_HOOK_CALLS
WHEREapi_hook_id=3840

4.Runthepreprocessorprogram
Runpreprocessorscripthrahkone.sqlwithmodulenameasparameter
(PER_TOP/admin/sql/hrahkone.sql).ItcompileAPIhook.AfterrunningthisyourAPIhookPackageshould
havecustomprocedurecall.
or
AlternatelyyoucanusethefollowingAPItorunthepreprocessor
declare
l_api_module_idnumber:=1731Value1731isderivedfromStep1aboveusingfollowingquery
begin
hr_api_user_hooks_utility.create_hooks_one_module(l_api_module_id)
dbms_output.put_line(Success)
exceptionwhenothersthen
dbms_output.put_line(Exception:||SQLERRM)
http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

7/8

7/10/2016

UserHooksinOracleHRMS

end
Atthislevel,youruserhookisimplementedandshouldworkasperyourrequriement.
Ifyouchangeyourcustompackagebody,youdontneedtorunthepreprocessoragainbutifyouchange
theproceduresignature,youwillneedtorunthepreprocessoryagain,

DeletecustomcodefromAPIuserHook
GetHookCallIDandObjectVersion_number
SELECTapi_hook_call_id,object_version_number
FROMHR_API_HOOK_CALLS
WHEREcall_package=LSG_USERHOOK_PKG
ANDcall_procedure=UPPER(LSG_CREATE_ABS_VAL_P)
BEGIN
Hr_Api_Hook_Call_Api.delete_api_hook_call(p_validate=>FALSE,
p_api_hook_call_id=>12345,
p_object_version_number=>2
)
DBMS_OUTPUT.PUT_LINE(deletedSuccessfully)
END
IshallcovertheUserHookrelatedtablesandtheirlinksinmynextpost.
RelatedPosts

http://oraclehrmsoverview.com/2013/04/07/userhooksinoraclehrms/

8/8

You might also like