Generally an organisation has 4-5 types of leaves. Casual Leave, Annual or Priviledge leave, Sick Leave, Maternity Leave etc. I have come across a requirement to implement validations before applying leave. For eg: Male employees can not apply for Maternity leave or You can not take 3 days consecutive Casual Leave. Implementing these validations and displaying an error message on ESS ( WebDynpro based ) is a very common requirement. Lets see how to go about it in this blog.
1. Use BADI: PT_ABS_REQ.
A BADI is delivered by SAP to control leave processing. Definition: PT_ABS_REQ.
Create an implementation for this BADI. Standard implementation is delivered: Implementation Name CL_PT_ARQ_REQ. In Ecc 5 ( ERP 2004) system, its a BADI Implementation CL_PT_ARQ_REQ and in ECC 6 system its an Enhancement implementation. We will discuss about Enhancement Implementation here.
You can copy the implementation CL_PT_ARQ_REQ and the implementing class. Add your new implementing class to the newly copied implementation. Uncheck the option implementation is active in the original BADI implementation (CL_PT_ARQ_REQ) in the Runtime Behavior of the Enh. Implementation Elements. You will add your code in this implementing class. Reference Interface for this class is " IF_EX_PT_ABS_REQ". After copying implementation and the class, you are now ready to add validations.
2. Methods in implementing class.
The implementing class has a method "SIMULATE_VIA_BLOP". Add validation code in this method. Read the IM_ATTABS_TAB deep structure to get the current absence details. You can validate your rules depending on the current absence record. Current absence record will give you Pernr, Leave type, Dates applied for, Time, Approver etc. Lets say we are implementing a Check for Maternity leave. We know Pernr and Leave type applied. From Pernr we can find out the gender and check against the leave type. If the employee is male then we want to display appropriate error message on ESS screen.
3. How to display an error message on ESS leave request.
This is the most important part. Create a message class using se91 and add an error message to it. Then use following method to display this message on ESS.
CALL METHOD MESSAGE_HANDLER->ADD_MESSAGE
IM_TYPE = 'E' "Type of Message
IM_CL = 'XXX' "Message class that you created
IM_NUMBER = 'XXX' "Message no
IM_PAR1 = 'SIMULATE_VIA_BLOP'
IM_PAR2 = 'IF_EX_PT_ABS_REQ~SIMULATE_VIA_BLOP' "Method name as in your impl.
IM_PAR3 = 'BLOP'
IM_CONTEXT = ''
IM_SUBCONTEXT = ''
IM_CLASSNAME = 'CL_PT_ARQ_BLOP_ADAPTER'
IM_METHODNAME = 'MESSAGE'.
This method will raise an error message on ESS leave request ( WebDynpro based).
Now many will argue that there are BADIs like HRPAD00INFTY and user exits that can be used for this same task. But problem with these BADIs is you can not display an error message on ESS screen. You can display an error message in R/3 (for PA30).
The good old user exits do not work on WD based ESS anymore. You have to replicate the validations in this leave specific BADI and use METHOD MESSAGE_HANDLER->ADD_MESSAGE to display error on ESS screen and restict users.