使用する
FUNCTION BAPI_TRAVELAGENCY_CREATE .*"----------------------------------------------------------------------*"*"Lokale Schnittstelle:*" IMPORTING*" VALUE(AGENCYDATA_IN) LIKE BAPISADTIN*" STRUCTURE BAPISADTIN*" EXPORTING*" VALUE(AGENCYNUMBER) LIKE BAPISADETA-AGENCYNUM*" TABLES*" EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL*" RETURN STRUCTURE BAPIRET2 OPTIONAL*"----------------------------------------------------------------------* global buffer is t_sbuspart, t_stravelag************************************************************************* length of name field for extension table in extension structure CONSTANTS: C_LENSTRUC TYPE I VALUE 30.* work areas for the table extension structures DATA: WA_BAPI_TE_SA LIKE BAPI_TE_SA, WA_BAPI_TE_SP LIKE BAPI_TE_SP.* clear workareas for database tables CLEAR T_SBUSPART. CLEAR T_STRAVELAG.************************************************************************* perform authority checks************************************************************************* check the incoming data of SAP parameter AGENCYDATA_IN PERFORM CHECK_AGENCYDATA_IN TABLES RETURN USING AGENCYDATA_IN. CLEAR RETURN. LOOP AT RETURN WHERE TYPE = 'E' OR TYPE = 'A'. EXIT. ENDLOOP. IF RETURN-TYPE = 'E' OR RETURN-TYPE = 'A'. EXIT. ENDIF.************************************************************************* Here a customer exit should be provided to check all data* including the EXTENSIONIN parameter.* This exit should be realised with the new exit technology,* however this technology is still under construction.* This example will be extended as soon as this technology is* available.* The Exit should have the following parameters:* -> All BAPI-parameters: AGENCYDATA_IN, EXTENSIONIN* <- RETURN* The function module should pass the RETURN parameter from* the exit to the client. 'E' means that the client can* 'commit' the BAPI call, if there is an 'A' message in the* RETURN parameter, the client should 'rollback work'.************************************************************************* get the missing id's STRAVELAG-ID & SBUSPART-BUSPARTNUM CALL FUNCTION 'NUMBER_GET_NEXT' EXPORTING NR_RANGE_NR = '01' OBJECT = 'SBUSPID' QUANTITY = '1' IMPORTING NUMBER = AGENCYNUMBER EXCEPTIONS INTERVAL_NOT_FOUND = 1 NUMBER_RANGE_NOT_INTERN = 2 OBJECT_NOT_FOUND = 3 QUANTITY_IS_0 = 4 QUANTITY_IS_NOT_1 = 5 INTERVAL_OVERFLOW = 6 OTHERS = 7. IF SY-SUBRC <> 0. RETURN-TYPE = 'E'. RETURN-ID = 'BCTRAIN'. RETURN-NUMBER = '601'. RETURN-MESSAGE_V1 = TEXT-500. APPEND RETURN. EXIT. ENDIF.************************************************************************* Before adding data to the buffer, subsribe the function module* to delete this buffer in case of 'rollback work' by the client.CALL FUNCTION 'BUFFER_SUBSCRIBE_FOR_REFRESH' EXPORTING NAME_OF_DELETEFUNC = 'SAGENCY_REFRESH_BUFFER'.************************************************************************* Fill global buffer for table STRAVELAG. MOVE-CORRESPONDING AGENCYDATA_IN TO T_STRAVELAG. T_STRAVELAG-AGENCYNUM = AGENCYNUMBER. APPEND T_STRAVELAG.* Fill global buffer for table SBUSPART. T_SBUSPART-BUSPARTNUM = AGENCYNUMBER. T_SBUSPART-CONTACT = T_STRAVELAG-NAME. T_SBUSPART-CONTPHONO = T_STRAVELAG-TELEPHONE. T_SBUSPART-BUSPATYP = 'TA'. APPEND T_SBUSPART.* Collect the appended fields of tables STRAVELAG & SBUSPART. LOOP AT EXTENSIONIN. CASE EXTENSIONIN-STRUCTURE. WHEN 'BAPI_TE_SA'. MOVE EXTENSIONIN+C_LENSTRUC TO WA_BAPI_TE_SA.* check if table entry to extension entry exist. for that* we fill the internal given number into the extension table. MOVE AGENCYNUMBER TO WA_BAPI_TE_SA-AGENCYNUM. READ TABLE T_STRAVELAG WITH KEY AGENCYNUM = AGENCYNUMBER. CATCH SYSTEM-EXCEPTIONS CONVERSION_ERRORS = 1. MOVE-CORRESPONDING WA_BAPI_TE_SA TO T_STRAVELAG. ENDCATCH. IF SY-SUBRC <> 0. RETURN-TYPE = 'E'. RETURN-ID = 'BCTRAIN'. RETURN-NUMBER = '888'. RETURN-MESSAGE_V1 = TEXT-800. RETURN-MESSAGE_V2 = SY-TABIX. RETURN-MESSAGE_V3 = TEXT-900. APPEND RETURN. EXIT. ENDIF. MODIFY T_STRAVELAG INDEX SY-TABIX. WHEN 'BAPI_TE_SP'. MOVE EXTENSIONIN+C_LENSTRUC TO WA_BAPI_TE_SP. MOVE AGENCYNUMBER TO WA_BAPI_TE_SP-BUSPARTNUM.: READ TABLE T_SBUSPART WITH KEY BUSPARTNUM = AGENCYNUMBER. CATCH SYSTEM-EXCEPTIONS CONVERSION_ERRORS = 1. MOVE-CORRESPONDING WA_BAPI_TE_SP TO T_SBUSPART. ENDCATCH. IF SY-SUBRC <> 0. RETURN-TYPE = 'E'. RETURN-ID = 'BCTRAIN'. RETURN-NUMBER = '888'. RETURN-MESSAGE_V1 = TEXT-700. RETURN-MESSAGE_V2 = SY-TABIX. RETURN-MESSAGE_V3 = TEXT-900. APPEND RETURN. EXIT. ENDIF. MODIFY T_SBUSPART INDEX SY-TABIX. ENDCASE. ENDLOOP. IF RETURN-TYPE = 'E'.************************************************************************* If an error of type 'E' occured, we will have to make the* buffer consistent again by deleting the data from this call.* Errors of type 'A' can not occur at this point. DELETE T_SBUSPART WHERE BUSPARTNUM = T_SBUSPART-BUSPARTNUM. DELETE T_STRAVELAG WHERE AGENCYNUM = T_STRAVELAG-AGENCYNUM. EXIT. ENDIF.************************************************************************* Create agencys from global buffer in update task. This form will* be performed only once during the 'commit' statement of the* client, thus the data from all BAPI calls can be written to* the database with only one array insert for each table PERFORM CREATE_AGENCYS ON COMMIT.************************************************************************* Here a customer exit should be provided in some way* to insert the data from the ExtensionIn parameter.* This exit should be realised with the new exit technology,* however this technology is still under construction.* This example will be extended as soon as this technology is* available. * Within this exit, customer should modify db IN UPDATE TASK* to guarantee consistency of the data !* Be aware that nothing has happened on database yet so the* customer cannot read data from this or any previous call in* this LUW.* The customer could use buffers too, but has to be aware of* the refreshing concept!* -> All BAPI-parameters: AGENCYDATA_IN, EXTENSIONIN and the id* AGENCYNUMBER.* Nothing comes back!************************************************************************* assume that everything is O.K., fill return parameters RETURN-TYPE = 'S'. RETURN-ID = 'BCTRAIN'. RETURN-NUMBER = '603'. RETURN-MESSAGE_V1 = TEXT-600. RETURN-MESSAGE_V2 = T_STRAVELAG-AGENCYNUM. RETURN-MESSAGE_V3 = TEXT-400. APPEND RETURN. ENDFUNCTION.