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.