1、1)事务码BAPI:BAPI Explore2)双击Function module,可以浏览实现BAPI的功能模块。3)在该界面,可以浏览该BAPI的IMPORT、EXPORT、TABLE参数,以及功能模块的相关文档。4)事务码:bwo2:Business Object Browser5)选中业务对象Salesorder,可以以面向对象的方式进行浏览。(注:其中只有蓝色的方法是有BAPI实现的,红色的方法不提供BAPI实现)6)BAPI测试工具,(点下图中注释的界面)7)该界面可以输入测试数据,测试相关的BAPI。1.3 BAPI使用方法在ABAP中调用BAPI的方法与调用Function M
2、odule的方法相同。只是要注意BAPI函数没有Exception,调用是否成功是通过参数return返回的。该return参数在不同的BAPI中结构不同,可能是structure,也可能是table,编程时要注意。下面的程序是ABAP中调用BAPI_SALESORDER_CREATEFROMDAT2的例子。注意:1 创建时,订单类性等参数必须使用德语代码2 必须调用BAPI_TRANSACTION_COMMIT完成整个事务。3 某些数据必须用辅助结构(负责确定所要更新的数据位)完成数据更新。(如ORDER_ITEMS_IN和ORDER_ITEMS_INX)* Order header:* -
3、 Order type: OR Important you must use the german code TA* - Sales org: 1000* - Distrb. chan.: 10* - Division: 00* - Sold to party: 1032* - Ship to party:* - Purch order: DG-19970626-3* Order item:* - Material: P-100* - Qty: 1DATA:* Order partners LI_ORDER_PARTNERS TYPE STANDARD TABLE OF BAPIPARNR,
4、L_ORDER_PARTNERS LIKE BAPIPARNR,* Structures for order header L_ORDER_HEADER_IN LIKE BAPISDHD1, L_ORDER_HEADER_INX LIKE BAPISDHD1X,* Tables for order items LI_ORDER_ITEMS_IN TYPE STANDARD TABLE OF BAPISDITM, L_ORDER_ITEMS_IN LIKE BAPISDITM, LI_ORDER_ITEMS_INX TYPE STANDARD TABLE OF BAPISDITMX, L_ORD
5、ER_ITEMS_INX LIKE BAPISDITMX,* Return table from bapi call LI_RETURN TYPE STANDARD TABLE OF BAPIRET2, L_RETURN TYPE BAPIRET2,* Sales document number L_VBELN LIKE BAPIVBELN-VBELN,* Error flag L_ERRFLAG(1) TYPE C.START-OF-SELECTION.*-* Build partner information CLEAR L_ORDER_PARTNERS. L_ORDER_PARTNERS
6、-PARTN_ROLE = AG. Remember German codes ! L_ORDER_PARTNERS-PARTN_NUMB = 0000001000. APPEND L_ORDER_PARTNERS TO LI_ORDER_PARTNERS.* Build order header* Update flag L_ORDER_HEADER_INX-UPDATEFLAG = I* Sales document type L_ORDER_HEADER_IN-DOC_TYPE = TA L_ORDER_HEADER_INX-DOC_TYPE = X* Sales organizatio
7、n L_ORDER_HEADER_IN-SALES_ORG = 1000 L_ORDER_HEADER_INX-SALES_ORG = * Distribution channel L_ORDER_HEADER_IN-DISTR_CHAN = 10 L_ORDER_HEADER_INX-DISTR_CHAN = * Division L_ORDER_HEADER_IN-DIVISION = 00 L_ORDER_HEADER_INX-DIVISION = * Purchase order L_ORDER_HEADER_IN-PURCH_NO_C = DG-19970626-300-FLC L_
8、ORDER_HEADER_INX-PURCH_NO_C = * Build order item(s) - Only 1 is used in this example* L_ORDER_ITEMS_IN-ITM_NUMBER = 000010 L_ORDER_ITEMS_INX-ITM_NUMBER = L_ORDER_ITEMS_IN-MATERIAL = P-100 L_ORDER_ITEMS_INX-MATERIAL = L_ORDER_ITEMS_IN-TARGET_QTY = 3.000 L_ORDER_ITEMS_INX-TARGET_QTY = L_ORDER_ITEMS_IN
9、-COMP_QUANT = 3 . L_ORDER_ITEMS_INX-COMP_QUANT = APPEND L_ORDER_ITEMS_IN TO LI_ORDER_ITEMS_IN. L_ORDER_ITEMS_INX-UPDATEFLAG = APPEND L_ORDER_ITEMS_INX TO LI_ORDER_ITEMS_INX.* CALL Bapi CALL FUNCTION BAPI_SALESORDER_CREATEFROMDAT2 EXPORTING ORDER_HEADER_IN = L_ORDER_HEADER_IN ORDER_HEADER_INX = L_ORD
10、ER_HEADER_INX IMPORTING SALESDOCUMENT = L_VBELN TABLES RETURN = LI_RETURN ORDER_ITEMS_IN = LI_ORDER_ITEMS_IN ORDER_ITEMS_INX = LI_ORDER_ITEMS_INX ORDER_PARTNERS = LI_ORDER_PARTNERS.END-OF-SELECTION.* Check and write Return table CLEAR L_ERRFLAG. WRITE: / Sales dcoument: , L_VBELN. LOOP AT LI_RETURN
11、INTO L_RETURN. / L_RETURN-TYPE, L_RETURN-MESSAGE(50). IF L_RETURN-TYPE = E L_ERRFLAG = ENDIF. ENDLOOP.* No errors - CommitCLEAR L_RETURN. IF L_ERRFLAG IS INITIAL.BAPI_TRANSACTION_COMMIT RETURN = L_RETURN . WRITE : / L_RETURN-TYPE , L_RETURN-MESSAGE .2. JCO的使用 JCO简介JCO是Java Connector的简称,它封装了JAVA-enab
12、led RFC,实现了基于RFC的BAPI与JAVA接口。它提供结构化的BAPI调用,目前不支持面向对象的开发。 JCO使用1) 类导入import com.sap.mw.jco.*;2) 建立R3连接,有两种方法:a持久连接/申明连接JCO.Client mConnection;/ 初始化连接mConnection =JCO.createClient(001, / SAP client, / userid*, / passwordEN, / language (null for the default language)hostname, / application server host
13、name00); / system number/建立连接try mConnection.connect();catch (Exception ex) ex.printStackTrace();System.exit(1);/关闭连接mConnection.disconnect();b连接池方式static final String POOL_NAME = Pool;JCO.Pool pool = JCO.getClientPoolManager().getPool(POOL_NAME);if (pool = null) OrderedProperties logonProperties =O
14、rderedProperties.load(/logon.propertiesJCO.addClientPool(POOL_NAME, / pool name5, / maximum number of connectionslogonProperties); / propertiesmConnection = JCO.getClient(POOL_NAME);System.out.println(mConnection.getAttributes();。finally JCO.releaseClient(mConnection);3)获得BAPI方法JCO.Repository mRepos
15、itory;mRepository = new JCO.Repository(ARAsoft, mConnection);IFunctionTemplate ft =trymRepository.getFunctionTemplate(“BAPI_SALESORDER_GETSTATUS”);throw new Exception(Problem retrieving JCO.Function object. / Create a function from the template jcoFunction = new JCO.Function(ft);4)设定输入参数 JCO.Field S
16、alesDocumentField = jcoFunction.getImportParameterList().getField(SALESDOCUMENT SalesDocumentField.setValue(iSalesDocument);5)执行BAPImConnection.execute(jcoFunction);6)处理“return”参数JCO.Structure jcoBapiReturn = jcoFunction.getExportParameterList().getStructure(RETURN if (jcoBapiReturn.getField(TYPE).g
17、etValue().toString().equals(E) throw new Exception();7) 获得返回值JCO.Table jcoStatusInfo = jcoFunction.getTableParameterList().getTable(STATUSINFO8)最后是异常的捕获与处理 JCO开发建议基于JAVA语言的特征,建议以如下的方式开发JCO应用。1) 主要的类:输入参数封装到java bean类中,并统一进行有效性检查。针对所要调用的BAPI建立代理类,将BAPI的业务功能封装起来。建立一个解释类,负责调用业务功能类,并将参数从java beans传递到业务功能类。2) 流程:
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2