Thursday, 4 January 2018

How to update JOB Object and Organizational Unit to Infotype 0001?


First need to fetch data from relationship table which is HRP1001.
All relationship object ( SOBID field )  description is available in HRP1000.





REPORT zchange_1001_pos_0001.

DATA gt_1001    TYPE STANDARD TABLE OF hrp1001,
       gs_1001    TYPE hrp1001,
       gs_0001    TYPE pa0001,
       gs_p0001   TYPE p0001,
       lv_plans   TYPE plans,
       ls_return  TYPE bapireturn1,
       lv_hrobjid TYPE hrp1001-objid.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS s_objid FOR lv_hrobjid.
PARAMETERS p_job RADIOBUTTON GROUP r1,
             p_org RADIOBUTTON GROUP r1.
SELECTION-SCREEN END OF BLOCK b1.

START-OF-SELECTION.

  IF p_job IS NOT INITIAL.

    SELECT FROM hrp1001 INTO TABLE gt_1001 WHERE objid IN s_objid
                AND otype 'S'        AND sclas 'C'
                AND endda '99991231' AND subty 'B007'.
    IF sy-subrc 0.
      LOOP AT gt_1001 INTO gs_1001.
        CLEAR lv_plansgs_0001gs_p0001.
        lv_plans gs_1001-objid.
        SELECT SINGLE FROM pa0001 INTO gs_0001 WHERE plans lv_plans AND endda '99991231'.
        IF sy-subrc 0.
          MOVE-CORRESPONDING gs_0001 TO gs_p0001.
          gs_p0001-infty '0001'.
          IF gs_p0001-stell NE gs_1001-sobid.
            gs_p0001-stell gs_1001-sobid.
            CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
              EXPORTING
                number gs_0001-pernr
              IMPORTING
                return ls_return.
            IF ls_return IS INITIAL.
              CALL FUNCTION 'HR_INFOTYPE_OPERATION'
                EXPORTING
                  infty         '0001'
                  number        gs_0001-pernr
                  validityend   gs_0001-endda
                  validitybegin gs_0001-begda
                  record        gs_p0001
                  operation     'MOD'
                IMPORTING
                  return        ls_return.
              IF ls_return-type 'E'.
                WRITE / gs_0001-pernr'---Not Executed'ls_return-message.
              ELSE.
                WRITE / gs_0001-pernr'---Executed'.
              ENDIF.
              CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
                EXPORTING
                  number gs_0001-pernr
                IMPORTING
                  return ls_return.
            ELSE.
              WRITE / gs_0001-pernr'--Locked'.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.

  ELSEIF p_org IS NOT INITIAL.

    SELECT FROM hrp1001 INTO TABLE gt_1001 WHERE objid IN s_objid
              AND otype 'S' AND sclas 'O'
              AND endda '99991231' AND subty 'A003'.
    IF sy-subrc 0.
      LOOP AT gt_1001 INTO gs_1001.
        CLEAR lv_plansgs_0001gs_p0001.
        lv_plans gs_1001-objid.
        SELECT SINGLE FROM pa0001 INTO gs_0001 WHERE plans lv_plans AND endda '99991231'.
        IF sy-subrc 0.
          MOVE-CORRESPONDING gs_0001 TO gs_p0001.
          gs_p0001-infty '0001'.
          IF gs_p0001-orgeh NE gs_1001-sobid.
            gs_p0001-orgeh gs_1001-sobid.
            CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE'
              EXPORTING
                number gs_0001-pernr
              IMPORTING
                return ls_return.
            IF ls_return IS INITIAL.
              CALL FUNCTION 'HR_INFOTYPE_OPERATION'
                EXPORTING
                  infty         '0001'
                  number        gs_0001-pernr
                  validityend   gs_0001-endda
                  validitybegin gs_0001-begda
                  record        gs_p0001
                  operation     'MOD'
                IMPORTING
                  return        ls_return.
              IF ls_return-type 'E'.
                WRITE / gs_0001-pernr'---Not Executed'ls_return-message.
              ELSE.
                WRITE / gs_0001-pernr'---Executed'.
              ENDIF.
              CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE'
                EXPORTING
                  number gs_0001-pernr
                IMPORTING
                  return ls_return.
            ELSE.
              WRITE / gs_0001-pernr'--Locked'.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDIF.

No comments:

Post a Comment