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.