Monday, April 28, 2025

DeCouple Framework - ABAP HR - OOPS - Insert/update

 Call the Utility method

          CALL METHOD ZCL_DATA_LOAD_UTILITY=>infotype_operation

            EXPORTING

              ip_infty      = <wa>-infty

              ip_action     = ls_taskdata-importing-gv_action

              no_auth_check = abap_true

              iv_test_run   = ls_taskdata-importing-cb_test

              iv_no_retro   = ls_taskdata-importing-gv_noretro

            IMPORTING

*             ev_ok         =

              ev_return     = lv_return

            CHANGING

              pnnnn         = <wa>.

------------------------------------------------------------------------------------------------------

SIGNATURE:

IP_INFTY TYPE INFTY OPTIONAL Infotype

IP_ACTION TYPE PSPAR-ACTIO Infotype operation

NO_AUTH_CHECK TYPE BOOLE_D OPTIONAL Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')

IV_TEST_RUN TYPE XFELD Checkbox

IV_NO_RETRO TYPE BOOLE_D OPTIONAL Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')

PRELP TYPE PRELP_TAB OPTIONAL Table of Generic Infotypes

EV_OK TYPE XFELD Checkbox

EV_RETURN TYPE BAPIRET2 Return Parameter

PNNNN TYPE ANY OPTIONAL

PREF TYPE PREF OPTIONAL Assignment Values for HR Objects

------------------------------------------------------------------------------------------------------

    METHOD infotype_operation.

      DATA: lo_hrpa_infotype_access TYPE REF TO if_hrpa_plain_infotype_access,

            lo_ref_wdata            TYPE REF TO data,

            lo_message_handler      TYPE REF TO cl_hrpa_message_list,

            lo_magic_cookie         TYPE REF TO if_hrpa_token,

            lo_ex                   TYPE REF TO cx_root,

            lr_pnnnn_t              TYPE REF TO data.


      DATA: lv_is_ok       TYPE boole_d,

            lv_error_text  TYPE string,

            lv_message     TYPE bapi_msg,

            lv_return_new  TYPE bapiret2,

            lv_ok          TYPE xfeld,

            lv_tabname     TYPE tabname,

            lv_pernr       TYPE pernr_d,

            lt_return      TYPE hrpad_message_tab,

            ls_return      TYPE hrpad_message,

            ls_update_mode TYPE hrpad_update_mode,

            ls_pskey       TYPE pskey,

            ls_prelp       TYPE prelp,

            lt_prelp       TYPE prelp_tab.


      CONSTANTS: lc_tclas_a  TYPE tclas VALUE 'A'.

      FIELD-SYMBOLS: <l_field> TYPE any.



      ls_update_mode-no_ale           = abap_true.

      ls_update_mode-no_workflow      = abap_true.

      IF iv_no_retro IS SUPPLIED.

        ls_update_mode-no_retroactivity = iv_no_retro.

      ENDIF.

      CREATE OBJECT lo_message_handler.


      CLEAR: ls_return, lv_return_new, ev_ok, lv_pernr, ls_pskey, ls_prelp,lt_prelp[].


      IF ip_infty IS NOT INITIAL.

        CONCATENATE 'P' ip_infty INTO lv_tabname.

        CREATE DATA  lo_ref_wdata  TYPE (lv_tabname).

        ASSIGN lo_ref_wdata->* TO FIELD-SYMBOL(<fs_pnnnn>).

        <fs_pnnnn> = pnnnn.

        cl_hr_pnnnn_type_cast=>pnnnn_to_prelp( EXPORTING pnnnn = <fs_pnnnn> IMPORTING prelp = ls_prelp ).

        APPEND ls_prelp TO lt_prelp.

        CLEAR ls_prelp.

        UNASSIGN <fs_pnnnn>.

      ENDIF.


      IF prelp IS NOT INITIAL.

        APPEND LINES OF prelp TO lt_prelp.

      ENDIF.


      LOOP AT lt_prelp INTO ls_prelp.

**********************************************************

        "Create Infotype STructure

