Syntax
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.
Syntax
*-----------------------------------------------------*
*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.