Esempio di FM per Idoc InBound
FUNCTION zidoc_hu_list_inbound.
*"----------------------------------------------------------------------
*"*"Interfaccia locale:
*" TABLES
*" IDOC_CONTRL STRUCTURE EDIDC
*" IDOC_DATA STRUCTURE EDIDD
*" IDOC_STATUS STRUCTURE BDIDOCSTAT
*"----------------------------------------------------------------------
DATA: ls_data TYPE edidd,
ls_hd TYPE zhu_in_head,
ls_pos TYPE zhu_in_pos,
lv_error,
lt_data TYPE TABLE OF edidd,
ls_data_header LIKE LINE OF lt_data,
lv_idoc_number TYPE edidc-docnum,
ls_process_data TYPE tede2,
lt_control TYPE TABLE OF edidc,
ls_control LIKE LINE OF lt_control,
lt_return TYPE huitem_messages_t,
ls_return LIKE LINE OF lt_return
.
LOOP AT idoc_data INTO ls_data.
CASE ls_data-segnam.
WHEN 'ZHU_IN_HEAD'.
ls_hd = ls_data-sdata.
ls_data_header = ls_data.
WHEN 'ZHU_IN_POS'.
ls_pos = ls_data-sdata.
IF ls_pos-reg_duplicata IS INITIAL AND ls_pos-reg_errore IS INITIAL.
CALL FUNCTION 'ZWM_HU_CREATE_GOODS_MOVEMENT'
EXPORTING
i_header = ls_hd
i_position = ls_pos
IMPORTING
e_error = lv_error
e_return = lt_return.
IF lv_error IS NOT INITIAL.
*Inserisco un messaggio di errore
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '51'.
idoc_status-uname = sy-uname.
idoc_status-repid = sy-repid.
idoc_status-msgty = 'E'.
idoc_status-msgid = '00'.
idoc_status-msgno = '398'.
idoc_status-msgv1 = TEXT-003.
APPEND idoc_status.
CLEAR idoc_status.
*** Mod. PS 30.01.2020 15:05:37 - Beg
LOOP AT lt_return INTO ls_return.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '51'.
idoc_status-uname = sy-uname.
idoc_status-repid = sy-repid.
idoc_status-msgty = ls_return-msgty.
idoc_status-msgid = ls_return-msgid.
idoc_status-msgno = ls_return-msgno.
idoc_status-msgv1 = ls_return-msgv1.
idoc_status-msgv2 = ls_return-msgv2.
idoc_status-msgv3 = ls_return-msgv3.
idoc_status-msgv4 = ls_return-msgv4.
APPEND idoc_status.
CLEAR idoc_status.
ENDLOOP.
*** Mod. PS 30.01.2020 15:05:37 - End
*** CLEAR: lt_data[], ls_process_data, lv_idoc_number,
*** lt_control[].
*** APPEND ls_data_header TO lt_data.
*** APPEND ls_data TO lt_data.
***
*** LOOP AT idoc_contrl INTO ls_control.
*** CLEAR ls_control-docnum.
***
*** APPEND ls_control TO lt_control.
***
*** ENDLOOP.
***
*** CALL FUNCTION 'IDOC_INBOUND_WRITE_TO_DB'
*** IMPORTING
*** pe_idoc_number = lv_idoc_number
*** pe_inbound_process_data = ls_process_data
*** TABLES
*** t_data_records = lt_data
**** T_LINKED_OBJECTS =
*** CHANGING
*** pc_control_record = ls_control
*** EXCEPTIONS
*** idoc_not_saved = 1
*** OTHERS = 2.
*** IF sy-subrc <> 0.
**** Implement suitable error handling here
***
*** ELSE.
****** CALL FUNCTION 'DB_COMMIT'.
****** CALL FUNCTION 'DEQUEUE_ALL'.
****** COMMIT WORK.
******
****** ls_control-docnum = lv_idoc_number.
******
****** APPEND ls_control TO lt_control.
****** CLEAR ls_control.
******
****** CALL FUNCTION 'IDOC_START_INBOUND'
****** EXPORTING
****** pi_inbound_process_data = ls_process_data
****** pi_called_online = abap_true
****** succ_show_flag = abap_true
****** TABLES
****** t_control_records = lt_control
******* T_DATA_RECORDS =
****** 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.
******* Implement suitable error handling here
****** ENDIF.
***
*** ENDIF.
ELSE.
*Messaggio generico di successo dell'elborazione dell'Idoc
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '53'.
idoc_status-uname = sy-uname.
idoc_status-repid = sy-repid.
idoc_status-msgty = 'S'.
idoc_status-msgid = '00'.
idoc_status-msgno = '398'.
idoc_status-msgv1 = TEXT-004.
APPEND idoc_status.
CLEAR idoc_status.
LOOP AT lt_return INTO ls_return.
idoc_status-docnum = idoc_contrl-docnum.
idoc_status-status = '53'.
idoc_status-uname = sy-uname.
idoc_status-repid = sy-repid.
idoc_status-msgty = ls_return-msgty.
idoc_status-msgid = ls_return-msgid.
idoc_status-msgno = ls_return-msgno.
idoc_status-msgv1 = ls_return-msgv1.
idoc_status-msgv2 = ls_return-msgv2.
idoc_status-msgv3 = ls_return-msgv3.
idoc_status-msgv4 = ls_return-msgv4.
APPEND idoc_status.
CLEAR idoc_status.
ENDLOOP.
ENDIF.
ENDIF.
ENDCASE.
ENDLOOP.
****Messaggio generico di successo dell'elborazione dell'Idoc
*** idoc_status-docnum = idoc_contrl-docnum.
*** idoc_status-status = '53'.
*** idoc_status-uname = sy-uname.
*** idoc_status-repid = sy-repid.
*** idoc_status-msgty = 'S'.
*** idoc_status-msgid = '00'.
*** idoc_status-msgno = '398'.
*** idoc_status-msgv1 = TEXT-002.
***
*** APPEND idoc_status.
*** CLEAR idoc_status.
ENDFUNCTION.