Skip to end of metadata
Go to start of metadata

Extraction of HCM Org.Structure with employee detials and history using Function Modules.

Link to Content's target Space :

http://wiki.sdn.sap.com/wiki/display/ABAP/ABAP+Development+and+Programming.

Applies to:

Developed in ECC 6.0 Ehp4, NW 7.01.

Summary

How to use Standard function modules and Classes to extract HCM Organization structure and employee assignment details along with history of assignments.

Author(s):  Vinod Kumar T

   
Company:     NIIT Technologies Limited
Created on:    14.06.2011
Author(s) Bio
Vinod Kumar is an ABAP consultant working with NIIT Technologied Ltd.

Table of Contents

Class method and Function modules Used

Object

Object Type

Description

CL_HAP_GENERIC=>GET_ACTIVE_PLAN_VERSION

Class method

Get Active Plan Version from System

HRCM_ORGSTRC_INFO_TABLE_GET

Function Module

Extract Organization Structure based on Root Org

HRCM_ORGUNIT_EMPLOYEE_LIST_GET

Function Module

Extract employees associated with Org. Unit

HRWPC_RFC_EP_READ_GENERALDATA

Function Module

Get employee general data

HRWPC_EP_READ_PAHISTORY

Function Module

Get employee assignment history


Input and Output Screens

     
Org structure in tree display


Click on required employee number to get more details about employee assignment and assignment history

Sample Code


*&----------------------------------------------------------------------------------*
*& Report  ZVK_PERNR_DETAILS
*&----------------------------------------------------------------------------------*
*& Report to extract Organization structure and associated Employee details
*& Function Modules used ::
*&   -- 1) HRCM_ORGSTRC_INFO_TABLE_GET    - To get Organization structure
*&   -- 2) HRCM_ORGUNIT_EMPLOYEE_LIST_GET - Get list of employees related to Org.unit
*&   -- 3) HRWPC_RFC_EP_READ_GENERALDATA  - To extract employee general profile
*&   -- 4) HRWPC_RFC_EP_READ_ORGHISTORY   - employee profile - Position/job/org.unit
*&-----------------------------------------------------------------------------------*

REPORT  zvk_pernr_details NO STANDARD PAGE HEADING.
TABLES : t527x.


DATA : lt_orginfo      TYPE STANDARD TABLE OF hrcm_orginfo,
       ls_orginfo      TYPE hrcm_orginfo,
       lt_pernr        TYPE STANDARD TABLE OF hrpernr,
       ls_pernr        TYPE hrpernr,
       lt_pernr_gdata  TYPE STANDARD TABLE OF hrwpc_s_ep_generaldata,
       ls_pernr_gdata  TYPE hrwpc_s_ep_generaldata,
       lt_positions    TYPE STANDARD TABLE OF hrwpc_s_ep_orginterval,
       ls_positions    TYPE hrwpc_s_ep_orginterval,
       lt_orgunits     TYPE STANDARD TABLE OF hrwpc_s_ep_orginterval,
       ls_orgunits     TYPE hrwpc_s_ep_orginterval,
       lt_jobs         TYPE STANDARD TABLE OF hrwpc_s_ep_orginterval,
       ls_jobs         TYPE hrwpc_s_ep_orginterval.

DATA : lv_plvar        TYPE plvar,
       lv_tlevel       TYPE slevel_d,
       lv_pernr        TYPE pernr_d.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : p_org     TYPE t527x-orgeh OBLIGATORY.
PARAMETERS : p_begda   TYPE begda OBLIGATORY DEFAULT '19000101'.
PARAMETERS : p_endda   TYPE endda OBLIGATORY DEFAULT '99991231' .
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_org.

START-OF-SELECTION.
*****************************************************
** Get Active plan version **
*****************************************************
  CLEAR : lv_plvar.
  cl_hap_generic=>get_active_plan_version(
    IMPORTING
      plan_version = lv_plvar ).

