Skip to Content

SAP PMS – Dynamic Column Access

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

untitled.JPG

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.

untitled.JPG

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.

  1. Go to SE11 to create required domains.
  2. Create following domains:

untitled.JPG

  1. Create following Data elements:

 

   untitled.JPG

  1. Create database table ZHAP_COL_ACCESS from SE11 as per below structure.

untitled.JPG

  1. Go to Utilities(M)->Table Maintenance Generator and generate the maintenance screen with single screen. Activate the table.

      untitled.JPG

  1. Go to SE18 to enhance column access BADI – HRHAP00_COL_ACCESS.
  1. Implement BADI HRHAP00_COL_ACCESS by following menu path Enhancement Implementation->Create.

 

   untitled.JPG

  1. Create enhancement implementation ZHRHAP00_COL_ACCESS with proper filter value.

untitled.JPG

  1. Modify method GET_COLUMN_ACCESS.

      untitled.JPG

  1. 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.

  1. Activate the BADI implementation.

    

2.    Functional Steps

  1. Go to OOHAP_BASIC transaction code in configuration client in development system.
  1. Select Enhancement Area BA – Column Access

      untitled.JPG

  1. 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).

untitled.JPG

  1. Save the changes and import the transport in testing client(if applicable).

     

  1. 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.

untitled.JPG

  1. Open category and double click on Appraisal template and navigate to Processing tab of appraisal template.

     

  1. Click on the further template behavior button.

untitled.JPG

  1. 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.

 

   untitled.JPG

Maintaining Dynamic Column Access

  1. Go to SM31/SM30 transaction and access table  ZHAP_COL_ACCESS. Press Maintain Button.
  1. 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

untitled.JPG

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.

5 Comments
You must be Logged on to comment or reply to a post.