参考上面代码:
* 0021 55555555555555555555555555555BEGIN XIAOYONG 20200429 双信息类型 0021 0528 测试通过 IF is_input-it_p0021[] IS NOT INITIAL. CLEAR:lt_p0021[],lt_newp0021[], lt_fields[]. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_p0021 FROM pa0021 FOR ALL ENTRIES IN is_input-it_p0021 WHERE pernr = is_input-it_p0021-pernr AND subty = is_input-it_p0021-subty AND begda <= sy-datum AND endda >= sy-datum. SORT lt_p0021 BY pernr subty. CLEAR:lt_p0528[]. SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_p0528 FROM pa0528 FOR ALL ENTRIES IN is_input-it_p0021 WHERE pernr = is_input-it_p0021-pernr AND subty = is_input-it_p0021-subty AND begda <= sy-datum AND endda >= sy-datum. SORT lt_p0528 BY pernr subty. LOOP AT is_input-it_p0021 ASSIGNING FIELD-SYMBOL(<fs_0021>). IF <fs_0021>-begda IS INITIAL. <fs_0021>-begda = sy-datum. ENDIF. IF <fs_0021>-endda IS INITIAL. <fs_0021>-endda = '99991231'. ENDIF. CLEAR:lt_newp0021[]. lo_descr ?= cl_abap_typedescr=>describe_by_data( ls_p0021 ). lt_fields = lo_descr->get_ddic_field_list( p_langu = '1' p_including_substructres = abap_true ). READ TABLE lt_p0021 ASSIGNING FIELD-SYMBOL(<wa_0021>) WITH KEY pernr = <fs_0021>-pernr subty = <fs_0021>-subty BINARY SEARCH. IF sy-subrc = 0. LOOP AT lt_fields ASSIGNING <fs_fields>. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_0021> TO <fs>. IF sy-subrc = 0 AND <fs> IS NOT INITIAL. IF <fs1> IS ASSIGNED . UNASSIGN <fs1>. ENDIF. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <wa_0021> TO <fs1>. IF sy-subrc = 0. <fs1> = <fs>. ENDIF. ENDIF. ENDLOOP. APPEND <wa_0021> TO lt_newp0021. ELSE. APPEND INITIAL LINE TO lt_newp0021 ASSIGNING <wa_0021>. LOOP AT lt_fields ASSIGNING <fs_fields>. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_0021> TO <fs>. IF sy-subrc = 0 AND <fs> IS NOT INITIAL. IF <fs1> IS ASSIGNED . UNASSIGN <fs1>. ENDIF. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <wa_0021> TO <fs1>. IF sy-subrc = 0. <fs1> = <fs>. ENDIF. ENDIF. ENDLOOP. ENDIF. CLEAR:lt_fields[]. lo_descr ?= cl_abap_typedescr=>describe_by_data( ls_p0528 ). lt_fields = lo_descr->get_ddic_field_list( p_langu = '1' p_including_substructres = abap_true ). CLEAR:lt_newp0528[]. READ TABLE lt_p0528 ASSIGNING FIELD-SYMBOL(<wa_0528>) WITH KEY pernr = <fs_0021>-pernr subty = <fs_0021>-subty BINARY SEARCH. IF sy-subrc = 0. LOOP AT lt_fields ASSIGNING <fs_fields>. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_0021> TO <fs>. IF sy-subrc = 0 AND <fs> IS NOT INITIAL. IF <fs1> IS ASSIGNED . UNASSIGN <fs1>. ENDIF. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <wa_0528> TO <fs1>. IF sy-subrc = 0. <fs1> = <fs>. ENDIF. ENDIF. ENDLOOP. ASSIGN COMPONENT 'INFTY' OF STRUCTURE <wa_0528> TO <fs>. IF sy-subrc = 0. <fs> = '0528'. ENDIF. ASSIGN COMPONENT 'LAND1' OF STRUCTURE <wa_0528> TO <fs>. IF sy-subrc = 0. <fs> = 'CN'. ENDIF. APPEND <wa_0528> TO lt_newp0528. ELSE. APPEND INITIAL LINE TO lt_newp0528 ASSIGNING <wa_0528>. LOOP AT lt_fields ASSIGNING <fs_fields>. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <fs_0021> TO <fs>. IF sy-subrc = 0 AND <fs> IS NOT INITIAL. IF <fs1> IS ASSIGNED . UNASSIGN <fs1>. ENDIF. ASSIGN COMPONENT <fs_fields>-fieldname OF STRUCTURE <wa_0528> TO <fs1>. IF sy-subrc = 0. <fs1> = <fs>. ENDIF. ENDIF. ENDLOOP. ASSIGN COMPONENT 'INFTY' OF STRUCTURE <wa_0528> TO <fs>. IF sy-subrc = 0. <fs> = '0528'. ENDIF. ASSIGN COMPONENT 'LAND1' OF STRUCTURE <wa_0528> TO <fs>. IF sy-subrc = 0. <fs> = 'CN'. ENDIF. ENDIF. CLEAR:ls_pskey. MOVE-CORRESPONDING <wa_0021> TO ls_pskey. PERFORM frm_lock_per_data USING ls_pskey-pernr 'X' CHANGING es_output-message. IF es_output-message-msgtx = 'E'. EXIT. ENDIF. CALL FUNCTION 'HR_INFOTYPE_OPERATION' EXPORTING infty = '0021' number = ls_pskey-pernr subtype = ls_pskey-subty objectid = ls_pskey-objps lockindicator = ls_pskey-sprps validityend = ls_pskey-endda validitybegin = ls_pskey-begda recordnumber = ls_pskey-seqnr record = <wa_0021> secondary_record = <wa_0528> operation = 'INS' tclas = 'A' nocommit = 'X' view_identifier = '28' dialog_mode = '0' IMPORTING return = ls_return. IF ls_return-type = 'E' OR ls_return-type = 'A' . es_output-message-msgtx = 'E'. MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number INTO es_output-message-msgty WITH ls_return-message_v1 ls_return-message_v2 ls_return-message_v3 ls_return-message_v4. PERFORM frm_lock_per_data USING ls_pskey-pernr '' CHANGING es_output-message. EXIT. ENDIF. PERFORM frm_lock_per_data USING ls_pskey-pernr '' CHANGING es_output-message.* CLEAR:<WA_0528>,<WA_0021>. ENDLOOP. IF es_output-message-msgtx = 'E'. ROLLBACK WORK. CALL FUNCTION 'RHOM_ALL_BUFFER_INIT'. CALL FUNCTION 'HR_PSBUFFER_INITIALIZE'. EXIT. ENDIF. ENDIF.*0021 55555555555555555555end xiaoyong 20200429
依照下面代码能写入双信息类型