*****************************************************
** Get Organization structure of Input Organization**
*****************************************************
  IF lv_plvar IS INITIAL.
    MESSAGE 'Active version not available...' TYPE 'I' DISPLAY LIKE 'E'.
  ENDIF.

  REFRESH : lt_orginfo.
  CLEAR   : ls_orginfo.
  WRITE :/ 'Organization structure with employee list' COLOR 5.
  CALL FUNCTION 'HRCM_ORGSTRC_INFO_TABLE_GET'
    EXPORTING
      plvar          = lv_plvar
      root_otype     = 'O'
      root_objid     = p_org
      begda          = p_begda
      endda          = p_endda
    TABLES
      org_info_table = lt_orginfo
    EXCEPTIONS
      path_error     = 1
      root_error     = 2
      OTHERS         = 3.
  IF sy-subrc EQ 0.
    IF lt_orginfo[] IS NOT INITIAL.
      REFRESH : lt_pernr_gdata.
      LOOP AT lt_orginfo INTO ls_orginfo.
        CLEAR : lv_tlevel.
        lv_tlevel = ls_orginfo-tlevel + ls_orginfo-tlevel + 3.

        WRITE AT /lv_tlevel 'Org Unit -> ' COLOR 4.
        WRITE : ls_orginfo-objid COLOR 4 , ' - ', ls_orginfo-stext COLOR 4.

*****************************************************
** Get Employees related to Input Org. Unit**
*****************************************************
        lv_tlevel = lv_tlevel  + 5.
        REFRESH : lt_pernr.
        CALL FUNCTION 'HRCM_ORGUNIT_EMPLOYEE_LIST_GET'
          EXPORTING
            plvar              = lv_plvar
            otype              = 'O'
            objid              = ls_orginfo-objid
            begda              = ls_orginfo-begda
            endda              = ls_orginfo-endda
          TABLES
            pernr_table        = lt_pernr
          EXCEPTIONS
            path_error         = 1
            root_error         = 2
            no_employees_found = 3
            OTHERS             = 4.
        IF sy-subrc EQ 0.
          LOOP AT lt_pernr INTO ls_pernr.
            CLEAR : ls_pernr_gdata.
*****************************************************
** Get Employees related to Input Org. Unit**
*****************************************************
            CALL FUNCTION 'HRWPC_RFC_EP_READ_GENERALDATA'
              EXPORTING
                pernr            = ls_pernr-pernr
              IMPORTING
                generaldata      = ls_pernr_gdata
              EXCEPTIONS
                not_supported    = 1
                nothing_found    = 2
                no_authorization = 3
                internal_error   = 4
                OTHERS           = 5.
            IF sy-subrc NE 0.
              WRITE AT /lv_tlevel ls_pernr-pernr.
              CASE sy-subrc.
                WHEN 1.
                  WRITE : 'Not supported'.
                WHEN 2.
                  WRITE : 'No data'.
                WHEN 3.
                  WRITE : 'No authroization'.
                WHEN 4.
                  WRITE : 'Internal error'.
                WHEN 5.
                  WRITE : 'Unable to extract data'.
              ENDCASE.
            ELSE.
              APPEND ls_pernr_gdata TO lt_pernr_gdata.
              WRITE AT /lv_tlevel  ls_pernr-pernr HOTSPOT.
              WRITE : ls_pernr_gdata-ename,
                      ls_pernr_gdata-plans_text.
              MOVE ls_pernr_gdata-pernr TO lv_pernr.
              HIDE : lv_pernr.
            ENDIF.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

END-OF-SELECTION.

