METHOD create_mbgmcr_idoc. set_idoc_control( IMPORTING es_idoc_control = DATA(ls_idoc_control) ). map_mbgmcr_data( EXPORTING is_data = is_data IMPORTING es_kopf = DATA(ls_kopf) es_head = DATA(ls_head) es_code = DATA(ls_code) et_item = DATA(lt_item) ). set_idoc_data( EXPORTING is_kopf = ls_kopf is_head = ls_head is_code = ls_code it_item = lt_item IMPORTING et_idoc_data = DATA(lt_idoc_data) ). idoc_inbound_write_to_db( IMPORTING ev_idoc_number = DATA(lv_docnum) CHANGING ct_idoc_data = lt_idoc_data cs_idoc_control = ls_idoc_control ). idoc_start_inbound( EXPORTING it_idoc_data = lt_idoc_data is_idoc_control = ls_idoc_control ). get_idoc_status( EXPORTING iv_docnum = lv_docnum ). ENDMETHOD.
Method set_idoc_control:
METHOD set_idoc_control. CLEAR es_idoc_control. " Lese Partnummer SELECT SINGLE logsys FROM t000 INTO @DATA(lv_logsys) WHERE mandt = @sy-mandt. " IDOC Basisdaten es_idoc_control-mandt = sy-mandt. es_idoc_control-direct = '2'. "Richtung der IDoc-Übertragung: Eingang es_idoc_control-idoctp = mc_idoctp. "MBGMCR03 es_idoc_control-mestyp = mc_mestyp. "MBGMCR es_idoc_control-mescod = mc_mescod. "Logische Nachrichtenvariante " Empfänger es_idoc_control-rcvpor = |SAP{ sy-sysid }|. "Empfängerport (SAP-System, EDI-Subsystem) es_idoc_control-rcvprt = mc_rcvprt. "Partnerart des Empfängers (LS) es_idoc_control-rcvprn = lv_logsys. "Partnernummer des Empfängers " Sender es_idoc_control-sndpor = |SAP{ sy-sysid }|. "Absenderport (SAP-System, EDI-Subsystem) es_idoc_control-sndprt = mc_rcvprt. "Partnerart des Absenders (LS) es_idoc_control-sndprn = lv_logsys. "Partnernummer des Absenders ENDMETHOD.
Method map_mbgmcr_data:
METHOD map_mbgmcr_data. "Hinweis: Zum Füllen der Strukturen, siehe auch Dokumentation für BAPI_GOODSMVT_CREATE. CLEAR: es_kopf, es_head, es_code, et_item. es_kopf = VALUE #( testrun = gs_sel-test ). es_head = VALUE #( pstng_date = sy-datum doc_date = sy-datum ). es_code = VALUE #( gm_code = mc_gm_code_04 ). "Code 04: Umbuchung et_item = VALUE #( ( is_data ...) ). ENDMETHOD.
Method set_idoc_data:
METHOD set_idoc_data. CLEAR et_idoc_data. et_idoc_data = VALUE #( ( segnam = 'E1MBGMCR' sdata = is_kopf segnum = 1 psgnum = 1 hlevel = 1 ) ( segnam = 'E1BP2017_GM_HEAD_01' sdata = is_head segnum = 2 psgnum = 2 hlevel = 2 ) ( segnam = 'E1BP2017_GM_CODE' sdata = is_code segnum = 3 psgnum = 2 hlevel = 2 ) ). DO lines( it_item ) TIMES. APPEND VALUE #( segnam = 'E1BP2017_GM_ITEM_CREATE' sdata = it_item[ sy-index ] segnum = ( 3 + sy-index ) psgnum = 2 hlevel = 2 ) TO et_idoc_data. ENDDO. ENDMETHOD.
Method idoc_inbound_write_to_db :
METHOD idoc_inbound_write_to_db. CLEAR : ev_idoc_number, ev_state, ev_inb_process_data. CALL FUNCTION 'IDOC_INBOUND_WRITE_TO_DB' EXPORTING pi_do_handle_error = abap_true pi_return_data_flag = abap_true IMPORTING pe_idoc_number = ev_idoc_number pe_state_of_processing = ev_state pe_inbound_process_data = ev_inb_process_data TABLES t_data_records = ct_idoc_data CHANGING pc_control_record = cs_idoc_control EXCEPTIONS idoc_not_saved = 1 OTHERS = 2. IF sy-subrc <> 0. RAISE EXCEPTION TYPE zcx_ecos_goods_movement EXPORTING textid = VALUE scx_t100key( msgid = sy-msgid msgno = sy-msgno attr1 = sy-msgv1 attr2 = sy-msgv2 attr3 = sy-msgv3 attr4 = sy-msgv4 ). ENDIF. gr_listlog->append_log_entry( iv_type = gr_listlog->gc_log_type_statistic iv_text = |Idoc mit der Nummer { ev_idoc_number } angelegt.| iv_alog = abap_true ). ENDMETHOD.
Method idoc_start_inbound :
METHOD idoc_start_inbound. DATA: lt_idoc_control TYPE TABLE OF edidc. APPEND is_idoc_control TO lt_idoc_control. CALL FUNCTION 'IDOC_START_INBOUND' EXPORTING pi_do_commit = abap_true TABLES t_control_records = lt_idoc_control t_data_records = it_idoc_data EXCEPTIONS invalid_document_number = 1 error_before_call_application = 2 inbound_process_not_possible = 3 old_wf_start_failed = 4 wf_task_error = 5 serious_inbound_error = 6 OTHERS = 7. IF sy-subrc <> 0. RAISE EXCEPTION TYPE zcx_xxx EXPORTING textid = VALUE scx_t100key( msgid = sy-msgid msgno = sy-msgno attr1 = sy-msgv1 attr2 = sy-msgv2 attr3 = sy-msgv3 attr4 = sy-msgv4 ). ENDIF. ENDMETHOD.
Method get_idoc_status:
METHOD get_idoc_status. SELECT SINGLE status FROM edidc INTO @DATA(lv_status) WHERE docnum = @iv_docnum. gr_listlog->append_log_entry( iv_type = gr_listlog->gc_log_type_statistic iv_text = |Idoc Status: { lv_status }| iv_alog = abap_true ). ENDMETHOD.