Example ABAP HR report to create HR infotype record using SAP function module HR_INFOTYPE_OPERATION. In this example, I will demonstrate creating a new 0105 record by selecting an existing one from the SAP database and updating it’s from and to date. Although the 0105 infotype is being used the code will be similar for almost all other HR infotype updates.
*&-------------------------------* REPORT ZUPD_INFOTYPE. PARAMETERS: p_itype type PRELP-INFTY DEFAULT '0105', p_pernr type pernr-pernr default '1'. *Change P0105 to the structure of the infotype you want to update *Structure can be built dynamically but this wouldn't add any value to *this example just over complicate it DATA: ld_record type p0105, ld_table type string. data: return_struct type BAPIRETURN1, personaldatakey type BAPIPAKEY. *--------------------------------- START-OF-SELECTION. data : it_tabdescr type abap_compdescr_tab, wa_tabdescr type abap_compdescr. data : ref_table_descr type ref to cl_abap_structdescr. CONCATENATE 'PA' p_itype into ld_table. SELECT single * from (ld_table) into CORRESPONDING FIELDS OF ld_record where pernr eq p_pernr and USRTY eq 'MAIL'. "Only relevant for infotype 0105 * Change values within record you want to create * clear: ld_record-???, * ld_record-???, * ld_record-???. * ld_record-??? = * ld_record-??? = ld_record-endda = '99991231'. ld_record-begda = sy-datum. * HR_INFOTYPE_OPERATION will fail if the record is not locked CALL FUNCTION 'HR_EMPLOYEE_ENQUEUE' EXPORTING number = p_pernr. CALL FUNCTION 'HR_INFOTYPE_OPERATION' EXPORTING infty = p_itype subtype = ld_record-subty number = ld_record-pernr "employeenumber validityend = ld_record-endda validitybegin = ld_record-begda record = ld_record operation = 'INS' nocommit = ' ' dialog_mode = '0' IMPORTING return = return_struct key = personaldatakey EXCEPTIONS OTHERS = 0. * Release lock for the record after the update is completed CALL FUNCTION 'HR_EMPLOYEE_DEQUEUE' EXPORTING number = p_pernr.