AT LINE-SELECTION.
*****************************************************
** General Data **
*****************************************************
  CLEAR : ls_pernr_gdata.
  READ TABLE lt_pernr_gdata INTO ls_pernr_gdata WITH KEY pernr = lv_pernr.
  IF sy-subrc EQ 0.
    WRITE :/ 'General Data Related to Employee No ->' COLOR 3, lv_pernr COLOR 3.
    WRITE :/.
    WRITE :/ 'Employee name     : ', ls_pernr_gdata-ename.
    WRITE :/ 'Start Date        : ', ls_pernr_gdata-entry_date, ' End Date : ', ls_pernr_gdata-leaving_date.
    WRITE :/ 'Personnel Area    : ', ls_pernr_gdata-werks, '/', ls_pernr_gdata-werks_text.
    WRITE :/ 'Personnel Subarea : ', ls_pernr_gdata-btrtl, '/', ls_pernr_gdata-btrtl_text.
    WRITE :/ 'Employee Group    : ', ls_pernr_gdata-persg, '/', ls_pernr_gdata-persg_text.
    WRITE :/ 'Employee SubGroup : ', ls_pernr_gdata-persk, '/', ls_pernr_gdata-persk_text.
    WRITE :/ 'Payroll Area      : ', ls_pernr_gdata-abkrs, '/', ls_pernr_gdata-abkrs_text.
    WRITE :/ 'Work contract     : ', ls_pernr_gdata-ansvh, '/', ls_pernr_gdata-ansvh_text.
    WRITE :/ 'Controlling Area  : ', ls_pernr_gdata-kokrs.
    WRITE :/ 'Cost center       : ', ls_pernr_gdata-kostl, '/', ls_pernr_gdata-kostl_text.
    WRITE :/ 'Org. Unit         : ', ls_pernr_gdata-orgeh, '/', ls_pernr_gdata-orgeh_text.
    WRITE :/ 'Job               : ', ls_pernr_gdata-stell, '/', ls_pernr_gdata-stell_text.
    WRITE :/ 'Position          : ', ls_pernr_gdata-plans, '/', ls_pernr_gdata-plans_text.
    WRITE :/ 'Pay scale         : ', ls_pernr_gdata-trfar, '/', ls_pernr_gdata-trfar_text.
    WRITE :/ 'Pay scale area    : ', ls_pernr_gdata-trfgb, '/', ls_pernr_gdata-trfgb_text.
    WRITE :/ 'Office Phone      : ', ls_pernr_gdata-office_tel.
    WRITE :/ 'Email             : ', ls_pernr_gdata-email+0(40).
  ENDIF.

*****************************************************
** Employee History **
*****************************************************
  REFRESH : lt_positions, lt_orgunits, lt_jobs.
  CLEAR   : ls_positions, ls_orgunits, ls_jobs.
  WRITE :/.
  WRITE :/ 'History Data Related to Employee No ->' COLOR 3, lv_pernr COLOR 3.

  CALL FUNCTION 'HRWPC_EP_READ_PAHISTORY'
    EXPORTING
      persno           = lv_pernr
      begda            = p_begda
      endda            = p_endda
      authority_check  = 'X'
    TABLES
      positions        = lt_positions
      orgunits         = lt_orgunits
      jobs             = lt_jobs
    EXCEPTIONS
      internal_error   = 1
      no_authorization = 2
      nothing_found    = 3
      OTHERS           = 4.
  IF sy-subrc <> 0.
    WRITE :/ ls_pernr-pernr.
    CASE sy-subrc.
      WHEN 1.
        WRITE : 'Internal error'.
      WHEN 2.
        WRITE : 'No authroization'.
      WHEN 3.
        WRITE : 'No data'.
      WHEN 4.
        WRITE : 'Unable to extract data'.
    ENDCASE.

  ELSE.
    WRITE :/.
    WRITE :/ ' Positions : ' COLOR 4.
    LOOP AT lt_positions INTO ls_positions.
      WRITE :/ 'Period : ', ls_positions-begda, ' - ',ls_positions-endda.
      WRITE : 'Position : ', ls_positions-objid+0(8), '/', ls_positions-text.
    ENDLOOP.

    WRITE :/.
    WRITE :/ ' Organization units : ' COLOR 4.
    LOOP AT lt_orgunits INTO ls_orgunits.
      WRITE :/ 'Period : ', ls_orgunits-begda, ' - ',ls_orgunits-endda.
      WRITE : 'Org Unit : ', ls_orgunits-objid+0(8), '/', ls_orgunits-text.
    ENDLOOP.

    WRITE :/.
    WRITE :/ ' Jobs : ' COLOR 4.
    LOOP AT lt_jobs INTO ls_jobs.
      WRITE :/ 'Period : ', ls_jobs-begda, ' - ',ls_jobs-endda.
      WRITE : 'Job : ', ls_jobs-objid+0(8), '/', ls_jobs-text.
    ENDLOOP.
  ENDIF.

Related Content


Useful Information

Organization structure using function modules

  1. Guest

    Hi Vinod,

     would like to add you in my Network.Please visit my profile in Linkedin or mail me on sarita_pandit@yahoo.com.

    Thanks and Regards

    Sarita

  2. Guest

    Hi Vinod,

     would like to add you in my Network.Please visit my profile in Linkedin or mail me on sarita_pandit@yahoo.com.

    Thanks and Regards

    Sarita