SAP資格過去問ならSAPnavi

NoteやStripe決済で安全にSAP過去問を購入することができます。
領収書発行可能 / 即時入手可能

SAP過去問 (SAP Exam)

Example Program for a Customer Exit

使用する

FUNCTION IDOC_INPUT_XAMPLE3.*"---------------------------------------------------------------------*"*"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*"---------------------------------------------------------------------* Example function module for processing inbound IDocs for ALE or EDI.* This example applies for processing** with - one IDoc at a time* - serialization* - customer-exits** without - calling an ALE-enabled transaction* - mass processing (more than one IDoc at a time)* -------------------- 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_'.DATA: SUBRC LIKE SY-SUBRC,OBJECT_NUMBER LIKE XHEAD-DOCMNT_NO.* Initialize variablesSUBRC = 0.* Read the IDoc's control recordREAD TABLE IDOC_CONTRL INDEX 1.* >>>>>>>>>>>>> Customer exit 1 (Start) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<* This exit gives the customer access to the IDoc's control record,* the import parameters and allows the customer to do serialization.CALL CUSTOMER-FUNCTION '001'EXPORTINGINPUT_METHOD = INPUT_METHODMASS_PROCESSING = MASS_PROCESSINGTABLESIDOC_SERIAL = SERIALIZATION_INFOIDOC_DATA = IDOC_DATAIDOC_CONTROL = IDOC_CONTRLEXCEPTIONSOTHERS = 1.IF SY-SUBRC <> 0.SUBRC = 1.PERFORM STATUS_FILL_SY_ERROR TABLES IDOC_STATUSUSING IDOC_DATASY' ''customer-function 001'.ENDIF.* >>>>>>>>>>>>> Customer exit 1 (End) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<PERFORM IDOC_PROCESS_XAMPLE3 TABLES IDOC_DATAIDOC_STATUSUSING IDOC_CONTRLCHANGING OBJECT_NUMBERSUBRC.* Fill the ALE export parameters* In this example we assume that 'call function 'xxx' in update task' * * is not used to update the database.CLEAR IN_UPDATE_TASK.CLEAR CALL_TRANSACTION_DONE. "Call Transaction is not used.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 successfullyWORKFLOW_RESULT = C_WF_RESULT_OK.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.* >>>>>>>>>>>>> Customer exit 3 (Start) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<* This exit gives the customer access to the parameters.CALL CUSTOMER-FUNCTION '003'CHANGINGSUBRC = SUBRCWORKFLOW_RESULT = WORKFLOW_RESULTAPPLICATION_VARIABLE = APPLICATION_VARIABLEIN_UPDATE_TASK = IN_UPDATE_TASKTABLESRETURN_VARIABLES = RETURN_VARIABLES.* >>>>>>>>>>>>> Customer exit 3 (End) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ENDFUNCTION.*---------------------------------------------------------------------** FORM IDOC_PROCESS_XAMPLE3 **---------------------------------------------------------------------** This routine creates an application document 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_IDOC_STATUS IDoc status records ** <-- OBJECT_NUMBER Created document's number ** <-- SUBRC Return code **---------------------------------------------------------------------*FORM IDOC_PROCESS_XAMPLE3TABLES T_IDOC_DATA STRUCTURE EDIDDT_IDOC_STATUS STRUCTURE BDIDOCSTATUSING F_IDOC_CONTRL STRUCTURE EDIDCCHANGING OBJECT_NUMBER LIKE XHEAD-DOCMNT_NOSUBRC LIKE SY-SUBRC.* Internal field string for the document header.DATA: F_XHEAD LIKE XHEAD.* Internal table for the document items.DATA: T_XITEM LIKE XITEM OCCURS 0 WITH HEADER LINE.* Number given to the created documentDATA: DOCUMENT_NUMBER LIKE F_XHEAD-DOCMNT_NO.* Move the data in the IDoc to the internal structures/tables* f_xhead and t_xitem.PERFORM IDOC_INTERPRET3 TABLES T_IDOC_DATAT_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 creates a new object based on the* data that was read from the IDoc. The new object's ID is returned* in the parameter 'document_number'.* The function module checks that the data is correct, and raises* an exception if an error is detected.CALL FUNCTION 'XAMPLE_OBJECT_CREATE'EXPORTINGXHEAD = F_XHEADIMPORTINGDOCUMENT_NUMBER = DOCUMENT_NUMBERTABLESXITEM = T_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 numbert_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.*---------------------------------------------------------------------** FORM IDOC_INTERPRET3 **---------------------------------------------------------------------** This routine checks that the correct message type is being used, ** then checks that the IDoc has not been overtaken (serialization), ** and then converts and moves the data from the IDoc segments to the ** internal structure f_xhead and internal table t_xitem. ** If an error occurs, t_idoc_status is filled an subrc <> 0. **---------------------------------------------------------------------** --> T_IDOC_STATUS ** --> T_XITEM ** --> F_IDOC_DATA ** --> F_XHEAD ** --> SUBRC **---------------------------------------------------------------------*FORM IDOC_INTERPRET3 TABLES T_IDOC_DATA STRUCTURE EDIDDT_XITEM STRUCTURE XITEMT_IDOC_STATUS STRUCTURE BDIDOCSTATUSING F_IDOC_CONTRL STRUCTURE EDIDCCHANGING F_XHEAD STRUCTURE XHEADSUBRC LIKE SY-SUBRC.* Check that the IDoc contains the correct message type.* Note: if your message-type is reducible, check field 'idoctp'* (IDoc type) instead of 'mestyp'.IF F_IDOC_CONTRL-MESTYP <> 'XAMPLE'.MESSAGE ID YOUR_MSGID "Global variableTYPE 'E'NUMBER MSGNO_WRONG_FUNCTION "Global variableWITH F_IDOC_CONTRL-MESTYP "message type'IDOC_INPUT_XAMPLE' "Your function module.F_IDOC_CONTRL-SNDPRT "Sender partner typeF_IDOC_CONTRL-SNDPRN "Sender number.RAISING WRONG_FUNCTION_CALLED.ENDIF.* Loop through the IDoc's segments and convert the data from the IDoc* format to the internal format.LOOP AT T_IDOC_DATA WHERE DOCNUM = F_IDOC_CONTRL-DOCNUM.CASE T_IDOC_DATA-SEGNAM.WHEN 'E1XHEAD'.PERFORM E1XHEAD_PROCESS TABLES T_IDOC_STATUSUSING T_IDOC_DATACHANGING F_XHEADSUBRC.WHEN 'E1XITEM'.PERFORM E1XITEM_PROCESS TABLES T_XITEMT_IDOC_STATUSUSING F_XHEAD-CURRENCYT_IDOC_DATACHANGING SUBRC.ENDCASE.* >>>>>>>>>>>>> Customer exit 2 (Start) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<* This exit is called after each SAP segment has been processed, and* it is called every time a customer segment appears.CALL CUSTOMER-FUNCTION '002'EXPORTINGCURRENT_SEGEMENT = T_IDOC_DATAXHEAD_IN = F_XHEADSUBRC_IN = SUBRCIMPORTINGXHEAD_OUT = F_XHEADTABLESXITEM = T_XITEMEXCEPTIONSOTHERS = 1.IF SY-SUBRC <> 0.SUBRC = 1.PERFORM STATUS_FILL_SY_ERROR TABLES T_IDOC_STATUSUSING T_IDOC_DATASY' ''customer-function 002'.ENDIF.* >>>>>>>>>>>>> Customer exit 2 (End) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ENDLOOP.ENDFORM.         

タイトルとURLをコピーしました