Show TOC

Example documentationExample Program for Mass Processing IDocs

 

Syntax Syntax

  1. FUNCTION IDOC_INPUT_XAMPLE4.
    *"----------------------------------------------------------------------
    *"*"Lokale Schnittstelle:
    *"       IMPORTING
    *"             VALUE(INPUT_METHOD) LIKE  BDWFAP_PAR-INPUTMETHD
    *"             VALUE(MASS_PROCESSING) LIKE  BDWFAP_PAR-MASS_PROC
    *"       EXPORTING
    *"             VALUE(WORKFLOW_RESULT) LIKE  BDWF_PARAM-RESULT
    *"             VALUE(APPLICATION_VARIABLE) LIKE  BDWF_PARAM-APPL_VAR
    *"             VALUE(IN_UPDATE_TASK) LIKE  BDWFAP_PAR-UPDATETASK
    *"             VALUE(CALL_TRANSACTION_DONE) LIKE  BDWFAP_PAR-CALLTRANS
    *"       TABLES
    *"              IDOC_CONTRL STRUCTURE  EDIDC
    *"              IDOC_DATA STRUCTURE  EDIDD
    *"              IDOC_STATUS STRUCTURE  BDIDOCSTAT
    *"              RETURN_VARIABLES STRUCTURE  BDWFRETVAR
    *"              SERIALIZATION_INFO STRUCTURE  BDI_SER
    *"       EXCEPTIONS *"              WRONG_FUNCTION_CALLED
    *"-------------------------------------------------------------------- *
    ---------------------------------------------------------------------- *
    ---------------------- 05 July 1996 ---------------------------------- *
    ---------------------------------------------------------------------- *
    Example function module for processing inbound IDocs for ALE or EDI.
    * This example applies for processing
    *
    * with    -  mass processing (more than one IDoc at a time)
    *
    *   without -  serialization
    *           -  customer-exits
    *           -  calling an ALE-enabled transaction
    * -------------------- Naming conventions ------------------------------
    * Internal tables start with 't_' 
    * Internal field strings start with 'f_'
    *----------------------------------------------------------------------
    * >> The following line must appear in the global part of your 
    * >> function group: 
    * include mbdconwf.   "Report containing the ALE constants.
    * The ALE constants start with 'c_'.
    
    * Internal table for the document headers.
    DATA: T_XHEAD LIKE XHEAD OCCURS 0 WITH HEADER LINE.
    
    * Internal table for the document items.
    DATA: T_XITEM LIKE XITEM OCCURS 0 WITH HEADER LINE.
    
    DATA: SUBRC LIKE SY-SUBRC,
    OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO.
    
    * Initialize variables
    SUBRC = 0.
    
    * Fill the ALE export parameters prior to loop through IDocs.
    CLEAR IN_UPDATE_TASK.
    CLEAR CALL_TRANSACTION_DONE. "Call Transaction is not used.
    WORKFLOW_RESULT = C_WF_RESULT_OK.
    
    * Loop through the IDocs' control records
    LOOP AT IDOC_CONTRL.
    
    *   Process the IDoc and check the data; no database updates!
    PERFORM IDOC_PROCESS_XAMPLE4 TABLES IDOC_DATA
    IDOC_STATUS
    t_xhead
    t_xitem
    USING    IDOC_CONTRL
    CHANGING OBJECT_NUMBER
    SUBRC.
    
    *   Fill the ALE export parameters.
    IF SUBRC <> 0. "Error occurred
    
    WORKFLOW_RESULT = C_WF_RESULT_ERROR.
    RETURN_VARIABLES-WF_PARAM = C_WF_PAR_ERROR_IDOCS.
    RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
    APPEND RETURN_VARIABLES.
    
    ELSE.          "IDoc processed successfully
    
    RETURN_VARIABLES-WF_PARAM = C_WF_PAR_PROCESSED_IDOCS.
    RETURN_VARIABLES-DOC_NUMBER = IDOC_CONTRL-DOCNUM.
    APPEND RETURN_VARIABLES.
    RETURN_VARIABLES-WF_PARAM = C_WF_PAR_APPL_OBJECTS.
    RETURN_VARIABLES-DOC_NUMBER = OBJECT_NUMBER.
    APPEND RETURN_VARIABLES.
    
    ENDIF.
    
    ENDLOOP.         "loop at idoc_contrl.
    
    * Once all IDocs have been processed, insert the application data to
    * the database (as long as there is some data to insert).
    
    read table t_xitem index 1.
    if sy-subrc = 0.        "i.e. at least one entry
    
    *   This fictitious function module inserts the data in tables
    *   t_xhead and t_xitem to the database tables xhead and xitem.
    *   It has no exceptions, because a failed insert leads to a run-time 
    *   error.
    CALL FUNCTION 'XAMPLE_OBJECTS_INSERT_TO_DATABASE'
    TABLES
    XHEAD = T_XHEAD
    XITEM = T_XITEM.
    
    endif.       "if sy-subrc = 0.
    
    ENDFUNCTION. 
    
