VinceCoder
2/7/2020 - 3:08 PM

ZIDOC_HU_LIST_INBOUND

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.