**********************************************************

        CONCATENATE 'P' ls_prelp-infty INTO lv_tabname.

        CREATE DATA  lo_ref_wdata  TYPE (lv_tabname).

        ASSIGN lo_ref_wdata->* TO <fs_pnnnn>.

        cl_hr_pnnnn_type_cast=>prelp_to_pnnnn( EXPORTING prelp = ls_prelp IMPORTING pnnnn = <fs_pnnnn> ).

        ASSIGN COMPONENT 'PERNR' OF STRUCTURE <fs_pnnnn> TO <l_field>.

        IF <l_field> IS ASSIGNED .

          lv_pernr = <l_field>.

        ENDIF.

        MOVE-CORRESPONDING <fs_pnnnn> TO ls_pskey.


        CALL METHOD cl_hrpa_masterdata_enq_deq=>enqueue_by_pernr

          EXPORTING

            tclas           = lc_tclas_a

            pernr           = lv_pernr

            message_handler = lo_message_handler

          IMPORTING

            is_ok           = lv_ok.

        IF lv_ok IS NOT INITIAL.

          cl_hrpa_masterdata_factory=>get_plain_infotype_access( IMPORTING plain_infotype_access = lo_hrpa_infotype_access ).

          TRY.

              lo_hrpa_infotype_access->if_hrpa_buffer_control~start_trial( IMPORTING magic_cookie = lo_magic_cookie ).

              CASE ip_action.

                WHEN 'INS'.

                  lo_hrpa_infotype_access->insert(

                      EXPORTING

                        tclas           = cl_hrpa_tclas=>tclas_employee

                        update_mode     = ls_update_mode

                        no_auth_check   = abap_true

                        message_handler = lo_message_handler

                      IMPORTING

                        is_ok           = lv_is_ok

                      CHANGING

                        pnnnn           = <fs_pnnnn>

                        pref            =  pref ).

                WHEN 'MOD'.

                  lo_hrpa_infotype_access->modify(

                     EXPORTING

                       tclas           = cl_hrpa_tclas=>tclas_employee

                       old_pskey       = ls_pskey

                       update_mode     = ls_update_mode

                       no_auth_check   = abap_true

                       message_handler = lo_message_handler

                     IMPORTING

                       is_ok           = lv_is_ok

                     CHANGING

                       pnnnn           = <fs_pnnnn> ).

                WHEN 'DEL'.

                  lo_hrpa_infotype_access->delete(

                      EXPORTING

                        tclas           = cl_hrpa_tclas=>tclas_employee

                        pskey           = ls_pskey

                        update_mode     = ls_update_mode

                        no_auth_check   = abap_true

                        message_handler = lo_message_handler

                      IMPORTING

                        is_ok           = lv_is_ok ).

                  TRY.

                      CALL METHOD lo_message_handler->get_error_list

                        IMPORTING

                          messages = lt_return.

                    CATCH cx_hrpa_violated_assertion.

                  ENDTRY.


                  IF lt_return IS NOT INITIAL.

                    lv_is_ok = abap_false.

                    REFRESH: lt_return[].

                  ENDIF.

                WHEN OTHERS.

              ENDCASE.


              ev_ok = lv_is_ok.

              IF lv_is_ok IS INITIAL.   "error handling

                EXIT.

              ENDIF.


            CATCH cx_root INTO lo_ex.

              lv_error_text = lo_ex->get_text( ).

              lv_message = |Exception { lv_error_text }|.

              ev_return-type =  'E'.

              ev_return-message = lv_message.

              TRY.

                  lo_hrpa_infotype_access->if_hrpa_buffer_control~discard_trial( magic_cookie = lo_magic_cookie ).

                CATCH cx_root INTO lo_ex.

              ENDTRY.

          ENDTRY.

        ELSE.

          EXIT.

        ENDIF.

        CLEAR ls_prelp.

      ENDLOOP.

      CALL METHOD cl_hrpa_masterdata_enq_deq=>dequeue_by_pernr

        EXPORTING

          tclas = lc_tclas_a

          pernr = lv_pernr.


      IF lv_is_ok EQ abap_false.

        TRY.

            CALL METHOD lo_message_handler->get_error_list

              IMPORTING

                messages = lt_return.

          CATCH cx_hrpa_violated_assertion.

        ENDTRY.

        IF lt_return IS NOT INITIAL.

          READ TABLE lt_return INTO ls_return WITH KEY msgty = gc_error.

          IF sy-subrc EQ 0.

            CALL FUNCTION 'BALW_BAPIRETURN_GET2'

              EXPORTING

                type   = ls_return-msgty

                cl     = ls_return-msgid

                number = ls_return-msgno

                par1   = ls_return-msgv1

                par2   = ls_return-msgv2

                par3   = ls_return-msgv3

                par4   = ls_return-msgv4

              IMPORTING

                return = lv_return_new.


            IF lv_return_new IS NOT INITIAL.

              ev_return-type    = gc_error.

              ev_return-message = lv_return_new-message.

            ENDIF.

          ENDIF.

        ENDIF.

      ELSE.

*******no commit handling

*     Save database when Live run

        IF iv_test_run EQ abap_false.

          lo_hrpa_infotype_access->if_hrpa_buffer_control~approve_trial( magic_cookie = lo_magic_cookie ).

          lo_hrpa_infotype_access->if_hrpa_buffer_control~flush( no_commit = abap_false ).

          ev_return-type    = gc_success.

          ev_return-message = TEXT-e04.

        ELSE.

          ev_return-type    = gc_success.

          ev_return-message = TEXT-e03.

          lo_hrpa_infotype_access->if_hrpa_buffer_control~discard_trial( magic_cookie = lo_magic_cookie ).

        ENDIF.

      ENDIF.

      TRY.

          lo_hrpa_infotype_access->if_hrpa_buffer_control~initialize( ).

        CATCH cx_root.

      ENDTRY.

  ENDMETHOD.

0 comments: