Overview:
This document explains how to display approver’s details of HCM Process and Forms in required format.
I have tried in different ways and find this solution finally and thought it may useful for others too .
Identification/Issues in standard:
In process of finding solution i observed below points
Requirement:
Name | Position | Date | Time | Status |
---|---|---|---|---|
Solution Steps:
Step 1: Create Custom Table
I have created a custom generic table to capture all processes and forms approval details
Step2 : Enhance standard class
After debugging the standard application find it's triggering the class CL_QISR_UI_PROCESS_EVENT_MODEL at different even triggers.
Did enhancement to this standard class CL_QISR_UI_PROCESS_EVENT_MODEL in method EXECUTE
In method write the logic based on requirement, here i have coded based on events trigger at each level.
CLASS LCL_ZHR_FORMS_APPROVALS1 DEFINITION DEFERRED.
CLASS CL_QISR_UI_PROCESS_EVENT_MODEL DEFINITION LOCAL FRIENDS LCL_ZHR_FORMS_APPROVALS1.
*----------------------------------------------------------------------*
* CLASS LCL_ZHR_FORMS_APPROVALS1 DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_ZHR_FORMS_APPROVALS1 DEFINITION.
PUBLIC SECTION.
CLASS-DATA OBJ TYPE REF TO LCL_ZHR_FORMS_APPROVALS1. "#EC NEEDED
DATA CORE_OBJECT TYPE REF TO CL_QISR_UI_PROCESS_EVENT_MODEL . "#EC NEEDED
INTERFACES IOW_ZHR_FORMS_APPROVALS1.
METHODS:
CONSTRUCTOR IMPORTING CORE_OBJECT
TYPE REF TO CL_QISR_UI_PROCESS_EVENT_MODEL OPTIONAL.
ENDCLASS. "LCL_ZHR_FORMS_APPROVALS1 DEFINITION
*----------------------------------------------------------------------*
* CLASS LCL_ZHR_FORMS_APPROVALS1 IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_ZHR_FORMS_APPROVALS1 IMPLEMENTATION.
METHOD CONSTRUCTOR.
ME->CORE_OBJECT = CORE_OBJECT.
ENDMETHOD. "CONSTRUCTOR
METHOD IOW_ZHR_FORMS_APPROVALS1~EXECUTE.
*"------------------------------------------------------------------------*
*" Declaration of Overwrite-method, do not insert any comments here please!
*"
*"methods EXECUTE .
*"------------------------------------------------------------------------*
DATA LS_MESSAGE TYPE LINE OF QISRTRETURN.
DATA: LS_DATA TYPE LINE OF QISRTREQUEST_DATA.
DATA: LT_APPROVERS TYPE TABLE OF ZHR_FORM_APPRDTL,
LS_APPROVERS TYPE ZHR_FORM_APPRDTL,
LV_INDEX TYPE I.
LOG-POINT ID QISR_UI SUBKEY SY-UZEIT FIELDS CORE_OBJECT->NOTIF_NO_OUT CORE_OBJECT->RETURN CORE_OBJECT->ISR_FORM_VIEW
CORE_OBJECT->ISR_PAGE_OUT CORE_OBJECT->GENERAL_DATA_OUT CORE_OBJECT->DATA CORE_OBJECT->ADDITIONAL_DATA CORE_OBJECT->EXTERNAL_DATA
CORE_OBJECT->MESSAGE_LIST CORE_OBJECT->UI_ATTRIBUTES_DATA.
IF CORE_OBJECT->MODE EQ 'CREATE'.
CALL FUNCTION 'ISR_PROCESS_EVENT_WD'
EXPORTING
SCENARIO = CORE_OBJECT->SCENARIO
MODE = CORE_OBJECT->MODE
NOTIF_NO = CORE_OBJECT->NOTIF_NO
EVENT = CORE_OBJECT->EVENT
FLAG_INOUT_CONVERSION = CORE_OBJECT->FLAG_INOUT_CONVERSION
FLAG_RESET = CORE_OBJECT->FLAG_RESET
ISR_PAGE_IN = CORE_OBJECT->ISR_PAGE_IN
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA
IMPORTING
NOTIF_NO_OUT = CORE_OBJECT->NOTIF_NO_OUT
RETURN = CORE_OBJECT->RETURN
ISR_FORM_VIEW = CORE_OBJECT->ISR_FORM_VIEW
ISR_PAGE_OUT = CORE_OBJECT->ISR_PAGE_OUT
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA_OUT
TABLES
DATA = CORE_OBJECT->DATA
ADDITIONAL_DATA = CORE_OBJECT->ADDITIONAL_DATA
EXTERNAL_DATA = CORE_OBJECT->EXTERNAL_DATA
MESSAGE_LIST = CORE_OBJECT->MESSAGE_LIST
UI_ATTRIBUTES = CORE_OBJECT->UI_ATTRIBUTES_DATA.
ELSEIF CORE_OBJECT->EVENT EQ 'REJECT' OR CORE_OBJECT->EVENT EQ 'BACKTO'.
READ TABLE CORE_OBJECT->DATA INTO LS_DATA WITH KEY FIELDNAME = 'HRASR_CURRENT_NOTE'.
IF LS_DATA-FIELDVALUE IS INITIAL.
MOVE 'E' TO LS_MESSAGE-TYPE.
MOVE 'ZHR_ESSMSS_MSG_CLASS' TO LS_MESSAGE-ID.
MOVE '041' TO LS_MESSAGE-NUMBER.
APPEND LS_MESSAGE TO CORE_OBJECT->MESSAGE_LIST.
MOVE LS_MESSAGE TO CORE_OBJECT->RETURN.
ELSEIF LS_DATA-FIELDVALUE IS NOT INITIAL.
CALL FUNCTION 'ISR_PROCESS_EVENT_WD'
EXPORTING
SCENARIO = CORE_OBJECT->SCENARIO
MODE = CORE_OBJECT->MODE
NOTIF_NO = CORE_OBJECT->NOTIF_NO
EVENT = CORE_OBJECT->EVENT
FLAG_INOUT_CONVERSION = CORE_OBJECT->FLAG_INOUT_CONVERSION
FLAG_RESET = CORE_OBJECT->FLAG_RESET
ISR_PAGE_IN = CORE_OBJECT->ISR_PAGE_IN
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA
IMPORTING
NOTIF_NO_OUT = CORE_OBJECT->NOTIF_NO_OUT
RETURN = CORE_OBJECT->RETURN
ISR_FORM_VIEW = CORE_OBJECT->ISR_FORM_VIEW
ISR_PAGE_OUT = CORE_OBJECT->ISR_PAGE_OUT
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA_OUT
TABLES
DATA = CORE_OBJECT->DATA
ADDITIONAL_DATA = CORE_OBJECT->ADDITIONAL_DATA
EXTERNAL_DATA = CORE_OBJECT->EXTERNAL_DATA
MESSAGE_LIST = CORE_OBJECT->MESSAGE_LIST
UI_ATTRIBUTES = CORE_OBJECT->UI_ATTRIBUTES_DATA.
ENDIF.
ELSEIF CORE_OBJECT->MODE EQ 'DISPLAY' OR CORE_OBJECT->EVENT EQ 'APPROVE' OR
CORE_OBJECT->MODE EQ 'CHANGE' OR CORE_OBJECT->EVENT EQ 'DISPLAY'.
CALL FUNCTION 'ISR_PROCESS_EVENT_WD'
EXPORTING
SCENARIO = CORE_OBJECT->SCENARIO
MODE = CORE_OBJECT->MODE
NOTIF_NO = CORE_OBJECT->NOTIF_NO
EVENT = CORE_OBJECT->EVENT
FLAG_INOUT_CONVERSION = CORE_OBJECT->FLAG_INOUT_CONVERSION
FLAG_RESET = CORE_OBJECT->FLAG_RESET
ISR_PAGE_IN = CORE_OBJECT->ISR_PAGE_IN
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA
IMPORTING
NOTIF_NO_OUT = CORE_OBJECT->NOTIF_NO_OUT
RETURN = CORE_OBJECT->RETURN
ISR_FORM_VIEW = CORE_OBJECT->ISR_FORM_VIEW
ISR_PAGE_OUT = CORE_OBJECT->ISR_PAGE_OUT
GENERAL_DATA = CORE_OBJECT->GENERAL_DATA_OUT
TABLES
DATA = CORE_OBJECT->DATA
ADDITIONAL_DATA = CORE_OBJECT->ADDITIONAL_DATA
EXTERNAL_DATA = CORE_OBJECT->EXTERNAL_DATA
MESSAGE_LIST = CORE_OBJECT->MESSAGE_LIST
UI_ATTRIBUTES = CORE_OBJECT->UI_ATTRIBUTES_DATA.
READ TABLE CORE_OBJECT->DATA INTO LS_DATA WITH KEY FIELDNAME = 'PROCESS_REFERENCE_NUMBER'.
IF LS_DATA IS NOT INITIAL.
SELECT * FROM ZHR_FORM_APPRDTL INTO TABLE LT_APPROVERS WHERE PROCESSREFNO EQ LS_DATA-FIELDVALUE.
IF LT_APPROVERS[] IS NOT INITIAL.
LOOP AT LT_APPROVERS INTO LS_APPROVERS.
MOVE SY-TABIX TO LV_INDEX.
CLEAR LS_DATA.
MOVE LV_INDEX TO LS_DATA-FIELDINDEX.
MOVE 'HRASR_APPRPOS' TO LS_DATA-FIELDNAME.
MOVE LS_APPROVERS-LAPPRPOS TO LS_DATA-FIELDVALUE.
MOVE 'X' TO LS_DATA-FIELDDISABLED.
MOVE 'Approver Position' TO LS_DATA-FIELDLABEL_M.
MOVE 'Approver Position' TO LS_DATA-FIELDLABEL_L.
APPEND LS_DATA TO CORE_OBJECT->DATA.
CLEAR LS_DATA.
MOVE LV_INDEX TO LS_DATA-FIELDINDEX.
MOVE 'HRASR_APPRNAME' TO LS_DATA-FIELDNAME.
MOVE LS_APPROVERS-LAPPRNAME TO LS_DATA-FIELDVALUE.
MOVE 'X' TO LS_DATA-FIELDDISABLED.
MOVE 'Approver Name' TO LS_DATA-FIELDLABEL_M.
MOVE 'Approver Name' TO LS_DATA-FIELDLABEL_L.
APPEND LS_DATA TO CORE_OBJECT->DATA.
CLEAR LS_DATA.
MOVE LV_INDEX TO LS_DATA-FIELDINDEX.
MOVE 'HRASR_APPRDATE' TO LS_DATA-FIELDNAME.
MOVE LS_APPROVERS-LAPPRDATE TO LS_DATA-FIELDVALUE.
MOVE 'X' TO LS_DATA-FIELDDISABLED.
MOVE 'Approver Date' TO LS_DATA-FIELDLABEL_M.
MOVE 'Approver Date' TO LS_DATA-FIELDLABEL_L.
APPEND LS_DATA TO CORE_OBJECT->DATA.
CLEAR LS_DATA.
MOVE LV_INDEX TO LS_DATA-FIELDINDEX.
MOVE 'HRASR_APPRTIME' TO LS_DATA-FIELDNAME.
MOVE LS_APPROVERS-LAPPRTIME TO LS_DATA-FIELDVALUE.
MOVE 'X' TO LS_DATA-FIELDDISABLED.
MOVE 'Approver Time' TO LS_DATA-FIELDLABEL_M.
MOVE 'Approver Time' TO LS_DATA-FIELDLABEL_L.
APPEND LS_DATA TO CORE_OBJECT->DATA.
CLEAR LS_DATA.
MOVE LV_INDEX TO LS_DATA-FIELDINDEX.
MOVE 'HRASR_APPRSTATUS' TO LS_DATA-FIELDNAME.
MOVE LS_APPROVERS-STATUS TO LS_DATA-FIELDVALUE.
MOVE 'X' TO LS_DATA-FIELDDISABLED.
MOVE 'Approver Status' TO LS_DATA-FIELDLABEL_M.
MOVE 'Approver Status' TO LS_DATA-FIELDLABEL_L.
APPEND LS_DATA TO CORE_OBJECT->DATA.
CLEAR LV_INDEX.
ENDLOOP.
ENDIF.
ENDIF.
ENDIF.
LOG-POINT ID QISR_UI SUBKEY SY-UZEIT FIELDS CORE_OBJECT->NOTIF_NO_OUT CORE_OBJECT->RETURN CORE_OBJECT->ISR_FORM_VIEW
CORE_OBJECT->ISR_PAGE_OUT CORE_OBJECT->GENERAL_DATA_OUT CORE_OBJECT->DATA CORE_OBJECT->ADDITIONAL_DATA CORE_OBJECT->EXTERNAL_DATA CORE_OBJECT->MESSAGE_LIST CORE_OBJECT->UI_ATTRIBUTES_DATA.
ENDMETHOD. "IOW_ZHR_FORMS_APPROVALS1~EXECUTE
ENDCLASS.
Step 3: Design Form fields
In form interface add below fields
HRASR_APPRNAME TYPE QISR_TAB_TYPE_STRING
HRASR_APPRDATE TYPE QISR_TAB_TYPE_STRING
HRASR_APPRSTATUS TYPE QISR_TAB_TYPE_STRING
HRASR_APPRTIME TYPE QISR_TAB_TYPE_STRING
HRASR_APPRPOS TYPE QISR_TAB_TYPE_STRING
In Form, import these parameters into form design.
In Form design add all these fields with required table properties as shown below
Step 4: Custom class for updating the approvers
Create a custom class as shown below
Define parameters for UPDFORM_APPRDTLS method.
Write below logic in method.
METHOD UPDFORM_APPRDTLS.
DATA : LS_FORMAPPR TYPE ZHR_FORM_APPRDTL,
LS_FORMAPPR1 TYPE ZHR_FORM_APPRDTL.
IF WRKID IS NOT INITIAL.
MOVE WRKID TO LS_FORMAPPR-WRKID.
MOVE PROCESSREFNO TO LS_FORMAPPR-PROCESSREFNO.
MOVE PROCESSNAME TO LS_FORMAPPR-PROCESSNAME.
MOVE FORMSCENARIO TO LS_FORMAPPR-FORMSCENARIO.
MOVE PROCESSGUID TO LS_FORMAPPR-PROCESSGUID.
MOVE PROCESSPGUID TO LS_FORMAPPR-PROCESSPGUID.
MOVE INITIATOR TO LS_FORMAPPR-INITIATOR.
MOVE ROLEOFINITIATOR TO LS_FORMAPPR-ROLEOFINITIATOR.
MOVE EMPPERNR TO LS_FORMAPPR-EMPPERNR.
MOVE LAPPRDATE TO LS_FORMAPPR-LAPPRDATE.
MOVE LAPPRTIME TO LS_FORMAPPR-LAPPRTIME.
MOVE LAPPRID TO LS_FORMAPPR-LAPPRID.
MOVE LAPPRNAME TO LS_FORMAPPR-LAPPRNAME.
MOVE LAPPRPOS TO LS_FORMAPPR-LAPPRPOS.
MOVE LAPPRLVL TO LS_FORMAPPR-LAPPRLVL.
MOVE STATUS TO LS_FORMAPPR-STATUS.
MOVE LAPPRCOMENTS TO LS_FORMAPPR-LAPPRCOMENTS.
SELECT SINGLE * FROM ZHR_FORM_APPRDTL INTO LS_FORMAPPR1 WHERE WRKID EQ WRKID.
IF SY-SUBRC EQ 0.
UPDATE ZHR_FORM_APPRDTL FROM LS_FORMAPPR.
ELSE.
INSERT ZHR_FORM_APPRDTL FROM LS_FORMAPPR.
ENDIF.
ENDIF.
CLEAR: LS_FORMAPPR, LS_FORMAPPR1.
ENDMETHOD.
Step 5: Create a Custom task
Create one custom task to use in all processes and forms workflow's
Step 6: Workflow Design
In workflow put a task step after approval step and update the approver details.
Output in Portal HCM Process and Forms:
Note: This is done in EHP5/6. If you have any better solution please do update.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 |