This action might not be possible to undo. Are you sure you want to continue?
Business Application Programming Interface (BAPI)
Compiled by Sudhanshu Singh
A Tutorial on Business Application Programming Interface_____________________________
Business Application Programming Interface (BAPI) Business Object Repository (BOR) Transaction Model for Developing BAPIs Defining and Implementing the BAPI Frequently Used BAPIs Defining a BAPI Scenario Defining a BAPI and Its Interface Determining the SAP Business Object and Its Key Fields Defining the Interface Structure of the BAPI Naming Parameters in the Function Module Specifying the Required Objects in ABAP Dictionary Naming the Method in the BOR Naming Parameters in the BOR Creating Individual Programming Objects Conversion Between Internal and External Data Formats Converting Between Internal and External Data Formats Application Example Defining Methods in the BOR Using the BOR/BAPI Wizard Example of a Function Module Testing the BAPI Releasing and Freezing the BAPI Programming BAPIs Programming Change BAPIs Programming Replicate/Clone BAPIs Programming Value Ranges Internal and External Data Formats Reporting Errors Providing Input Help (F4 Help) Improving the Performance of your BAPI Enhancements to Existing BAPIs Customer Modifications of BAPIs Implementing BAPIs in ALE Scenarios BAPI Implementation Checklist 3 4 5 8 9 11 13 14 15 16 17 18 18 20 21 22 23 25 27 28 29 30 31 34 36 37 39 42 44 45 48 50 52
_________ __________________________________________________________________ 2
A Tutorial on Business Application Programming Interface_____________________________
Business Application Programming Interface
A Business Application Programming Interface (BAPI) is a precisely defined interface providing access to processes and data in business application systems such as R/3. BAPIs are defined as API methods of SAP Objects. These objects and their BAPIs are described and stored in the Business Object Repository (BOR).
BAPIs can be called within the R/3 System from external application systems and other programs. A BAPI call can either be made as an object oriented method call or as a remote function call (RFC). BAPIs are a global communication standard for business applications. Examples of what BAPIs can be used for include: R/3 satellite systems Distributed R/3 scenarios using Application Link Enabling (ALE) Connecting R/3 Systems to the Internet using Internet application components (IACs) Visual Basic programs as front ends to R/3 Systems Work flow applications that extend beyond system boundaries Customers' and partners' own developments Connections to non-SAP software Connections to legacy systems
_________ __________________________________________________________________ 3
A Tutorial on Business Application Programming Interface_____________________________
Business Object Repository (BOR)
The Business Object Repository (BOR) is the object oriented repository in the R/3 System. It contains, among other objects, SAP Business Objects and their methods. In the BOR a Business Application Programming Interface (BAPI) is defined as an API method of an SAP Business Object. Thus defined, the BAPIs become standard with full stability guarantees as regards their content and interface.
With regard to SAP Business Objects and their BAPIs, the BOR has the following functions: • provides an object oriented view of R/3 System data and processes. R/3 application functions are accessed using methods (BAPIs) of SAP Business Objects. Implementation information is encapsulated; only the interface functionality of the method is visible to the user. • • arranges the various interfaces in accordance with the component hierarchy, enabling functions to be searched and retrieved quickly and simply. Manages BAPIs in release updates. BAPI interface enhancements made by adding parameters are recorded in the BOR. Previous interface versions can thus be reconstructed at any time. When a BAPI is created the release version of the new BAPI is recorded in the BOR. The same applies when any interface parameter is created. The version control of the function module that a BAPI is based on is managed in the Function Builder. • Ensures interface stability. Any interface changes that are carried out in the BOR, are automatically checked for syntax compatibility against the associated development objects in the ABAP Dictionary.
You should only define a BAPI as a SAP Business Object method in the BOR if the function module that the BAPI is based on has been fully implemented. Full access to the BOR is restricted to the persons responsible for the objects involved and for quality control. BOR-BAPI Wizard The BOR-BAPI Wizard assists with creating new BAPI methods in the BOR. It takes you through the creation process step by step.
_________ __________________________________________________________________ 4
A Tutorial on Business Application Programming Interface_____________________________
Transaction Model for Developing BAPIs
The transaction model in which BAPIs are used determines how you have to program BAPIs. The transaction model described here has been used to develop BAPIs for R/3 Releases 3.1 and 4.0A. Logical Unit of Work (LUW) and Statelessness Within the context of this transaction model a transaction represents one processing step or one logical unit of work (LUW). When a transaction is called, database operations are either fully executed or not at all. The whole transaction must be programmed to be stateless. This transaction model requires that: • no data is imported that may indirectly affect the result. If a transaction is called more than once, each call must have the same result. For BAPIs this means, for example, that Set or Get parameters cannot be used. However, you can keep Customizing data in a global memory as this data remains unchanged even if transaction calls are repeated. • • there must be no functional dependencies between two transactions. either all relevant data has to be changed in the database or none at all.
The following sections describe how the transaction model effects BAPI development: • • Using the Transaction Model in Release 3.1 Using the Transaction Model in Release 4.0A
Using the Transaction Model in Release 3.1
The example below of an external program calling a BAPI to change data in an R/3 System, illustrates how the transaction model affects BAPI development in Release 3.1. Assume the transaction was written in, for instance, Visual Basic and that data is to be changed in the R/3 System only. The RFC connection is live the whole time the external program is logged on to the R/3 System to avoid having to connect and disconnect repeatedly. When the RFC connection is already established, an RFC call does not essentially take up any more CPU time than a direct call to the function module from within the R/3 System. There is one BAPI call for each transaction in the transaction model supported in 3.1. BAPIs can only be called synchronously. A BAPI call is essentially the call of the underlying RFC capable function module.
The process flow of the program consists of the steps below (see graphic): Log on _________ __________________________________________________________________ 5
. _________ __________________________________________________________________ 6 .... (Visual Basic source code) Call BAPI to read and/or change data .. must be carried out completely or not at all (LUW). BAPIs are affected as follows: • Initial state each time a BAPI is called A repeated call of one BAPI must produce the same result. customizing data. A follow up call must not presuppose an earlier call. Only data that is not affected by the execution of the BAPI. The "Commit Work" command is always invoked at the end of the function module of a BAPI that modifies data. can be buffered.. (Visual Basic source code) Call BAPI to read and/or change data . This is why BAPIs to be implemented in 3... • All or nothing principle A database change. • No functional dependency between two BAPIs A BAPI call must not be negatively affected by an earlier call of another BAPI.. creating a new sales order. for example.A Tutorial on Business Application Programming Interface_____________________________ .. (Visual Basic source code) Log off Prerequisites What do the terms "LUW" and "statelessness" mean to BAPIs that are implemented in the framework of this transaction model? If a transaction represents one Logical Unit of Work and in addition is supposed to be stateless. for example...1 are created with integrated commit control.
. the existing transaction model used in Release 3..1 should not be changed... This is achieved by using the RFC capable function module BAPI_TRANSACTION_COMMIT which executes the command "Commit Work".0A the Commit control must be taken out of write BAPIs. (Visual Basic source code) Call BAPI to read and/or change data Call BAPI_TRANSACTION_COMMIT . for example. BAPIs must support the transaction model used in the R/3 System. (Visual Basic source code) Call BAPI to read and/or change data Call BAPI_TRANSACTION_COMMIT .A Tutorial on Business Application Programming Interface_____________________________ Using the Transaction Model in Release 4. This procedure is required because BAPIs are used for continued development of the R/3 System.. for separating individual R/3 components.. that is..0A Purpose In Release 4. If this is the case..... those BAPIs that cause database changes.. (Visual Basic source code) Log off _________ __________________________________________________________________ 7 . Features A program based on this transaction model could consist of the following steps (see graphic): Log on . However.
For function modules that implement BAPIs certain standards and rules must be adhered to over and above the standard programming rules for function modules. a BAPI is implemented as an RFC capable function module which is maintained in the Function Builder. Check if the BAPI you want to implement is in one of these general categories. There is a range of BAPIs that provide basic functions and these can be implemented for most of the SAP Business Objects. This section describes how to define a BAPI and which particular guidelines to comply with. When implementing BAPIs follow the requirements below to ensure you achieve consistent behavior and representation of BAPIs as object oriented methods of SAP Business Objects.A Tutorial on Business Application Programming Interface_____________________________ Defining and Implementing the BAPI Purpose A BAPI is an API method of a business object and is defined as such in the Business Object Repository (BOR). However. Process Flow The process of defining and implementing a BAPI consists of the following steps: • • • • • • Describing the Scenario in which the BAPI is used Reviewing the BAPI Concept and BAPI Scenario Defining a BAPI and Its Interface Creating Individual Programming Objects Testing the BAPI Releasing and Freezing the BAPI _________ __________________________________________________________________ 8 . For information on these BAPIs see the section Frequently Used BAPIs.
for example. company codes and material numbers. For further information on programming GetList BAPIs see Programming Value Ranges. This BAPI is used only for displaying the status of an object and does not retrieve full details like the BAPI GetDetail. for example. together with other useful information. • GetStatus The BAPI GetStatus is used to query the status of an SAP Business Object. This workflow method is indirectly invoked when the calling program instantiates an object. These BAPIs are: BAPIs for Reading Data The following BAPIs provide you with read-only access to data in the associated Business Object: • GetList With this BAPI you can select a range of object key values. as listed below. the BAPI GetDetail. _________ __________________________________________________________________ 9 . • Change The BAPI Change changes an existing instance of a SAP Business Object. for example. BAPIs for Creating or Changing Data The following BAPIs can create. To specify appropriate selection requirements the calling program must pass the relevant parameters to the interface. to determine the processing status of a sales order.A Tutorial on Business Application Programming Interface_____________________________ Frequently Used BAPIs Definition Some BAPIs and methods provide basic functions and can be used for most SAP Business Objects. The key values can then be passed on to another BAPI for further processing. • Delete The BAPI Delete deletes an instance of a SAP Business Object. short texts. For more information about the BAPI Change see Programming Replicate/Clone BAPIs. a sales order. for example. The key values selected by the BAPI GetList are returned to the calling program in a table. for example. You should implement this method as a workflow method and not as a BAPI (RFC capable function module). a sales order.ExistenceCheck of the business object CompanyCode (BUS0002) is an example of this. for example. a sales order. whether the customer master has been created. • ExistenceCheck The BAPI ExistenceCheck checks whether an entry exists for an SAP Business Object. for example. change or delete instances of a business object: • Create or CreateFromData The BAPI Create or CreateFromData creates an instance of an object. by using GetSAPObject("CompanyCode") from within Visual Basic. The method CompanyCode. • GetDetail The BAPI GetDetail uses a key to retrieve details about a specific instance of an object and returns this data to the calling program. for example. for example.
Unlike the BAPI Clone. _________ __________________________________________________________________ 10 . For further information about these BAPIs see Programming Replicate/Clone BAPIs: • Replicate The BAPI Replicate is used by a client system to request clones of business objects in a server system.A Tutorial on Business Application Programming Interface_____________________________ BAPIs for Replicating Business Object Instances The BAPIs below can be implemented as methods of business objects that can be replicated. This method must be implemented for each business object to be cloned. • CloneMultiple The BAPI CloneMultiple is used by a system to replicate several business objects on another system or to modify several business objects that have already been cloned. the BAPI CloneMultiple can replicate or modify several business object instances at the same time. At least one of the following BAPIs must be implemented for each business object to be cloned: • Clone The BAPI Clone is used by a system to replicate one business object on another system or to modify one business object that has already been cloned.
a list of creditors is to be displayed from which a specific creditor can be selected. However. Example In the scenario to be implemented. using another BAPI. Their relationships with each other must be clearly defined. the two BAPIs remain functionally independent of each other. the BAPI "Display details of a specific creditor" can be used without first calling the BAPI "Display list of creditors". Example To read a creditor's details as described in the above scenario.A Tutorial on Business Application Programming Interface_____________________________ Defining a BAPI Scenario Purpose Before you program a BAPI you should clearly define the processes and situations the BAPI will be used for. • Which SAP Business Objects are involved? From the scenario definition and with the help of the process model you can get information about the SAP Business Objects relevant to the BAPI scenario. two BAPIs are required: Display list of creditors Display details of a specific creditor The interdependency between these two BAPIs is evident because first the creditor list is displayed to obtain the ID of the specific creditor sought. specific details about this creditor are to be displayed. Example _________ __________________________________________________________________ 11 . a BAPI is required to read data about a creditor. because if the creditor ID is known. • To what extent can the BAPI's functionality be implemented within the scope of the business object? A BAPI should be developed so that it provides functionality exclusively within the context of its associated SAP Business Object. consider the following issues: • Which scenario is to be implemented? Every BAPI should be based on a model of a scenario in which it can be usefully employed. The relevant SAP Business Object for this scenario is Creditor. details of this creditor can then be displayed. • What functionality should the BAPI provide and how does it affect related BAPIs. Then. From this ID. Process Flow To define the scenario the BAPI is to be used for. If the data of a different SAP Business Object is to be read or updated then the appropriate interface for this object must be used. First of all. The functions or methods of these other objects are used implicitly (delegation principle). You can describe the scenario in the form of a process model. especially the other BAPIs of the SAP Business Object in question? In line with the scenario concept BAPIs must complement each other to create a complete scenario.
You will also have identified the SAP Business Objects relevant to the BAPI scenario. Result Start developing the BAPI only after you have successfully completed the review. • Is the BAPI assigned to the SAP Business Object in a meaningful and semantically correct way? Result Once you have considered these issues you will be able to clearly conceptualize the functionality of the planned BAPI(s). You also defined relevant SAP Business Objects. Before you implement the scenario and begin defining and developing the BAPI. you should carry out a review of the scenario concept.A Tutorial on Business Application Programming Interface_____________________________ The BAPIs required to read creditor details in the above scenario are only able to access data in the SAP Business Object Creditor. _________ __________________________________________________________________ 12 . Other object types are not involved. Process Flow You should carry out the review of the BAPI scenario in cooperation with all persons involved in the BAPI development and those responsible for quality control in your development group. Review Purpose In the previous step you created a concept for a scenario a BAPI could be applied to.
Parameters must not be converted before they are passed to and from the BAPI interface. You can use the default technical name (object type) of the SAP Business Object as the basis of the function group name. The technical name of a SAP Business Object usually takes the form of BUSnnnn.A Tutorial on Business Application Programming Interface_____________________________ Defining a BAPI and Its Interface Purpose After you have carried out the review of the BAPI concept and it has been accepted. ISO codes and fields with an internal key. you will decide on the names. If a function group does not already exist. double click the name of the Business Object. For information about naming a method refer to Naming the Method in the BOR. as described in Determining the SAP Business Object and Its Key Fields. open the Business Object in the Business Object Repository (BOR). or if a function group does not exist already. Only after you have planned and defined these required details can you start to implement the BAPI. For example. To display further details. in the case of a BAPI which reads details for the object type Creditor. then plan a name for the one to be created. All BAPIs belonging to one SAP Business Object should be stored as function modules in one function group. • • • Specifying the Required Objects in ABAP Dictionary Naming the Method in the BOR Naming Parameters in the BOR _________ __________________________________________________________________ 13 . Ascertain whether a function group has already been created for the BAPIs of the SAP Business Object in question. In this step. • • Naming Parameters in the Function Module Defining the format for passing the values in the function module interface. planning a name for one. the name of the associated function module is BAPI_CREDITOR_GETDETAIL. you can start defining the BAPI itself. For example. parameters. where n is a number. the object type. The naming convention is: BAPI_<Business Object name>_<method name>. • Assigning a name to the function module Choose a name that gives an indication of what the BAPI is used for. the following steps must be completed: • • • Determining the SAP Business Object and Its Key Fields Defining the Interface Structure of the BAPI Identifying the name of the function group. Use the suffix "nnnn" as the name of the function group. To ascertain the technical name of the Business Object. Process Flow To define the scope and required components of the BAPI to be implemented. as described in Creating Individual Programming Objects and Programming BAPIs. and characteristics of the BAPI and determine the structures the BAPI will be based on. for example. if the technical name of the object is BUS1008 then the associated BAPI function group is called 1008. This is because BAPIs are programming interfaces and not end user interfaces. Exceptions are currency codes.
The business objects are displayed in the order of the R/3 application hierarchy. Example SAP Business Object Creditor has a key field named CreditorId. 2. Unlike instance-independent methods. Select Tools → ABAP Workbench → Overview → Business Object Browser . All the key fields defined in the BOR for the SAP Business Object in question must be used as the parameters in the function module. 3. To display the Business Object and its key fields follow the steps below: 1. You can differentiate between instance-dependent and instance-independent BAPI methods. The names of the key fields in the SAP Business Object and the corresponding parameters in the BAPI function module must be the same. A key is defined in the BOR for most SAP Business Objects. instance-dependent methods relate to one instance (one specific occurrence) of an SAP Business Object type. for example to one specific sales order. This key field must be defined as a parameter with the name CREDITORID in the function modules of the instant-dependent BAPIs for this Business Object.A Tutorial on Business Application Programming Interface_____________________________ 1 23 Determining the SAP Business Object and Its Key Fields You have to identify the relevant SAP Business Object in the Business Object Repository (BOR) and determine whether the key fields of the Business Object are relevant for your BAPI. because the name links the key fields to the parameters. expand the node Key fields. In the case of instance-dependent BAPIs. Select the required SAP Business Object in the application hierarchy and double click it to open it. This key can consist of several key fields. _________ __________________________________________________________________ 14 . To display the Business Object's key fields. the key fields of the corresponding SAP Business Object must be used as parameters in the function module the BAPI is based on so that the associated object instance can be identified. The contents of these key fields uniquely identify one individual instance of an SAP Business Object. For further information see Defining the Interface Structure of the BAPI.
export and table parameters required for calling the BAPI. an order number in the BAPI SalesOrder.CreateFromData. for example. Caution You cannot use Changing and Exception parameters in a function module which implements a BAPI. that is. To read creditor details. the key field of the Business Object should be set as an export parameter in the BAPI function module. proceed as follows: 1. the individual import.GetDetail and Customer.CheckPassword. Exceptions are write BAPIs. These BAPIs return one key value. For example. To map these requirements onto the BAPI interface. the calling program has to pass the ID of the creditor and the company code. Specify what other data is relevant as import. That way a specific instance of the Business Object is identified. as described in the list item above. Example The BAPI to be developed is to read data from the SAP Business Object Creditor.GetStatus. Process Flow To define the interface parameters. 2. For BAPIs that are class methods a key field is neither set as an import nor as an export parameter in the BAPI function module. For BAPIs that generate instances. If a key value is to be passed to the BAPI by the calling program. The key fields of the SAP Business Object are some of the most important BAPI parameters. Class methods are instance-independent and are called without the use of key values. Usually they return a table with a selection of key values. the key field must be set as an import parameter in the function module of the BAPI. for example. specific details and bank details.A Tutorial on Business Application Programming Interface_____________________________ Defining the Interface Structure of the BAPI Purpose In this step you are going to define the BAPI interface. the following parameters must be set in the function module which the BAPI is based on: The key field CreditorID of the SAP Business Object as an import parameter An import parameter for the company code A Return parameter that reports messages back to the calling program A parameter for general details of the creditor A parameter for specific details of the creditor A parameter for bank details of the creditor _________ __________________________________________________________________ 15 . Every BAPI must have an Export parameter return that reports messages back to the calling program. The creditor data returned is to include general details. export or table parameters for the BAPI. this could be a customer number (CustomerNo) in the BAPIs Customer. or the number of a sales document in the BAPI SalesOrder. the BAPIs Create or CreateFromData. Check whether the key fields of the SAP Business Object are required in the interface.
The names of parameters in the function module must be written in capitals. the following parameters were identified: • • • • • • An import parameter for the key field CreditorId of the SAP Business Object An import parameter for the company code A Return parameter A parameter for general details of creditor A parameter for specific details of creditor A parameter for bank details of creditor You could use the following names for these parameters in the function module: Parameters and their Names in the Function Module Contents Creditor number Company code General creditor details Specific creditor details Return parameter Bank details Name in Function Module CREDITORID COMPANYCODE CREDITORGENERALDATA CREDITORCOMPANYDATA RETURN CREDITORBANKDATA Parameter Type IMPORTING IMPORTING EXPORTING EXPORTING EXPORTING TABLES _________ __________________________________________________________________ 16 . and the latter are restricted to a maxiumum of 20 characters. Choose meaningful names and do not use abbreviations. Prerequisites You can only define export. This is because the names you choose for the function module parameters are used in the Business Object Repository (BOR) as the names of the corresponding method parameters.A Tutorial on Business Application Programming Interface_____________________________ Naming Parameters in the Function Module Purpose In the previous step you identified the contents of the interface parameters. Now you can specify the names of these parameters in the function module. because the names of parameters in the function module must be identical to the parameter names in the BOR. Example • • In the above example based on the creditor scenario. When assigning parameter names follow the guidelines below: • • The names must be in English The names of parameters in the function module can generally be a maximum of 30 alphanumeric characters. Give meaningful names to the parameters in the function module interface to give the BAPI an easy-to-use interface. The names of parameters in a function module that implements a BAPI can only have a maxiumum of 20 alphanumeric characters. import and table parameters in the function module interface of the BAPI.
1. Whenever possible use these names for the field and parameter names. Example In the example in the previous steps the reference fields/tables shown below were identified for the parameters.0 you can use up to 30 characters. Names should begin with the prefix BAPI. • Chose meaningful names in English for the structure fields. The second example shows how you could name the structures more meaningfully in Release 4.0 Parameter in the Function Module CREDITORID COMPANYCODE CREDITORGENERALDATA CREDITORCOMPANYDATA RETURN CREDITORBANKDATA Reference Field/Table BAPI1008-VENDOR_NO BAPI1008-COMP_CODE BAPI1008_CREDITORGENERALDATA BAPI1008_CREDITORCOMPANYDATA BAPIRETURN2 BAPI1008_CREDITORBANKDATA _________ __________________________________________________________________ 17 . This enables changes to be made in R/3 applications without affecting BAPIs.A Tutorial on Business Application Programming Interface_____________________________ Specifying the Required Objects in ABAP Dictionary Purpose After you have specified the contents and names of the required interface parameters you can identify and define the required data objects in the ABAP Dictionary.0. As of Release 4. Note the following: • • You can use individual fields.0 it is possible to assign English names to the data elements in the ABAP Dictionary. Give meaningful names to the data structures you create. You can use existing data elements and domains for the fields in the BAPI structures. You have to create your own data structures for the BAPI interface that are independent of the data structures generally used in the R/3 application. from Release 4. The first example here uses structures created in Release 3. structures and tables as parameters. Parameters and their Reference Fields in Release 3.1 Parameter in the Function Module CREDITORID COMPANYCODE CREDITORGENERALDATA CREDITORCOMPANYDATA RETURN CREDITORBANKDATA Reference Field/Table BAPI1008-VENDOR_NO BAPI1008-COMP_CODE BAPI1008_4 BAPI1008_5 BAPIRETURN2 BAPI1008_6 Parameters and their Reference Fields in Release 4. You can use alphanumeric characters and underscores. Up until Release 4. Every parameter must refer to a Dictionary object.0 ten characters were available for naming structures. In this Release structure names had a maximum of 10 characters.
ChangePassword. Select an SAP Business Object in the application hierarchy in the Business Object Browser and expand the node Methods. _________ __________________________________________________________________ 18 . for example. for example. take a look at the parameters of existing BAPIs in the BOR. When naming parameters of a BAPI in the BOR take account of the following: • • The parameters must be in English. then select a BAPI. BAPIs are identified by the API indicator (green circle) to the right of the method name. Naming Parameters in the BOR Purpose The parameter names of the methods in the Business Object Repository (BOR) are based on the parameter names in the function module. the components of parameter names in the BOR are separated by upper and lower case letters. Unlike parameter names in the function module that must be written completely in upper case. You have already named the parameters of the function module in Naming Parameters in the Function Module. and can only have a maximum of 30 characters. BAPI names must be meaningful and be in English. To get an idea about naming BAPIs take a look at existing BAPIs of an SAP Business Object in the BOR.A Tutorial on Business Application Programming Interface_____________________________ Naming the Method in the BOR Purpose You can now plan the name of the BAPI method in the Business Object Repository (BOR). A parameter name in the BOR cannot have more than 20 characters. Caution From Release 4. This was not necessarily the case in earlier releases.0 the names of the BAPI parameters in the BOR and the names of the parameters in the corresponding function module must be identical. then finally select Parameter. Expand the node for the object's methods. Select an object type in the application hierarchy in the Business Object Browser. For example: • • • ExistenceCheck ChangePassword GetDetail If you are implementing one of the frequently used BAPIs use the appropriate generic name. • To get an idea about naming BAPI parameters. ChangePassword. Every new word in the parameter name begins with a capital letter. Prerequisites The individual components of BAPI names are identified by the use of upper and lower case letters.
The table below shows what the parameter names could look like in the function module and in the BOR.A Tutorial on Business Application Programming Interface_____________________________ Example In the example in the previous steps six parameters for a BAPI were identified and names given to these parameters in the function module. Parameters and their Names in the Function Module and in the BOR Contents Creditor number Name in Function Module CREDITORID Name in the BOR Defined as a key field of the Business Object Creditor and NOT as a BAPI parameter. CompanyCode CreditorGeneralData CreditorCompanyData Return CreditorBankData Company code General creditor details Specific creditor details Return parameter Bank details COMPANYCODE CREDITORGENERALDATA CREDITORCOMPANYDATA RETURN CREDITORBANKDATA _________ __________________________________________________________________ 19 .
fields and domains. BAPI documentation is essential because it is very difficult to use a BAPI that has not been well documented. Also. as described in Defining Methods in the BOR Using the BOR/BAPI Wizard. You should then verify that the parameters and parameter types of the method in the BOR match the parameters of the underlying function module in the Function Builder. Writing the program for the function module. as described in Conversion Between Internal and External Data Formats. Refer to Example of a Function Module. Creating the function group in the Function Builder (if required). Make sure that the documentation is translated into the required languages. in the ABAP Dictionary. for example. Process Flow To create the required programming objects in R/3 the following steps are required: • • • • Creating the Dictionary objects. Creating the function module in the Function Builder.A Tutorial on Business Application Programming Interface_____________________________ Creating Individual Programming Objects Purpose After you have identified the individual programming objects and given them names you should create them in the R/3 System as required. see Programming BAPIs for more information. • • • Using the program to map the internal data format onto the external data format. Writing documentation for the BAPI. structures. _________ __________________________________________________________________ 20 . The BAPI documentation must be written in the Function Builder for the function module that the BAPI is based on. Defining the function module as a method of the corresponding SAP Business Object in the BOR.
This is necessary to be able to freeze the BAPI structure and to maintain a stable BAPI interface. You can generate function modules which help to automatically convert and map the data. mapping the result from the internal structure onto the BAPI (structuring export parameters) Features The function modules generated have the following functions: • • • • They map between German and English field names They convert ISO codes They convert currency amounts into the required internal or external format They convert internal and external keys such as those used by the PSP Element (Project structure plan) Any problems that could arise during data conversions are reported back using the RETURN parameter. in the internal working structures of a BAPI German field names are often used. As a result of these discrepancies the fields of the internal working structure of the BAPI must be mapped onto the fields of the BAPI interface before the BAPI is called. However. Moreover in one of the previous steps you created your own structures for your BAPI which are different from the structures used in R/3 applications. _________ __________________________________________________________________ 21 . Existing function modules can not yet be regenerated with this transaction. The Application Example illustrates the use of these function modules. mapping the inbound parameters onto the internal structure (structuring import parameters) When implementing the BAPI. To regenerate an existing function module you have to manually delete the function module and then generate it anew. Activities To generate the required function modules see Converting between Internal and External Data Formats. to enable further development in the R/3 application. For more information refer to Internal and External Data Formats. Limitations Occasionally you may have to manually edit the source code of a function module after it has been automatically generated. You can use the generated function modules in the source code of your BAPI for: • • • • Mapping the internal working structures of the BAPI onto the external BAPI structures before the BAPI is called Mapping the result onto the internal structures after the BAPI call When implementing the BAPI.A Tutorial on Business Application Programming Interface_____________________________ Conversion between Internal and External Data Formats Use According to the guidelines BAPI interfaces should only have English field names. yet at the same time.
_________ __________________________________________________________________ 22 . Select Function module → Generate A dialog box is displayed in which you can enter details of the function module to be generated. In addition to the source text for the function module you can have a blank FORM routine added for your own program code if you have to make manual modifications. type Displays the conversion type. To generate the function module. . Select Continue. Step by Step Procedure To generate the function module follow the steps below: 1.Field in external structure Contains the field names of the external BAPI structure. select Save. The FORM routine contains the same parameters as the generated function module. you must make sure that the internal and external structures exist.Conv. Specify the required direction for mapping. A table is displayed containing suggestions for the conversion of each field of the external BAPI structure. For further information select F1 help for columns Status and Conv. . In the appropriate input fields enter the names of the external BAPI structure and the internal working structure you are making the conversion between. select Form to edit. The input fields for the name of the function module and the short text contain suggested values which you can accept or change. 3. In the field Function group enter the name of the function group to which the generated function module is to be added. i. To do this. You can incorporate it into the source code of your BAPI as required. 4. type.A Tutorial on Business Application Programming Interface_____________________________ 1 23 Converting Between Internal and External Data Formats Prerequisites Before you can generate the function modules to map between the internal working structures and the external BAPI structures. . 5. Result The function module is stored in the Function Builder in the function group you specified.e.Field in internal structure Displays the fields of the internal structure to which/from which mapping is to be carried out. 2. The table contains the following columns: . Select Tools → Business Framework → BAPI Development → Generate module to map fields. is the internal structure to be mapped onto the external structure or vice versa.Status Indicates if the conversion is possible or if data is missing.
. bapi_preis like bapi_material_preis. The external structure bapi_material_price contains the fields: Fields in the external BAPI structure Field currency_iso currency amount Description ISO currency code Currency code Amount Data element isocd waers bapimatprice Domain Isocd waers bapicurr The application programmer in the R/3 System who intends to use this BAPI uses the internal structure mat_preis in his or her own program. After invoking the BAPI the application programmer must convert these fields into the internal format used in R/3 in order to be able to process the fields.. The application code could be as follows: . This structure consists of the following fields: Fields in the internal working structure Field matnr waers stprs Description Material number Currency code Unit price Data element matnr waers stprs Domain matnr waers strps The BAPI structure bapi_material_price contains an ISO currency code and a currency amount.A Tutorial on Business Application Programming Interface_____________________________ Application Example The BAPI used in this fictitious example can read the standard price of a material: bapi_material_get_price importing material like mara-matnr exporting material_price like bapi_material_price. the application developer can generate the function module. This function module has the following interface: function map2i_bapi_material_price_to_mat_preis importing external structure bapi_material_price changing internal structure mat_preis exceptions error_during_iso_convertion error_converting_currency_amount. data: matnr like mara-matnr. . preis like mat_preis. map2i_bapi_material_price_to_mat_preis. Using the function Generate module to map fields. which converts the currency and amount fields... _________ __________________________________________________________________ 23 .
* Map and convert the result to internal format call function map2i_bapi_material_price_to_mat_preis exporting external = bapi_preis changing internal = preis. _________ __________________________________________________________________ 24 .A Tutorial on Business Application Programming Interface_____________________________ * Call BAPI call function bapi_material_get_price exporting material = matnr changing material_price = bapi_preis. * * * exceptions error_during_iso_convertion error_during_currency_amount_conversion preis-matnr = matnr.
In the next dialog box specify the following information for the method to be defined: Method A default name for the method is provided. Make sure that the parameter names of the method in the BOR are identical to the parameter names in the function module. Select Utilities → API Methods → Add method. _________ __________________________________________________________________ 25 . Otherwise select Business Object Repository. 2. Instance-independent Enter relevant details for your BAPI. BAPIs are usually implemented synchronously. the suggested method name might be BapiSalesorderGetstatus. Then select Continue. Each new word in the parameter name must start with a capital letter. To define your BAPI as a method of the Business Object: 1. You have already identified the technical name in Defining a BAPI and Its Interface. A list of parameters and default names is displayed which you need to edit as required. In the next dialog box indicate whether you want to display all object types or only business objects. Make sure that a BAPI is not dialog orientated. based on the name of the function module. 3. In the next dialog box enter the name of the function module. When the relevant SAP Business Object is displayed. for example. 4. The application hierarchy is displayed. BAPI_CREDITOR_GETDETAIL and select Continue. You use the BOR/BAPI-Wizard to do this. Synchronous. Select Next Step. Radio buttons Dialog. You should edit this so that the resulting name is GetStatus. so that only the method name is left. You will have to modify the suggested name. Delete the prefix BAPI and the business object name. select Change. On the initial Business Object Builder screen you can directly access the SAP Business Object if you know the technical name of the object (object type). Begin every new word of the method name with a capital letter and do not use underscores. Select the required SAP Business Object in the application hierarchy and open it. 2. Texts Enter meaningful descriptions for your BAPI. Example: If the name of the function module is BAPI_SALESORDER_GETSTATUS. Select Tools → Business Framework → BAPI Development → Business Object Builder.A Tutorial on Business Application Programming Interface_____________________________ 1 23 Defining Methods in the BOR Using the BOR/BAPI Wizard Prerequisites If the function module which your BAPI is based on has been fully implemented you can define it as a method of an SAP Business Object in the Business Object Repository (BOR). Step by Step Procedure First find the relevant SAP Business Object in the BOR: 1.
check that all the definitions have been made correctly by the BOR/BAPI Wizard. Table parameters are marked with a tick in the column 'MLine' (multiple lines). To create the method select Yes in the next dialog box. Result After the program has been generated and executed. _________ __________________________________________________________________ 26 . Select Next Step. To do this look at the method in the BOR. 5.A Tutorial on Business Application Programming Interface_____________________________ Also specify whether the individual table parameters are used for data import or data export.
GetDetail of the SAP Business Object CompanyCode (BUS0002). * authority check: S_TABU_DIS V_T001 perform check_authority_t001 changing return. _________ __________________________________________________________________ 27 . endfunction. The key field parameter "COMPANYCODEID" is defined as the import parameter. The function module performs authorization checks.. The function module covers all exceptions. Note the following in the source code: • • • • • The name of the function module is in the format: BAPI_<Business Object name>_<Method name>. The BAPI CompanyCode. Specific BAPI data structures are used.GetDetail reads details of a company code.A Tutorial on Business Application Programming Interface_____________________________ Example of a Function Module This example function module implements the BAPI CompanyCode. if sy-subrc ne 0. perform set_return using '10' changing return. * company code call function 'FI_COMPANY_CODE_DATA' exporting i_bukrs = companycodeid importing e_t001 = t001 exceptions error_message = 1 others = 0.. check return is initial. . check return-code is initial. *"-----------------------------------------------------*"*"Local interface: *" IMPORTING *" VALUE(COMPANYCODEID) LIKE BAPI0002_2-COMP_CODE *" EXPORTING *" VALUE(COMPANYCODE_DETAIL) LIKE BAPI0002_2 *" STRUCTURE BAPI0002_2 *" VALUE(COMPANYCODE_ADDRESS) LIKE BAPI0002_3 *" STRUCTURE BAPI0002_3 *" VALUE(RETURN) LIKE BAPIRETURN *" STRUCTURE BAPIRETURN *"-----------------------------------------------------. Source Code: function bapi_companycode_getdetail... endif. identified by the prefix BAPI.
correct them and repeat the tests until you and the quality control team in your group are fully satisfied with the BAPI implementation. You can enter the appropriate test values in the parameters of your function module and by running the test you can verify that the source code in the function module is processed without errors. Process Flow You can test the BAPI in the following ways: • By calling the underlying function module You can individually test the function module in the Function Builder. Call the Business Object Builder by selecting Tools → Business Framework → BAPI Development → Business Object Builder. you need to specify appropriate test values in the parameters of the BAPI. You need to know the technical name of the Business Object (object type) that you have already specified in Defining a BAPI and Its Interface. • Check that the BAPI can be called by BAPI ActiveX Control. Specify the appropriate object type and then start running the test by selecting Test. • By calling the BAPI in a Visual Basic program If possible write a program in Visual Basic to call the BAPI. Check that the BAPI can be called by making RFC calls to the underlying function module. To test the BAPI implementation. Select Create instance and specify the required instance. _________ __________________________________________________________________ 28 .A Tutorial on Business Application Programming Interface_____________________________ Testing the BAPI Purpose After you have implemented the function module your BAPI is based on and you have defined the BAPI as an SAP Business Object method in the Business Object Repository (BOR) you should check that the BAPI functions properly. Check the availability of documentation in the different logon languages. Prerequisites Carry out the test together with persons responsible for quality control in your development group. • Testing the BAPI in the BOR You can test the BAPI by testing the individual method of the Business Object in the Business Object Builder. Before you start testing make sure that the underlying function module has been completely implemented and that the BAPI has been correctly defined in the BOR as a Business Object method. Note that for an instance-dependent BAPI you have to first specify an instance before you can run the BAPI test. Result If you find any errors in the BAPI implementation.
_________ __________________________________________________________________ 29 . To release and freeze a BAPI follow the steps below: • • First release the function module in the Function Builder. Set the status of the method to 'released' in the Business Object Builder. and incompatible changes are rejected. Select Function module → Release → Release. the implementation is complete. Place the cursor again on your BAPI in the Business Object Builder and select Utilities → API methods → Freeze method. Releasing and freezing the BAPI should be done in cooperation with the persons responsible for the development objects involved and those responsible for quality control. You can now release the function module the BAPI is based on and the method in the Business Object Repository (BOR). Releasing and freezing also prevents anyone making incompatible changes to the BAPI. Freeze the method. Place the cursor on your BAPI and select Edit → Change status → Released. and freeze the BAPI as a method in the BOR. because all changes made to a released and frozen BAPI are automatically checked for compatibility in the BOR and the ABAP Dictionary. • Check the new status of the function module in the Function Builder and the method in the BOR. Select the relevant SAP Business Object in the Business Object Builder and expand the node Methods. For more information about what to look out for when making changes to existing BAPIs see Enhancements to Existing BAPIs. Once the BAPI has been released and frozen. it becomes available as a fully implemented Business Object method.A Tutorial on Business Application Programming Interface_____________________________ 1 23 Releasing and Freezing the BAPI After you have completed the function module and BAPI tests and you are satisfied that they function properly.
a-z and 0-9. Application servers might not support ASCII. In other words. BAPIs must not produce any screen output. Database changes can only be made through updates. display a list on the screen. Every BAPI has a different functional content. • • • • Recommendations • Minimize interface complexity. • Other Features Also pay attention to the following when you program BAPIs: • • • • • • • Programming Change BAPIs Programming Replicate/Clone BAPIs Programming Value Ranges Internal and External Data Formats Reporting Errors Providing Input Help (F4 Help) Improving the Performance of your BAPI _________ __________________________________________________________________ 30 . in other words. This is true for the BAPI itself and for any function module that may be indirectly called by the BAPI. for example. Use the object/method model when choosing parameters and combining them in structures. but use a different character set instead. These are: Mandatory Rules • A BAPI must not contain any dialogs. the BAPI must not return any R/3 screen dialogs to the calling application. even those that perform similar functions. It is not easy to formalize the functional scope of a BAPI.A Tutorial on Business Application Programming Interface_____________________________ Programming BAPIs Use This section describes how to program the BAPI you defined in the previous sections. If this is the case a problem may arise when you select quantities or ranges or when these are sorted. provide access to R/3 data and processes in a consistent way. you must follow certain rules when programming BAPIs. such as the frequently used BAPIs. Set and Get parameters and the global memory must not be used to transfer values. If required every BAPI must be able to carry out its own authorization checks. select the most important parameters and combine them in structures in a meaningful way. The differences are mainly due to the different characteristics and contents of SAP Business Objects. Because of this a BAPI should always select a range between A-Z. Prerequisites To ensure that BAPIs. as interfaces of SAP Business Objects.
As the Change BAPI can carry out changes to existing data. This can have the following values: 'X' This value means that the corresponding parameter field contains a modified value. if the parameter is called EquiSales. a Change BAPI must be able to identify fields that have been modified and fields that have stayed the same. for example. For instance. the name of the additional change parameter is EquiSalesX. • ' ' (no value) This means that the corresponding parameter field does not have to be updated. When the BAPI is called. one specific purchase order. • That way the BAPI can identify both modified and unmodified fields in the parameter. in the ABAP programming language or on other development platforms you cannot assign the value "null" to all data types in order to mark fields and thus indicate that the remaining fields contain update values.A Tutorial on Business Application Programming Interface_____________________________ Programming Change BAPIs Use The BAPI Change modifies an existing instance of a SAP Business Object. • An additional change parameter must be created with the same number of fields and the same field names for every parameter in the BAPI containing modified field values. You must use the data element BAPIUPDATE as the data element for the update fields. the fields in the additional change parameter whose counterparts in the corresponding parameter contain modifications. the additional change parameter must also be a table. Moreover. Flagging Fields to Identify Those Fields Containing Modified Values In this approach parameter fields containing modified values are identified by a suitable flag in an additional "change parameter". The additional change parameter must contain exactly the same number of fields and the same field names as the parameter. Using an initial value is no solution because an initial value could also represent a valid new value. Follow the conventions below when you create change parameters to identify modified fields: • The name of the additional change parameter consists of the parameter name with the suffix "X". Features Two different approaches can be used to identify fields containing values that have been modified in a Change BAPI: • • Flagging fields to identify those fields containing modified values Comparing fields to identify those fields containing modified values 1. • _________ __________________________________________________________________ 31 . If the parameter is a table. must be marked with an update flag.
This indicates that the field Distr_Chan of the parameter EquiSales contains a modified value. The additional compare parameter must contain exactly the same fields and the same structure as the parameter. if the parameter is called EquiSales. The fields of the corresponding parameter may contain modified values. Then. If data in any field is different then the field contains data that must be changed. 2. • _________ __________________________________________________________________ 32 . The BAPI Change then overwrites the existing value in the field Distr_Chan with the current value in the field Distr_Chan in the parameter EquiSales. For instance. This data could be. the name of the additional compare parameter is EquiSalesX.A Tutorial on Business Application Programming Interface_____________________________ Example A Change BAPI is used to change the value of the existing distribution channel (Distr_Chan) to Distr_Chan="US". • The data in the compare parameter can first be checked against the current database contents to ascertain whether it has changed in the meantime. The program objects in the R/3 System affected by this change are: Program Object SAP Business Object BAPI Parameter Fields in parameter EquiSales Name PieceOfEquipment Change EquiSales SalesOrg='abcd' Distr_Chan='US' Division='efgh' EquiSalesX SalesOrg=' ' Distr_Chan='X' Division=' ' Change parameter that identifies modified fields Fields in parameter EquiSalesX In the parameter EquiSalesX the value in the field Distr_Chan is 'X'. When the Change BAPI is called all relevant fields in the compare parameter must be filled with the data at the time the database is read. the data in the compare parameter can be compared field by field with the data in the corresponding parameter. for example. This way any database changes made between the time the data was read and the time the database is updated can be identified. • When you create compare parameters follow these conventions: • The name of the additional compare parameter consists of the parameter name with the suffix "X". Comparing Fields to Identify Those Fields Containing Modified Values In this approach parameter fields containing modified values are identified by comparing them with the fields in an additional "compare parameter": • • An additional compare parameter must be created with the same structure for each BAPI parameter containing update values. the result of a previous GetDetail BAPI call.
Approach 2: Better for dialog-orientated applications with critical data. that means. less demands are placed on caller.A Tutorial on Business Application Programming Interface_____________________________ Advantages of Both Approaches The advantages of each approach are shown in the table below: Area Performance Advantage Approach 1: Flag table can be compressed. Approach 1: Fields containing modifications can be flagged. Compare data does not have to be read. Programming Check facilities Comprehension Application _________ __________________________________________________________________ 33 . Approach 1: Better for performance critical applications. Approach 2: BAPI programming is simpler. Approach 2: Can carry out check against current database to identify and prevent inconsistencies.
You can do this by using a range table for the key fields of the business object. Only create the Parameter RETURN as an export parameter. If only parts of an object are to be cloned rather than the whole object. You should decide to implement one of these BAPIs. The BAPI's import parameters have to identify the business objects to be cloned. depending on what is most practical for the business object.A Tutorial on Business Application Programming Interface_____________________________ Programming Replicate/Clone BAPIs Use To replicate a business object you can implement Replicate/Clone BAPIs. Features Both of the above cloning methods can be implemented with the following BAPIs: • Replicate A client system uses the Replicate BAPI to request clones of business objects from a server system. _________ __________________________________________________________________ 34 . The interface of these BAPIs depends on the characteristics and contents of the business object that is to be cloned. The BAPI Replicate requests the replication of a business object. Moreover. At regular intervals system "B" replicates the business objects on all the systems in the list. Each Replicate BAPI must contain the parameter CloneReceivers which specifies the systems on which the business objects are to be replicated. Only create the Parameter RETURN as an export parameter. you can use other optional import parameters. to request all the materials belonging to a material group or to delimit the amount of data in the business object to be cloned (for example. You can also add other import parameters. depending on the specific requirements of your BAPI: • Clone The BAPI Clone is used by a system to replicate one business object on another system or to modify one business object that has already been cloned. The cloned business objects are created under the same object key. This method must be implemented for each business object to be cloned. • Using subscription lists ("Push") System "B" maintains a list of systems requiring clones. The objective of replication is to make specific instances of a business object available on one or more additional systems. The actual replication is carried out when the server system invokes one of the Clone BAPIs described below on the client system. Each Clone BAPI must contain the import parameter Sender which identifies the system that sends or owns the business object. For this reason these BAPIs must be implemented for each business object. All the data required for cloning an individual business object must be provided in the import parameters. material with or without plant data). Then system "B" replicates the requested business objects on system "A". at least one of the BAPIs below must be implemented for each business object to be cloned. for example. You can specify whether the replication is carried out immediately or at a later time and in a separate step. Business objects can be cloned in two ways: • By request ("Pull") System "A" requests clones from system "B".
Unlike the BAPI Clone. Only create the Parameter RETURN as an export parameter.A Tutorial on Business Application Programming Interface_____________________________ This BAPI should be used for more complex objects that will not be cloned in large numbers. If only parts of objects are to be cloned rather than whole objects. the BAPI CloneMultiple can clone or modify several instances of an object at the same time. you can use other optional import parameters. Although the BAPI CloneMultiple is more efficient than the BAPI Clone. This BAPI should be used for objects with small amounts of data. it does require a far more complex interface and error handling process. • CloneMultiple The BAPI CloneMultiple is used by a system to replicate several business objects on another system or to modify several business objects that have already been cloned. _________ __________________________________________________________________ 35 . Each CloneMultiple BAPI must contain the import parameter Sender which identifies the system that sends or owns the business objects. All the relevant data for cloning several business objects must be provided in the import parameters.
e. BAPI CustomerCode.g. Prerequisites To enable the use of selection criteria you have to create the relevant selection parameters of the BAPI as a structure or table with the following fields: Fields for Value Ranges Field Name SIGN OPTION LOW HIGH Description Selection operator that determines whether the range specified is to be included or excluded.g.A Tutorial on Business Application Programming Interface_____________________________ Programming Value Ranges Use The parameters in BAPIs that can be used to search for specific instances of a business object. _________ __________________________________________________________________ 36 . MATNR You can use the function module BALW_RANGES_CHECK to check the values entered in SIGN and OPTION. e.GetList. MATNR Application specific. Data element BAPISIGN Compare operator. have to enable BAPI users to specify appropriate selection criteria.g. CP (contains pattern) or BAPIOPTION NP (does not contain pattern) Lower limit of value range Upper limit of value range Application specific. e. for example.
for instance. a non-SAP system cannot reasonably be expected to understand these semantics. All R/3 currency data types have two digits after the decimal point. Accordingly. To meet the requirements of this diverse range of applications. YYYYMMDD. Examples are work breakdown structure plans or networks in project systems. For example. i. For these reasons. not application interfaces. Exceptions Because of the reasons above. BAPIs should only carry out data conversions between the data format used in the database and external formats used by the calling program in exceptional circumstances. you can use the transaction described in Converting Between Internal and External Data Formats. • Internal keys In some situations an internal technical key is maintained in the database alongside the external key. the data type CURR cannot be used in the BAPI interface. The function module BAPI_CURRENCY_CONV_TO_INTERNAL converts currency amounts from external data formats into internal data formats. so that the decimal point in the amounts can be set correctly. where YYYY is the year. • Quantity fields Like currency amount fields. a shared strategy for representing data in the BAPI interface must be used. _________ __________________________________________________________________ 37 . MM the month and DD the day. The function module BAPI_CURRENCY_CONV_TO_EXTERNAL converts currency amounts from R/3 internal data formats into external data formats. BAPIs are programming interfaces. In particular. the use of values that affect Customizing or are language dependent must be avoided. To convert data formats in these exceptional circumstances. even though currencies do exist with three digits after the decimal point. should not be used in the BAPI interface in any other format than the format used in the database.A Tutorial on Business Application Programming Interface_____________________________ Internal and External Data Formats Use BAPIs are programming interfaces used in the most diverse application areas. to connect non-SAP systems or PC products to the R/3 System. the decimal point in quantity fields must be converted correctly. A unit of measure field must be assigned to every quantity field.e. Quantity fields have no general domain that can be used for BAPI structures. if two Yen are stored in the field of data type CURR as 0. These exceptions are: • Currency amount fields In an R/3 System a currency amount field is only useful when a currency code accompanies it. These exceptions are listed below. Adhere to the following guidelines when using currency amount fields in BAPIs: You must not use parameters and fields of data type CURR in the interface All parameters and fields for currency amounts must use the domain BAPICURR The position of the decimal point in currency amount fields must be converted correctly You can use two function modules for this conversion. a field for the currency code must be assigned to each currency amount field.02. Fields such as a date field.
to display data on the screen. Use the naming convention. If this is not the case. However. for instance E. application programmers calling a BAPI from within their program may sometimes require the external format. only the internal data format should be used.DataConversionInt2Ext This BAPI converts the internal data format into the required external data format. BAPIs for Converting Between Internal and External Data Formats (Converting Domains) BAPIs are programming interfaces in which.A Tutorial on Business Application Programming Interface_____________________________ You must always use the external key in the BAPI interface. The corresponding field for the ISO code would then be named LANGU_ISO and would contain the corresponding ISO code EN. country. the field LANGU contains the country codes used internally in R/3. currency. Use the domains below for the ISO codes: Domains for SAP internal codes and ISO codes Size Currency key Unit of measure Language key Country key ISO Code Domain isocd isocd_unit laiso intca SAP Code Domain waers meins spras land1 For every domain there is a data element of the same name. Conversion routines are maintained in the ABAP Dictionary for the domains on which the data to be converted are based. BapiService. • ISO codes In R/3 Systems ISO codes are currently supported for language. The calling program uses them to obtain the required data formats: • • BapiService. no conversion takes place and the values are returned unconverted. _________ __________________________________________________________________ 38 .DataConversionExt2Int This BAPI converts the external data format into the required internal data format. Implement the BAPI as follows: When you export data from the BAPI both fields must contain corresponding values. In such cases the calling program must be able to convert between the internal and external data formats. with a few exceptions. For example. for example. Fieldname_for_SAPCode_ISO for the field containing the ISO code. If you use one or more of these fields in your BAPI you have to make two fields available for each of these fields in the BAPI interface: one field containing the SAP code and another containing its corresponding ISO code. and unit of measure fields. The following conversion BAPIs exist for this purpose. When you import data into the BAPI the ISO code is only significant if no value was given in the SAP code.
The parameter RETURN can either be implemented as an export parameter and thus as a structure.0 onwards From Release 4. Before filling the RETURN parameter you should either initialize the structure with CLEAR or the table with REFRESH and CLEAR.0 you must not use Exceptions in a BAPI interface. Current number of message in application log. whose components are described in the table below. Structure of BAPIRETURN Field TYPE Type CHAR 1 Description S = success message E = error message W = warning message I = information message A = termination message (Abort) The first two characters are used for the message class and the remaining ones for the message number (key fields from table T100). This message can then be processed by the calling program in a different program branch.A Tutorial on Business Application Programming Interface_____________________________ Reporting Errors Use A BAPI should be able to record and classify all possible errors that may occur. If the RETURN parameter is not set or is set to an initial value this means that an error has occurred.1 the Return parameter is based on the structure BAPIRETURN. Return parameter in Release 3. _________ __________________________________________________________________ 39 . All error messages or indeed any message that may be returned by the BAPI must be defined in table T100. This is empty if no log used. or as a table parameter. Caution From Release 4. Number of application log.0 the return parameter must be based on one of the two reference structures described below.1 In Release 3. A general error message has to be sent for those error situations that cannot sufficiently be identified and distinguished. This parameter returns exception messages or success messages to the calling program. Full message text from table T100. All variables have been replaced with text. CODE CHAR 5 MESSAGE LOG_NO LOG_MSG_NO CHAR 220 CHAR 20 NUMC 6 Return Parameter from Release 4. Features The structure of the parameter RETURN is dependent on the R/3 Release the BAPI is developed for. You have to create a parameter named RETURN for every BAPI. In this Release the Return parameter is filled by the function module BALW_BAPIRETURN_GET.
This is empty if no log is used Current number of message in application log ID NUMBER MESSAGE LOG_NO CHAR 20 NUMC 3 CHAR 220 CHAR 20 LOG_MSG_NO • NUMC 6 BAPIRET2 This reference structure contains the additional fields PARAMETER. This is empty if no log is used Current number of message in application log ID NUMBER MESSAGE LOG_NO CHAR 20 NUMC 3 CHAR 220 CHAR 20 LOG_MSG_NO NUMC 6 _________ __________________________________________________________________ 40 . It contains the following fields: Field TYPE Type CHAR 1 Description S = success message E = error message W = warning message I = information message A = termination message (abort) Message ID Message number Full message text from table T100. Only use this structure if you need the functionality of the additional fields to minimize the complexity of the parameter.0. use only the first two characters of the message ID. Both structures must be filled in the logon language. it can identify the field containing this value in the returned error message using the additional fields in the structure BAPIRET2. If a BAPI ascertains that an invalid value has been entered in a field. The two structures are: • BAPIRETURN1 This structure is filled via the function module BALW_BAPIRETURN_GET1. The structure BAPIRET2 is filled via the function module BALW_BAPIRETURN_GET2. if you want messages to be compatible with earlier R/3 Releases. However. ROW and FIELD in which error messages can be assigned to a specific field. All variables have been replaced with text Number of application log. All variables have been replaced with text Number of application log.A Tutorial on Business Application Programming Interface_____________________________ Both structures take into account the name space extension of the message ID made in Release 4. It contains the following fields: Field TYPE Type CHAR 1 Description S = success message E = error message W = warning message I = information message A = termination message (abort) Message ID Message number Full message text from table T100.
The Return parameter in your BAPI could give details of the messages in the error tables. you can log errors with the application log. There are no set guidelines for these additional tables. for example. The logging should be done by the BAPI itself so that function modules called directly by this BAPI do not have to be modified. The calling program then has immediate control over the contents of the error table and does not have to first search for error messages. the calling application can define its own additional error tables. _________ __________________________________________________________________ 41 . if there are error messages (type E) in the table. The use of the application log and/or error tables is optional.A Tutorial on Business Application Programming Interface_____________________________ PARAMETER ROW CHAR 32 INT 4 Identifies the parameter containing the invalid value Identifies the line number of the data record containing the invalid value Identifies the field containing the invalid value FIELD CHAR 30 Application Log and Application Error Tables If the information provided in the Return parameter is not sufficient. If this still does not provide enough information.
matchcodes or domain fixed values for that field in the field's reference structure. you must create or specify the appropriate check table. This is necessary because the HelpValues.GetList method is available in the documentation for the function module BAPI_HELPVALUES_GET. GetList. matchcodes and domain fixed values see the ABAP Dictionary. Authorization Check In some situations it will be necessary to only allow those persons with a particular user profile to access to information in F4 possible entries. This function module must have the following predefined interface: _________ __________________________________________________________________ 42 .GetList. Note Whenever possible. To do this you can carry out authorization checks within your BAPI: Table BAPIF4T is provided for this purpose. Information about the possible input values for a field should also be available to those users who are working with the data in the R/3 System from an external program. For example. This table comprises the following fields which you have to fill with the corresponding entries of your BAPI. which obtains the possible input values for a field that is passed in a BAPI call. the user of a Visual Basic program which incorporates a BAPI to display or modify data in R/3 should have transparent access to the functionality of the F4 input help.A Tutorial on Business Application Programming Interface_____________________________ Providing Input Help (F4 Help) Use Users of an R/3 System can use the F4 key to obtain information about the possible input values for a certain field on the screen. for example. Detailed information about the structure and use of the HelpValues. This method is based on the RFC-capable function module BAPI_HELPVALUES_GET. • • • OBJTYPE (object type) The technical name of the SAP Business Object. For information about check tables. DTEL (data element) The name of a data element for which a possible entry is specified. a calling program can use the method HelpValues. matchcodes or domain fixed values in the reference structure of a field in order to enable a calling program to access the valid input values for the field. BUS1065.GetList method to obtain the valid input values for a field in your BAPI and return them to the calling program.GetList method refers to the help view for the check table. In order to provide input help for a field. via BAPI calls. an elementary input help could be specified for the data element PERNR_D and be protected from unauthorized access. Features In order to enable the HelpValues. METHOD (verb) The name of a BAPI for the Business Object named above. • FNAM (name of function module) The name of the function module you have to create and that carries out the authorization check for the data element. you should therefore specify the appropriate check table. for example. For example. matchcodes or domain fixed values linked to the field in the ABAP Dictionary.
METHOD.. An authorization check can be carried out at Business Object. be filled. ' ' (no value) if the user of the BAPI is authorized to display the input values for a field.GetList.. Business Object BAPI Data element OBJTYPE. FNAM OBJTYPE. The return code of the parameter RETURN is: 'X' if the user of the BAPI is not authorized to call up the valid input values for a field... METHOD.A Tutorial on Business Application Programming Interface_____________________________ *"------------------------------------------------------*"*"Local interface: *" IMPORTING *" VALUE(OBJTYPE) LIKE BAPIF4F-OBJTYPE *" VALUE(METHOD) LIKE BAPIF4F-METHOD *" VALUE(DTEL) LIKE BAPIF4F-DTEL *" VALUE(SHLPNAME) LIKE BAPIF4F-SHLPNAME *" VALUE(TABNAME) LIKE BAPIF4F-TABNAME *" EXPORTING *" VALUE(RETURN) LIKE BAPIF4F-RETURN *"--------------------------------------------------------- As the template for your function module you can use the function module BF_BAPI_F4_AUTHORITY which provides exactly this interface. FNAM _________ __________________________________________________________________ 43 . method or data element level: To carry out authorization check at this . Copy this function module and follow the documentation provided with it. During runtime the function module is called dynamically by the BAPI HelpValues.the following fields in table BAPIF4T must level. DTEL. The parameter TABNAME contains the name of the value table. FNAM OBJTYPE. The additional parameter SHLPNAME contained in the function module interface provides the name of the active input help for the table or for the data element.
Do not define parallel processes. the entire data is transferred to the client system from the application server. In contrast. Only the data that is actually displayed is sent to the front end. you should adhere to the general guidelines of ABAP programming. resulting in a heavy network load and increased memory requirements on the part of the client system. for example a list containing many entries. such as: • • • • • • Use only complete WHERE conditions to minimize the amount of data to be transferred. Minimize the duration of database locks by making updates after inserts. Do not generate programs at runtime. if possible. for example in the local memory of the function module. or your BAPI could return a message to the calling programm indicating that the amount of data has exceeded a certain limit and that a new selection should be made. and in programs developed on external development platforms such as Visual Basic. Make use of buffers when assigning numbers to reduce lock periods. you should follow these additional guidelines when programming BAPIs: • Large amounts of data Mass data is treated differently in ABAP programs. causing the record to be locked. • • • • • • • • _________ __________________________________________________________________ 44 . the majority of the data remains on the application server. lock only parts of a development object. All tables that are not protected by SAP internal locks must always be updated in the same order to prevent a deadlock. Minimize the use of read transactions which depend on a previous database commit (committed read). If large amounts of data are read in the R/3 System. the more likely it is that the data record will be accessed by multiple BAPIs. Note that you must not buffer data in the global memory. on a Visual Basic platform. You need to cover the situation when your BAPI has to read mass data. inserts do not lock the database. These read transactions have to wait for the commit work command of the update transaction to be processed. Ensure that you have chosen the correct order of the update modules. Buffer data. you could specify a limit so that only the first n data records are read. which use the SAPgui (graphical user interface) as a front end. For example.A Tutorial on Business Application Programming Interface_____________________________ Improving the Performance of your BAPI Use In order to improve the performance of your BAPI. In contrast to updates. Additional guidelines for BAPI programming The function module on which a BAPI is based can be accessed by external programs via RFC. Avoid unnecessary database access. whereas a statistic based on plant and material will cause fewer locks because it will apply to fewer BAPIs. The less specific the key of a modified data record is. For this reason. Do make use of arrays. running a statistic on plant level will have a negative impact on the performance of the BAPI. For example. Try not to lock entire development objects. You can reduce the duration of database locks and the risk of blocking other processes by making database updates as close as possible to the commit work command.
Incompatible interface enhancements are: • • • Changes to the field length Changes to the field type Inserting a field within a structure _________ __________________________________________________________________ 45 . The BOR also provides version control for your BAPIs. Compatible interface enhancements are: • New optional parameters A parameter is considered to be optional if it can be left out completely in a BAPI call. changes have been saved and generated. you need to ensure that any syntax changes or changes to the contents or functionality of the BAPI are upward and downward compatible. that is. it must fulfill certain requirements as to the stability of its interface. or changes to the type or length of a domain. if these are added to the end of a structure A field is considered to be optional if it can be left out completely in a BAPI call. Examples of syntax changes are changes to parameter names. Whereas the compatibility of syntax changes is automatically checked by the ABAP Dictionary. Example A new parameter is added to the BAPI SalesOrder. Applications which access the BAPI are not affected by compatible interface enhancements. these changes also cause existing parameters to lose their original meaning. You can differentiate between compatible and incompatible BAPI enhancements: Compatible Interface Enhancements Compatible interface enhancements are modifications to a BAPI which do not compromise the BAPI's upward or downward compatibility. Note Enhancements to BAPIs only take effect when you have defined the changes in the BOR. If you continue developing your BAPI after you have released and frozen it. Such modifications are considered to be incompatible. Often.CreateFromData. Incompatible Interface Enhancements Changes to the contents or functionality of a BAPI often result in the introduction of new parameters without which the interface can no longer function. Example An additional input field for the applicant's educational background is added to the BAPI Applicant. once a BAPI is released and frozen. As a result of this.GetList which can be used as an additional selection criteria for selecting sales orders in the R/3 System. • New optional fields. because they no longer enable the BAPI to be upward or downward compatible. the compatibility of changes to the contents or functional scope of a BAPI can only be safeguarded by the person developing the BAPI.A Tutorial on Business Application Programming Interface_____________________________ Enhancements to Existing BAPIs Purpose Application developers who are using BAPIs in their application programs must be able to rely on the fact that the BAPI's interface is not going to change.
a new BAPI. SalesOrder. in order to maintain the interface integrity of the existing BAPI SalesOrder.CreateFromData1. as described in this section. This number can then be incremented should further enhancements become necessary.A Tutorial on Business Application Programming Interface_____________________________ • • Deleting parameters and fields Adding new mandatory fields or mandatory parameters Process Flow When continuing the development of your BAPI. BAPI Expiry Phase The following tasks are required when a BAPI has expired: • Identify the status of the original BAPI as 'expired' in the BOR. is created. you first identify this BAPI as expired and continue its support in the release in which you have introduced the new BAPI as well as in the release subsequent to that. create an additional BAPI (or more. the new parameter can be added as a compatible interface enhancement. When adding a new import parameter. you should attempt to make compatible changes in order to limit the impact of your modifications on existing programs which use the BAPI. To implement these changes. Example A number of incompatible changes must be made to the BAPI SalesOrder. _________ __________________________________________________________________ 46 . Do not remove the original BAPI from the Business Object Repository (BOR) once it has been superseded by an additional BAPI. Procedure With Incompatible Interface Changes If it is necessary to make an incompatible change to your BAPI. During this time the original BAPI must remain fully functional and executable. you must not make this change to the existing BAPI.CreateFromData. Provide release notes during the entire retirement phase of the BAPI to inform your users about the changes. must be created. Position the cursor on the BAPI and select Edit → Change status to → Expired.CreateFromData2. yet another BAPI. Instead. If additional incompatible modifications must be made to the BAPI at a later date. • • In the BOR. if required). document which method or methods are to be used as alternatives to the expiring BAPI.CreateFromData. If so. select the relevant SAP Business Object in the Business Object Builder and open the node Methods. Instead. Otherwise you will have to make an incompatible interface enhancement. SalesOrder. Give the new BAPI the same name as the existing BAPI and add a number at the end of the name. To do so. The graphic below illustrates the expiry phase of a BAPI. consider whether the interface would function without the parameter.
domains or structures that are being used by a BAPI that has been released are rejected by the ABAP Dictionary. Compatible changes or changes to data elements. domains or structures of a BAPI that has not been released are accepted by the ABAP Dictionary. _________ __________________________________________________________________ 47 . This prevents unintentional and erroneous modifications to BAPI structures.A Tutorial on Business Application Programming Interface_____________________________ Checks in the ABAP Dictionary Syntax changes to a BAPI are automatically checked against the ABAP Dictionary: • • Incompatible changes to data elements.
Keep in mind that an improved mechanism for making customer modifications of the SAP Standard System will be introduced in a later R/3 Release. as described in Defining Methods in the BOR Using the BOR/BAPI Wizard Make sure you give the method a name taken from the customer name space. You can also modify the BAPI source code but do follow the "Guidelines for Modifying the SAP Standard System". you should define your development as the method YGetList. Refer to Enhancements to the SAP Standard. Modifications You can modify an existing BAPI interface provided that only new optional parameters are involved. To do this: • Copy the function module the BAPI is based on into the customer name space. if you have modified the BAPI GetList of the Business Object CustomerCode. For this reason SAP recommends that. This section focuses specifically on customer enhancements and modifications of BAPIs rather than on customer enhancements in general. Changes can be made. For example. you could copy the function module BAPI_CUSTOMERCODE_GETLIST into Y_BAPI_CUSTOMERCODE_GETLIST. Customizing There are no special Customizing settings for BAPIs. See also Enhancements to Existing BAPIs. When you have changed and tested the function module and its interface you can define it as a new method of the appropriate business object. The following sections describe how BAPIs can be adapted within the framework of each of these four ways. enhancements. Process Flow There are four ways the standard R/3 System can be adapted to meet customer needs: Customizing. Before you decide to modify an SAP BAPI familiarize yourself with the general procedure for making customer enhancements to the SAP standard system. This way all methods of the object are _________ __________________________________________________________________ 48 • • . New fields can be added at the end of a BAPI interface structure. For further information see also "Guidelines for Modifying the SAP Standard System" in SAPnet. Enhancements At present there are no customer exits or application-specific exits for BAPIs. however. for the time being you use one of the procedures described below to make modifications to a BAPI's source code so as not to change the SAP Standard System in the process: Creating a BAPI for an existing Business Object You can copy an existing BAPI and add it to an existing Business Object as a new BAPI.A Tutorial on Business Application Programming Interface_____________________________ Customer Modifications of BAPIs Purpose You can make enhancements or modifications to existing BAPIs. in the ABAP Dictionary. For example. Make the required changes to the new function module by changing the interface and the source code as required. Creating a BAPI for a new Business Object You can create a subtype for an existing object type. modifications and customers' own developments. See also Enhancements to Existing BAPIs.
Follow the "Guidelines for Modifying the SAP Standard System" when creating other required development objects. To do this: • Copy an existing Business Object type into the customer name space. _________ __________________________________________________________________ 49 . this means the names must begin with X or Y. make sure that you have given your method in the BOR and the function module a name from the customer name space. This object type (subtype) acquires all methods of the existing object type. you could copy the Business Object SalesOrder into YSalesOrder.A Tutorial on Business Application Programming Interface_____________________________ inherited by the subtype. • Your Own Developments Using the information in these guidelines you can also create new methods for Business Objects. You can then make changes to the copied method. You can now change the required BAPI of the Business Object YSalesOrder by creating a new function module for the BAPI and assigning it to the method using the BOR/BAPIWizard. If you do. For example.
the associated IDoc and the two function modules. Loose coupling A synchronous interface would constitute too narrow a coupling between the client and the server system. If one of the following conditions applies then you should implement your BAPI as an asynchronous interface: • • Consistent database changes in both systems Data must be updated consistently on both the local system and on the remote system. Process Flow When a BAPI is used to exchange data asynchronously within the context of ALE the following processes are involved: • • • When the BAPI is called in the sending system. If the connection is interrupted the client system would not be able to function properly. • Performance The interface is frequently used or it deals with large volumes of data. a function module fills the corresponding IDoc with the data from the BAPI call. Loose coupling means that the individual systems for the most part communicate asynchronously with each other. From Release 4. Prerequisites Before you can implement a BAPI used to transfer data asynchronously in ALE. or a communications link is interrupted. Even if one of the systems fails. that is. the remaining systems must be able to continue to function. This IDoc is dispatched to the target system. For these reasons asynchronous messaging is used for data communication between the participating systems in ALE distribution scenarios.0 you can implement an asynchronous BAPI interface by generating an IDoc from the BAPI and using it in an appropriate ALE distribution scenario. In the target system another function module is used to call the BAPI with the data from the IDoc. In distributed environments it is particularly important that the individual systems are loosely coupled together and are independent of each other. For further information on ALE technology and using BAPIs in the context of ALE see ALE Programming. Additional Guidelines If you are sure you want to implement your BAPI as an asynchronous interface you should _________ __________________________________________________________________ 50 . This transaction is described in detail in ALE Programming.0 ALE (Application Link Enabling) technology has enabled data to be exchanged between individual distributed SAP Systems and non-SAP systems. This section provides a general overview of points you should keep in mind when implementing a BAPI to exchange data asynchronously. You can use a transaction to create the additional objects required for the BAPI in this process. In this situation a synchronous interface cannot be used because performance would be too low.A Tutorial on Business Application Programming Interface_____________________________ Implementing BAPIs in ALE Scenarios Purpose Since Release 3. make sure that a BAPI of this type is actually required for the task in hand.
If the field type is filled with E (error) or A (abort) in at least one of the transferred Return parameter entries. _________ __________________________________________________________________ 51 . Otherwise status 53 is assigned (application document posted). All BAPI export parameters with the exception of the Return parameter are ignored and are not included in the IDoc that is generated. After the function module which converts the IDoc into the corresponding BAPI in the receiving system has been called. status records are written for the IDoc in which messages sent in the Return parameter are logged.A Tutorial on Business Application Programming Interface_____________________________ keep in mind the following points in addition to the usual BAPI programming guidelines: • • • • The BAPI must not issue a Commit Work command. The BAPI Return parameter must use the reference structure BAPIRETURN1 or BAPIRET2. the status 51 (application document has not been posted) is assigned to all the status records of the IDoc.
BAPI Implementation Checklist OK? Task Defining the scenario in which the BAPI will be used Have you defined the scenario in which the BAPI is to be used? Have you identified the SAP Business Object involved? Have you defined the functional scope of the BAPI? Have you defined the relationship between the BAPI you are planning to implement and other.A Tutorial on Business Application Programming Interface_____________________________ 1 23 BAPI Implementation Checklist This checklist summarizes the individual steps you need to complete when implementing a BAPI. related BAPIs? Is the functionality to be implemented by the BAPI exclusively within the scope of the associated Business Object? Is the BAPI assigned to the appropriate SAP Business Object? Has there been a review of the BAPI concept and scenario? Defining the BAPI Have you identified the SAP Business Object in the Business Object Repository to which the BAPI will be added as a method? Have you identified the key fields of this Business Object? Have you defined the interface of the BAPI? Have you included the key fields of the SAP Business Object in the BAPI interface? Have you included a Return parameter? Have you identified the name of the function group or have you planned a _________ __________________________________________________________________ 52 . Print this checklist and use the printout during the entire implementation phase of your BAPI. Ensure that you answer "yes" to each item on the list.
using the format BAPI_<Business Object name>_<method name>? Defining the interface parameters in the function module Have you defined the function module interface using only EXPORTING. IMPORTING and TABLES parameters? Have you included the key fields of the SAP Business Object as parameters of the function module (i. did you ensure that none of the parameters is derived from another? Have you defined the formats in which the values must be transferred in the function module interface? Are you using the Dictionary structure BAPIRETURN1 or BAPIRET2 for the Return parameter (as of Release 4.e.0)? Defining the structures and fields of the function module parameters _________ __________________________________________________________________ 53 . depending on whether the BAPI is instancedependent or instance-independent)? Have you assigned correct names to the parameters in the function module? Do the function module parameters for the Business Object's key fields have the same name as the key fields of the Business Object in the BOR? Is the name of each parameter in the function module a maximum of 20 characters in length? Are the names of the parameters in the function module in English? Have you avoided the use of abbreviations in the names of function module parameters? Did you ensure that none of the parameters in the function module is customizing-relevant or affects system settings in any other way? Is the interface independent of the current customizing settings of the system? Are all IMPORTING parameters independent from each other. i.A Tutorial on Business Application Programming Interface_____________________________ name for a new function group to be created? Have you planned the name of the function module on which the BAPI is based.e.
LOW and HIGH for the corresponding BAPI parameter that selects values (for example. OPTION.A Tutorial on Business Application Programming Interface_____________________________ Have you assigned a corresponding currency code field to each field with currency amounts? Have you assigned a field for the unit of measure to each quantity field? Have you defined Dictionary structures for each function module parameter? Do the names of the Dictionary structures start with BAPI? Are these structures independent of the structures used in the R/3 application? Have you defined the fields in the Dictionary structures? Have you defined Help views or fixed values for the fields in order to enable your BAPI to provide input help (F4 help) for each field? Are the field names a maximum of 10 characters in length? Have you used English names for the fields. Material.GetList)? Defining the BAPI in the Business Object Repository Have you planned the name of the method in the BOR? Have you defined the names of the parameters in the BOR? Are the names of the parameters a maximum of 20 characters in length? Did you choose English names for the parameters? Are the names of the parameters of the method in the BOR and the names of the parameters in the function module the same? _________ __________________________________________________________________ 54 . or by using a GetDetail BAPI? Have you used a structure with the fields SIGN. preferably those names that have been assigned to the corresponding data elements in the ABAP Dictionary? Can the user of your BAPI access the values for each import field either by referring to the documentation. by obtaining input help (F4 help).
if required? Did you create the function module? Did you create the documentation for the BAPI in the Function Builder? Did you use the program to map between internal and external data formats? Did you write the program for your function module? Did you use the BOR/BAPI wizard to define the BAPI as a method in the BOR? Are the parameter names and types of the method in the BOR and of the function module in the Function Builder the same? Documentation Did you write appropriate documentation for the BAPI in the Function Builder? Is the documentation complete? Has the documentation been translated into the required languages? Testing the BAPI Did you test the function module using the test environment of the Function Builder? Did you test the BAPI using the test environment of the Business Object Builder? Did you test the BAPI by calling the method via the BAPI ActiveX Control? _________ __________________________________________________________________ 55 .A Tutorial on Business Application Programming Interface_____________________________ Did you ensure that there are no underscores in the parameter names? Did you start each new word in a method name with a capital letter? Creating the objects in the R/3 System Did you create the required Dictionary objects? Did you create the function group.
A Tutorial on Business Application Programming Interface_____________________________ Did you test the BAPI by making an RFC call to the underlying function module? Did you test the documentation for its completeness. correctness and availability in the required logon languages? Has the BAPI been released and frozen? _________ __________________________________________________________________ 56 .
This action might not be possible to undo. Are you sure you want to continue?
We've moved you to where you read on your other device.
Get the full title to continue reading from where you left off, or restart the preview.