使用する
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 variablesSUBRC = 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 recordsLOOP AT IDOC_CONTRL.* Process the IDoc and check the data; no database updates!PERFORM IDOC_PROCESS_XAMPLE4 TABLES IDOC_DATAIDOC_STATUSt_xheadt_xitemUSING IDOC_CONTRLCHANGING OBJECT_NUMBERSUBRC.* Fill the ALE export parameters.IF SUBRC <> 0. "Error occurredWORKFLOW_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 successfullyRETURN_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'TABLESXHEAD = T_XHEADXITEM = T_XITEM.endif. "if sy-subrc = 0.ENDFUNCTION.
*-----------------------------------------------------**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_XAMPLE4TABLES T_IDOC_DATA STRUCTURE EDIDDT_IDOC_STATUS STRUCTURE BDIDOCSTATT_XHEAD STRUCTURE XHEADT_XITEM STRUCTURE XITEMUSING F_IDOC_CONTRL STRUCTURE EDIDCCHANGING OBJECT_NUMBER LIKE XHEAD-DOCMNT_NOSUBRC 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 documentDATA: 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_DATAT_ONE_XITEMT_IDOC_STATUSUSING F_IDOC_CONTRLCHANGING F_XHEADSUBRC.* 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_XHEADIMPORTINGDOCUMENT_NUMBER = DOCUMENT_NUMBERTABLESXITEM = T_ONE_XITEMEXCEPTIONSOTHERS = 1.IF SY-SUBRC <> 0.SUBRC = 1.* Put the error message into 't_idoc_status'PERFORM STATUS_FILL_SY_ERRORTABLES T_IDOC_STATUSUSING T_IDOC_DATASY'' "Field name'idoc_process_xample'. "Form routineELSE.* Fill the remaining export parametersOBJECT_NUMBER = DOCUMENT_NUMBER. "New document's numberappend 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.