Report to Insert and Delete HR employee Data using OOPS
REPORT ztest_das8.
PARAMETERS: p_ee_old TYPE persno OBLIGATORY,
p_stras TYPE stras OBLIGATORY.
DATA: lt_errors TYPE hrpad_message_tab,
wa_error LIKE LINE OF lt_errors,
ls_pskey TYPE pskey,
lo_hrpa_infotype_access TYPE REF TO if_hrpa_plain_infotype_access,
lr_infty_operations TYPE REF TO cl_hrpad00_infty_operations,
lx_exc_infty_ops TYPE REF TO cx_hrpad00_infty_ops,
ls_message_itf LIKE LINE OF lx_exc_infty_ops->message_tab_itf,
lt_text_tab TYPE hrpad_text_tab,
ls_p0006_new TYPE p0006.
TRY.
cl_hrpad00_infty_operations=>get_instance(
IMPORTING
eo_infty_operations = lr_infty_operations ).
CATCH cx_root. "#EC NO_HANDLER
ENDTRY.
SELECT SINGLE * FROM pa0006 INTO @DATA(ls_p0006_old) WHERE pernr = @p_ee_old.
IF sy-subrc IS INITIAL.
ls_pskey-pernr = ls_p0006_old-pernr.
ls_pskey-infty = '0006'.
ls_pskey-subty = '1'.
ls_pskey-objps = ls_p0006_old-objps.
ls_pskey-sprps = ls_p0006_old-sprps.
ls_pskey-endda = ls_p0006_old-endda.
ls_pskey-begda = ls_p0006_old-begda.
ls_pskey-seqnr = ls_p0006_old-seqnr.
* Infotype Operation
TRY.
* Enqueue - Lock employee
TRY.
lr_infty_operations->if_hrpad00_infty_operations~enqueue_pernr(
EXPORTING iv_pernr = ls_p0006_old-pernr ).
* CATCH cx_hrpad00_infty_ops.
* Delete - Address (Old and Existing)
lr_infty_operations->delete(
EXPORTING
is_pskey = ls_pskey
iv_no_auth_check = abap_true ).
lr_infty_operations->commit( ).
TRY.
* Fill the data for Address
MOVE-CORRESPONDING ls_p0006_old TO ls_p0006_new.
ls_p0006_new-grpvl = '10'.
ls_p0006_new-stras = p_stras.
* Insert - Address (New)
lr_infty_operations->insert(
CHANGING
cs_pnnnn = ls_p0006_new
* cs_pref =
ct_text_tab = lt_text_tab )
.
* CATCH cx_hrpad00_infty_ops.
ENDTRY.
* Commit
lr_infty_operations->commit( ).
* Catch Exception
CATCH cx_hrpad00_infty_ops INTO lx_exc_infty_ops.
ENDTRY.
* Dequeue
TRY.
lr_infty_operations->if_hrpad00_infty_operations~dequeue_pernr(
EXPORTING iv_pernr = ls_p0006_new-pernr ).
* CATCH cx_hrpad00_infty_ops.
ENDTRY.
ENDTRY.
ENDIF.
cl_hrpa_masterdata_factory=>get_plain_infotype_access( IMPORTING plain_infotype_access = lo_hrpa_infotype_access ).
lo_hrpa_infotype_access->if_hrpa_buffer_control~flush( no_commit = abap_false ).
COMMIT WORK.
Wednesday, December 17, 2025
DeCouple Framework - ABAP HR - OOPS - Employee Delete/Insert
Tuesday, April 29, 2025
DeCouple Framework - ABP HR - Terminating Employee
Terminating an employee is considering IT0 and IT 1
Hence inserting an entry in both infotype (while IT 0 will have inactive status and Temination Action type and Reason), works
DATA li_iread TYPE REF TO if_hrpa_plain_infotype_access.
cl_hrpa_masterdata_factory=>get_plain_infotype_access(
IMPORTING plain_infotype_access = li_iread ).
" * Message handler
DATA lo_mhand TYPE REF TO if_hrpa_message_handler.
DATA lo_mlist TYPE REF TO cl_hrpa_message_list.
FREE lo_mlist.
CREATE OBJECT lo_mlist.
lo_mhand = lo_mlist.
DATA: ls_p0000 TYPE p0000, s_p0001 TYPE p0001.
li_iread->read_single(
EXPORTING tclas = cl_hrpa_tclas=>tclas_employee
pernr = '00050002'
infty = '0000'
subty = ''
objps = '*' "lc_objps_all
sprps = if_hrpa_read_infotype=>unlocked
begda = '19000101'
endda = '99991231'
mode = if_hrpa_read_infotype=>last_intersecting_record
no_auth_check = if_hrpa_boole_d=>true
message_handler = lo_mhand
IMPORTING pnnnn = ls_p0000 ).
ls_p0000-begda = sy-datum.
ls_p0000-massn = '06'.
ls_p0000-massg = '06'.
ls_p0000-stat2 = '0'.
li_iread->insert( EXPORTING tclas = cl_hrpa_tclas=>tclas_employee
no_auth_check = if_hrpa_boole_d=>true
message_handler = lo_mhand
CHANGING pnnnn = ls_p0000 ).
li_iread->read_single(
EXPORTING tclas = cl_hrpa_tclas=>tclas_employee
pernr = '00050002'
infty = '0001'
subty = ''
objps = '*' "lc_objps_all
sprps = if_hrpa_read_infotype=>unlocked
begda = '19000101'
endda = '99991231'
mode = if_hrpa_read_infotype=>last_intersecting_record
no_auth_check = if_hrpa_boole_d=>true
message_handler = lo_mhand
IMPORTING pnnnn = ls_p0001 ).
ls_p0001-begda = sy-datum.
li_iread->insert( EXPORTING tclas = cl_hrpa_tclas=>tclas_employee
no_auth_check = if_hrpa_boole_d=>true
message_handler = lo_mhand
CHANGING pnnnn = ls_p0001 ).
li_iread->if_hrpa_buffer_control~flush( no_commit = abap_false ).
DATA lt_mlist TYPE hrpad_message_tab.
lo_mlist->get_message_list(
IMPORTING messages = lt_mlist ).
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.
Friday, April 25, 2025
DeCouple Framework - ABAP HR - OOPS - Employee Data Hire (New)
Hire and Employee Data using OOABAP HR in SAP HCM (Decouple Framework)
REPORT ztest_123.
DATA li_iread TYPE REF TO if_hrpa_plain_infotype_access.
cl_hrpa_masterdata_factory=>get_plain_infotype_access(
IMPORTING plain_infotype_access = li_iread ).
" * Message handler
DATA lo_mhand TYPE REF TO if_hrpa_message_handler.
DATA lo_mlist TYPE REF TO cl_hrpa_message_list.
FREE lo_mlist.
CREATE OBJECT lo_mlist.
lo_mhand = lo_mlist.
DATA: ls_p0000 TYPE p0000,
ls_p0001 TYPE p0001,
ls_p0002 TYPE p0002,
ls_p0003 TYPE p0003,
ls_pnnnn_00 TYPE prelp,
ls_pnnnn_01 TYPE prelp,
ls_pnnnn_02 TYPE prelp,
lt_pnnnn TYPE prelp_tab,
lt_return_tab TYPE hrpad_return_tab,
lt_bapipakey_tab TYPE hrpad_bapipakey_tab,
lv_is_ok TYPE boole_d,
lt_modified_keys_tab TYPE hrpad_pskey_tab,
ls_bapipakey TYPE bapipakey.
CLASS lcl_test123 DEFINITION.
PUBLIC SECTION.
METHODS:
build_p0000 EXPORTING ex_pnnnn TYPE hrift_tt_data,
build_p0001 EXPORTING ex_pnnnn TYPE hrift_tt_data,
build_p0002 EXPORTING ex_pnnnn TYPE hrift_tt_data.
ENDCLASS.
CLASS lcl_test123 IMPLEMENTATION.
METHOD build_p0000.
DATA: ls_p0001 TYPE p0000,
ls_pnnnn TYPE prelp.
DATA: lt_p0000 TYPE STANDARD TABLE OF p0000 INITIAL SIZE 0.
ls_p0000-pernr = '00050002'.
ls_p0000-endda = '99991231'.
ls_p0000-begda = sy-datum.
ls_p0000-infty = '0000'.
ls_p0000-massn = '01'.
ls_p0000-massg = '01'.
ls_p0000-stat2 = '3'.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = ls_p0000
IMPORTING
prelp = ls_pnnnn.
APPEND ls_pnnnn TO ex_pnnnn.
ENDMETHOD.
METHOD build_p0001.
DATA: ls_p0001 TYPE p0001,
ls_pnnnn TYPE prelp.
DATA: lt_p0001 TYPE STANDARD TABLE OF p0001 INITIAL SIZE 0.
ls_p0001-pernr = '00050002'.
ls_p0001-endda = '99991231'.
ls_p0001-begda = sy-datum.
ls_p0001-infty = '0001'.
ls_p0001-bukrs = '1000' ."'4181'.
ls_p0001-werks = '3010'. "ls_p0001-vdsk1 = 'AR01'.
ls_p0001-btrtl = '1001'. "'0001'.
ls_p0001-persg = '1'.
ls_p0001-persk = '01'. "'A0'.
ls_p0001-abkrs = '01'. "'99'.
ls_p0001-orgeh = '00000000'.
ls_p0001-plans = '99999999'.
ls_p0001-stell = '00000000'.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = ls_p0001
IMPORTING
prelp = ls_pnnnn.
APPEND ls_pnnnn TO ex_pnnnn.
ENDMETHOD.
METHOD build_p0002.
DATA: ls_p0002 TYPE p0002,
ls_pnnnn TYPE prelp.
DATA: lt_p0002 TYPE STANDARD TABLE OF p0001 INITIAL SIZE 0.
ls_p0002-pernr = '00050002'.
ls_p0002-endda = '99991231'.
ls_p0002-begda = '19850101'.
ls_p0002-infty = '0002'.
ls_p0002-vorna = 'Samchand'.
ls_p0002-nachn = 'Browns'.
ls_p0002-begda = ls_p0002-gbdat = '19850101'.
ls_p0002-natio = 'AR'.
ls_p0002-sprsl = 'EN'.
ls_p0002-gesch = '1'.
ls_p0002-perid = '999999999'.
CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = ls_p0002
IMPORTING
prelp = ls_pnnnn.
APPEND ls_pnnnn TO ex_pnnnn.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA: lo_test123 TYPE REF TO lcl_test123.
CREATE OBJECT lo_test123.
lo_test123->build_p0000( IMPORTING ex_pnnnn = lt_pnnnn ).
lo_test123->build_p0001( IMPORTING ex_pnnnn = lt_pnnnn ).
lo_test123->build_p0002( IMPORTING ex_pnnnn = lt_pnnnn ).
TRY.
CALL FUNCTION 'HR_PAD_HIRE_EMPLOYEE'
EXPORTING
employeenumber = '00050002'
* REFERENCEPERNR =
hiringdate = sy-datum
actiontype = '01'
reasonforaction = '01'
pnnnn_tab = lt_pnnnn
* PREF_TAB =
nocommit = space
* IT_HIRE_FIELDNAMES =
IMPORTING
return_tab = lt_return_tab
bapipakey_tab = lt_bapipakey_tab
is_ok = lv_is_ok
modified_keys_tab = lt_modified_keys_tab.
CATCH cx_root.
ENDTRY.
COMMIT WORK.