End of the code.

Syntax Syntax

  1. *-----------------------------------------------------*
    *FORM IDOC_PROCESS_XAMPLE4 *
    *---------------------------------------------------------------------*
    *  This routine adds an application document to tables t_xhead and  *
    *  t_xitem based on the IDoc'S contents.*
    *  Object_Number contains the new document's number. *
    *  If an error occurs, subrc is non-zero, t_idoc_status is filled. *
    *  Note: if more than one error is detected, t_idoc_status contains *
    *  more than one status record.  * 
    *---------------------------------------------------------------------*
    *  -->  F_IDOC_CONTRL    IDoc control record *
    *  -->  T_IDOC_DATA      IDoc data records  *
    *  <--  T_XHEAD          Application document's header records *
    *  <--  T_XITEM          Application document's line item records *
    *  <--  T_IDOC_STATUS    IDoc status records *
    *  <--  OBJECT_NUMBER    Created document's number *
    *  <--  SUBRC            Return code *
    *---------------------------------------------------------------------*
    FORM IDOC_PROCESS_XAMPLE4
    TABLES   T_IDOC_DATA    STRUCTURE EDIDD
    T_IDOC_STATUS  STRUCTURE BDIDOCSTAT
    T_XHEAD        STRUCTURE XHEAD
    T_XITEM        STRUCTURE XITEM
    USING    F_IDOC_CONTRL  STRUCTURE EDIDC
    CHANGING OBJECT_NUMBER  LIKE XHEAD-DOCMNT_NO
    SUBRC          LIKE SY-SUBRC.
    
    * Internal table string for the document headers.
    DATA: F_XHEAD LIKE XHEAD OCCURS 0 WITH HEADER LINE.
    
    * Internal table for one document's items.
    DATA: T_ONE_XITEM LIKE XITEM OCCURS 0 WITH HEADER LINE.
    
    * Number given to the created document
    DATA: DOCUMENT_NUMBER LIKE XHEAD-DOCMNT_NO.
    
    
    * Move the data in the IDoc to the internal structures/tables
    * f_xhead and t_xitem.
    PERFORM IDOC_INTERPRET TABLES   T_IDOC_DATA
    T_ONE_XITEM
    T_IDOC_STATUS
    USING    F_IDOC_CONTRL
    CHANGING F_XHEAD
    SUBRC.
    
    * Create the application object if no error occurred so far.
    IF SUBRC = 0.
    *   This fictitious function module checks the new object based on the
    *   data that was read from the IDoc.
    *   If the checks succeed, the new object's ID is returned in the
    *   parameter 'document_number'.
    *   If the checks fail, an exception is raised.
    *   Note: this function must not insert or modify database records!
    CALL FUNCTION 'XAMPLE_OBJECT_CHECK'
    EXPORTING 
    XHEAD           = F_XHEAD
    IMPORTING
    DOCUMENT_NUMBER = DOCUMENT_NUMBER
    TABLES
    XITEM           = T_ONE_XITEM
    EXCEPTIONS
    OTHERS          = 1.
    
    IF SY-SUBRC <> 0.
    SUBRC = 1.
    *     Put the error message into 't_idoc_status'
    PERFORM STATUS_FILL_SY_ERROR
    TABLES   T_IDOC_STATUS
    USING    T_IDOC_DATA
    SY
    ''    "Field name
    'idoc_process_xample'.         "Form routine
    
    ELSE.
    *     Fill the remaining export parameters
    OBJECT_NUMBER = DOCUMENT_NUMBER. "New document's number
    append f_xhead to t_xhead.
    APPEND LINES OF T_ONE_XITEM TO T_XITEM.
    
    t_idoc_status-docnum = f_idoc_contrl-docnum.
    t_idoc_status-status = c_idoc_status_ok.
    t_idoc_status-msgty  = 'S'.
    t_idoc_status-msgid  = your_msgid. "Global variable.
    t_idoc_status-msgno  = msgno_success."Global variable.
    t_idoc_status-msgv1  = object_number.
    APPEND T_IDOC_STATUS.
    ENDIF.  "if sy-subrc <> 0.
    ENDIF.  "if subrc = 0.
    
    ENDFORM.
    
End of the code.