What is Column Access in SAP Performance Management?
During configuration of appraisal template, different appraisal attributes are configured in form of criteria group and criteria. This appraisal attribute can have different columns like weightage, target, actual against target, rating ect.
For example: There can be different appraisal attributes pertaining to goals, competencies, development areas, trainings etc as per the organization’s need. These attributes can have different columns such as attribute text, weightage, target, actual against target, appraiser rating, reviewer rating, final rating ect.
uring different phase of appraisal process, it is required to hide/display/change certain columns of appraisal attributes. During goal setting process, attribute (goal) text, weightage, target, date, Initiatives etc may be required in edit mode and columns such as appraisal rating/self rating/reviewer rating/actual against target should be hidden.
Same way, during appraisal evaluation process, goal text, weightage, target, date, Initiatives etc columns will be required in display mode and self rating/actual against target/appraiser rating/reviewer rating will be displayed in changed mode.
Thus, standard column access provides different level of column access at different status of appraisal process such as In Planning/In review/In process.
Limitation of Standard Column Access
ñ Standard column access is limited only up to Status of Appraisal document. There is no provision to do column access configuration on Sub status level. Standard column access can be maintained for below statuses only:
Availale Options |
Applicable Appraisal Status |
---|---|
Planning Owner | In Planning |
Planning Others | In Planning |
Reviewer Owner | In Review |
Reviewer Others | In Review |
Final Appraisar Owner | In Process |
Final Appraisal Others | In Process |
Sometimes it is required to show the attribute column to one participant in display mode and hide the same column to other participant.
Let’s take an example of performance evaluation phase which is having status as “In Process”. Appraiser is the owner of Appraiser rating column. This column is not to be visible to appraisee and to be shown in display mode to reviewers.
To achieve this, one can make appraiser as the owner of this column. Final Appraisal Owner will have value as “Change” but Other Final Appraisal can not have value Hide for appraisee and Display for Further participants. This has to be achieved via column access BADI HRHAP00_COL_ACCESS.
- Standard column access is not able to provide different access to different further participants.
If there are more than one reviewers in further participant role(Reivewer 1, Reviewer 2) and it is required to provide different column access to different level of reviewer, this can not be achieved via standard column access.
- If there are multiple sub status within one status, different column access to same participant in different sub status is not possible.
Below is the example, where two different column access is required to appraiser in same In Process status. Column access shown in red color can not be achieved if we set the column access as Change in standard configuration.
Features of Dynamic Column Access
ñ User friendly maintenance from SM30/SM31 transaction.
ñ Single enhancement required for all appraisal templates.
ñ It provides flexibility to set the column access to different participants at sub-status level during appraisal process.
ñ Different column access can be provided to different participants for the same status/sub-status combination.
ñ Provision to change the column access to all available values like irrespective of column owner.
1. Change
2. Display
3. Hide
4. Hide (Value Determination in Background)
5. Display, Add Note
6. Display for Appraiser
7. Change for Appraiser, Display for Others
8. Change for Appraiser, Hide for Others
Solution Approach
The solution of dynamic column access lies in technical and functional area. Technical help is required from ABAP consultant to implement this solution.
1. Technical Steps
1.
- Go to SE11 to create required domains.
- Create following domains:
- Create following Data elements:
- Create database table ZHAP_COL_ACCESS from SE11 as per below structure.
- Go to Utilities(M)->Table Maintenance Generator and generate the maintenance screen with single screen. Activate the table.
- Go to SE18 to enhance column access BADI – HRHAP00_COL_ACCESS.
- Implement BADI HRHAP00_COL_ACCESS by following menu path Enhancement Implementation->Create.
- Create enhancement implementation ZHRHAP00_COL_ACCESS with proper filter value.
- Modify method GET_COLUMN_ACCESS.
- Insert following source code.
DATA : lw_appraisee LIKE LINE OF t_header_appraisee.
DATA : lv_appraisee TYPE sy-uname.
DATA : lv_uname TYPE sy-uname.
DATA : wt_header_others LIKE LINE OF t_header_others.
DATA : gv_reviewer1 TYPE sy-uname.
DATA : gv_reviewer2 TYPE sy-uname.
DATA : gv_uname TYPE sy-uname.
DATA : tm_header_others TYPE hap_t_header_others.
DATA : it_zhap_col_access TYPE STANDARD TABLE OF zhap_col_access.
DATA : wa_zhap_col_access TYPE zhap_col_access.
DATA : lv_pernr TYPE pernr-pernr.
DATA : lw_appraiser LIKE LINE OF t_header_appraiser.
DATA : lv_appraiser TYPE sy-uname.
DATA : lw_others LIKE LINE OF t_header_others.
DATA : lv_others TYPE sy-uname.
DATA : lw_part LIKE LINE OF t_header_part_appraisers.
DATA : lv_part TYPE sy-uname.
WHEN ‘ZPMS_OFFICER’.
*******Start of addition – Mihir Nagar..********
** read dynamic column access table…
CLEAR: it_zhap_col_access[], wa_zhap_col_access.
SELECT * FROM zhap_col_access INTO TABLE it_zhap_col_access
WHERE app_template = template_id
AND app_status = s_header_status-ap_status
AND app_status_sub = s_header_status-ap_status_sub
AND column_id = s_body_columns-column_id.
******get personnel number of login user….
SELECT SINGLE pernr FROM pa0105 INTO lv_pernr
WHERE subty = ‘0001’
AND endda GE sy-datum
AND begda LE sy-datum
AND usrid EQ sy-uname.
CHECK sy-subrc = 0.
******check if login user is appraisee…
READ TABLE t_header_appraisee INTO lw_appraisee WITH KEY id = lv_pernr.
IF sy-subrc EQ 0.
LOOP AT it_zhap_col_access INTO wa_zhap_col_access WHERE user_type = ‘APEE’.
IF wa_zhap_col_access-old_access = ‘*’.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ELSEIF availability = wa_zhap_col_access-old_access.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ENDIF.
ENDLOOP.
ENDIF.
******check if login user is appraiser…
READ TABLE t_header_appraiser INTO lw_appraiser WITH KEY id = lv_pernr.
IF sy-subrc EQ 0.
LOOP AT it_zhap_col_access INTO wa_zhap_col_access WHERE user_type = ‘APPR’.
IF wa_zhap_col_access-old_access = ‘*’.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ELSEIF availability = wa_zhap_col_access-old_access.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ENDIF.
ENDLOOP.
ENDIF.
******check if login user is reviewer – further participants…
READ TABLE t_header_others INTO lw_others WITH KEY id = lv_pernr.
IF sy-subrc EQ 0.
LOOP AT it_zhap_col_access INTO wa_zhap_col_access
WHERE user_type = ‘FRTH’ AND
role_id = lw_others-role_id.
IF wa_zhap_col_access-old_access = ‘*’.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ELSEIF availability = wa_zhap_col_access-old_access.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ENDIF.
ENDLOOP.
ENDIF.
******check if login user is part appraiser…
READ TABLE t_header_part_appraisers INTO lw_part WITH KEY id = lv_pernr.
IF sy-subrc EQ 0.
LOOP AT it_zhap_col_access INTO wa_zhap_col_access WHERE user_type = ‘PAPR’.
IF wa_zhap_col_access-old_access = ‘*’.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ELSEIF availability = wa_zhap_col_access-old_access.
availability = wa_zhap_col_access-new_access.
column_owner = wa_zhap_col_access-col_owner.
ENDIF.
ENDLOOP.
ENDIF.
* End of addition – Mihir Nagar.
- Activate the BADI implementation.
2. Functional Steps
- Go to OOHAP_BASIC transaction code in configuration client in development system.
- Select Enhancement Area BA – Column Access
- Double click on Enhancement. Press create “New Entries” button and press F4 button to see available enhancements. Select newly created enhancement. (ZPMS_OFFICER in this case).
- Save the changes and import the transport in testing client(if applicable).
- Go to transaction PHAP_CATALOG. Double click on Category. Go to “Enhancement” tab on the right panel. Newly created enhancement will be available under Available tab. Select the new enhancement (ZPMS_OFFICER in this case) and press Move left button. Save category.
- Open category and double click on Appraisal template and navigate to Processing tab of appraisal template.
- Click on the further template behavior button.
- Pop-up will come up to choose the enhancement. Press Add entry button and select appropriate enhancement. Click green OK button. Save and release appraisal document.
Maintaining Dynamic Column Access
- Go to SM31/SM30 transaction and access table ZHAP_COL_ACCESS. Press Maintain Button.
- Below is detailed information about each table field:
- Element ID – Provide Appraisal Template ID
- Appraisal Status- Appraisal Document Status
- Sub-Status – Appraisal Document Sub-status
- Column ID – Column ID
- User Type – APPR for Appraiser
APEE for Appraisee
FRTH for Further Participants (Reviewers)
PAPR for Part participant
- Role – Applicable only in case of Further Participant. Can have values like MA, MB, ME, PR etc. from Role tab of Appraisal category
- Old Access – Old Column Access(can be generalized by providing *)
- New Access – New Column Access
- Column Owner – Values can be Space or X. To specify or change column owner
Limitation of Dynamic Column Access
Dynamic column access will change the column access as per the table entries done however column owner has to be defined at template level.
Column access BADI provides an option to change the column owner as an export parameter. The same has been mapped with COL_OWNER field of table ZHAP_COL_ACCESS. However it is observed that it has no impact on column owner. Hence Column owner has to be defined at a template level.
Excellent...
Amazing blog !
this is good explanation.
Excellent blog cover both Customizing as well development setting.
Keep the good work....doing.
Regards,
Dadarao
Thank you 🙂