BAPI与JCO的使用Word文档格式.docx
《BAPI与JCO的使用Word文档格式.docx》由会员分享,可在线阅读,更多相关《BAPI与JCO的使用Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
![BAPI与JCO的使用Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-2/2/20100f6e-0240-4beb-b609-b4cf7b61d67f/20100f6e-0240-4beb-b609-b4cf7b61d67f1.gif)
4用户可以自行开发新的BAPI以满足业务需求。
1.2BAPI相关界面
1)事务码BAPI:
BAPIExplore
2)双击Functionmodule,可以浏览实现BAPI的功能模块。
3)在该界面,可以浏览该BAPI的IMPORT、EXPORT、TABLE参数,以及功能模块的相关文档。
4)事务码:
swo2:
BusinessObjectBrowser
5)选中业务对象Salesorder,可以以面向对象的方式进行浏览。
(注:
其中只有蓝色的方法是有BAPI实现的,红色的方法不提供BAPI实现)
6)BAPI测试工具,(点下图中注释的界面)
7)该界面可以输入测试数据,测试相关的BAPI。
1.3BAPI使用方法
在ABAP中调用BAPI的方法与调用FunctionModule的方法相同。
只是要注意BAPI函数没有Exception,调用是否成功是通过参数return返回的。
该return参数在不同的BAPI中结构不同,可能是structure,也可能是table,编程时要注意。
下面的程序是ABAP中调用BAPI_SALESORDER_CREATEFROMDAT2的例子。
注意:
1.创建时,订单类性等参数必须使用德语代码
2.必须调用BAPI_TRANSACTION_COMMIT完成整个事务。
3.某些数据必须用辅助结构(负责确定所要更新的数据位)完成数据更新。
(如ORDER_ITEMS_IN和ORDER_ITEMS_INX)
************************************************************************
*Orderheader:
*-Ordertype:
ORImportantyoumustusethegermancodeTA
*-Salesorg:
1000
*-Distrb.chan.:
10
*-Division:
00
*-Soldtoparty:
1032
*-Shiptoparty:
*-Purchorder:
DG-19970626-3
*Orderitem:
*-Material:
P-100
*-Qty:
1
DATA:
*Orderpartners
LI_ORDER_PARTNERSTYPESTANDARDTABLEOFBAPIPARNR,
L_ORDER_PARTNERSLIKEBAPIPARNR,
*Structuresfororderheader
L_ORDER_HEADER_INLIKEBAPISDHD1,
L_ORDER_HEADER_INXLIKEBAPISDHD1X,
*Tablesfororderitems
LI_ORDER_ITEMS_INTYPESTANDARDTABLEOFBAPISDITM,
L_ORDER_ITEMS_INLIKEBAPISDITM,
LI_ORDER_ITEMS_INXTYPESTANDARDTABLEOFBAPISDITMX,
L_ORDER_ITEMS_INXLIKEBAPISDITMX,
*Returntablefrombapicall
LI_RETURNTYPESTANDARDTABLEOFBAPIRET2,
L_RETURNTYPEBAPIRET2,
*Salesdocumentnumber
L_VBELNLIKEBAPIVBELN-VBELN,
*Errorflag
L_ERRFLAG
(1)TYPEC.
START-OF-SELECTION.
*------------------------------------------------------------------
*Buildpartnerinformation
CLEARL_ORDER_PARTNERS.
L_ORDER_PARTNERS-PARTN_ROLE='
AG'
."
RememberGermancodes!
L_ORDER_PARTNERS-PARTN_NUMB='
0000001000'
.
APPENDL_ORDER_PARTNERSTOLI_ORDER_PARTNERS.
*Buildorderheader
*Updateflag
L_ORDER_HEADER_INX-UPDATEFLAG='
I'
*Salesdocumenttype
L_ORDER_HEADER_IN-DOC_TYPE='
TA'
L_ORDER_HEADER_INX-DOC_TYPE='
X'
*Salesorganization
L_ORDER_HEADER_IN-SALES_ORG='
1000'
L_ORDER_HEADER_INX-SALES_ORG='
*Distributionchannel
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='
*Purchaseorder
L_ORDER_HEADER_IN-PURCH_NO_C='
DG-19970626-300-FLC'
L_ORDER_HEADER_INX-PURCH_NO_C='
*Buildorderitem(s)-Only1isusedinthisexample
*
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-COMP_QUANT=3.
L_ORDER_ITEMS_INX-COMP_QUANT='
APPENDL_ORDER_ITEMS_INTOLI_ORDER_ITEMS_IN.
L_ORDER_ITEMS_INX-UPDATEFLAG='
APPENDL_ORDER_ITEMS_INXTOLI_ORDER_ITEMS_INX.
*CALLBapi
CALLFUNCTION'
BAPI_SALESORDER_CREATEFROMDAT2'
EXPORTING
ORDER_HEADER_IN=L_ORDER_HEADER_IN
ORDER_HEADER_INX=L_ORDER_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.
*CheckandwriteReturntable
CLEARL_ERRFLAG.
WRITE:
/'
Salesdcoument:
'
L_VBELN.
LOOPATLI_RETURNINTOL_RETURN.
/L_RETURN-TYPE,L_RETURN-MESSAGE(50).
IFL_RETURN-TYPE='
E'
L_ERRFLAG='
ENDIF.
ENDLOOP.
*Noerrors-Commit
CLEARL_RETURN.
IFL_ERRFLAGISINITIAL.
BAPI_TRANSACTION_COMMIT'
RETURN=L_RETURN
.
WRITE:
/L_RETURN-TYPE,L_RETURN-MESSAGE.
2.JCO的使用
JCO简介
JCO是JavaConnector的简称,它封装了JAVA-enabledRFC,实现了基于RFC的BAPI与JAVA接口。
它提供结构化的BAPI调用,目前不支持面向对象的开发。
JCO使用
1)类导入
importcom.sap.mw.jco.*;
2)建立R3连接,有两种方法:
a.持久连接
//申明连接
JCO.ClientmConnection;
//初始化连接
mConnection=
JCO.createClient("
001"
//SAPclient
"
<
userid>
//userid
****"
//password
EN"
//language(nullforthedefaultlanguage)
hostname>
//applicationserverhostname
00"
);
//systemnumber
//建立连接
try{
mConnection.connect();
}
catch(Exceptionex){
ex.printStackTrace();
System.exit
(1);
//关闭连接
mConnection.disconnect();
b.连接池方式
staticfinalStringPOOL_NAME="
Pool"
;
JCO.Poolpool=JCO.getClientPoolManager().getPool(POOL_NAME);
if(pool==null){
OrderedPropertieslogonProperties=
OrderedProperties.load("
/logon.properties"
JCO.addClientPool(POOL_NAME,//poolname
5,//maximumnumberofconnections
logonProperties);
//properties
mConnection=JCO.getClient(POOL_NAME);
System.out.println(mConnection.getAttributes());
。
finally{
JCO.releaseClient(mConnection);
3)获得BAPI方法
JCO.RepositorymRepository;
mRepository=newJCO.Repository("
ARAsoft"
mConnection);
IFunctionTemplateft=
try{
mRepository.getFunctionTemplate(“BAPI_SALESORDER_GETSTATUS”);
thrownewException("
ProblemretrievingJCO.Functionobject."
//Createafunctionfromthetemplate
jcoFunction=newJCO.Function(ft);
4)设定输入参数
JCO.FieldSalesDocumentField=jcoFunction.getImportParameterList().getField("
SALESDOCUMENT"
SalesDocumentField.setValue(iSalesDocument);
5)执行BAPI
mConnection.execute(jcoFunction);
6)处理“return”参数
JCO.StructurejcoBapiReturn=jcoFunction.getExportParameterList().getStructure("
RETURN"
if((jcoBapiReturn.getField("
TYPE"
).getValue()).toString().equals("
E"
))
thrownewException();
7)获得返回值
JCO.TablejcoStatusInfo=jcoFunction.getTableParameterList().getTable("
STATUSINFO"
8)最后是异常的捕获与处理
JCO开发建议
基于JAVA语言的特征,建议以如下的方式开发JCO应用。
1)主要的类:
输入参数封装到javabean类中,并统一进行有效性检查。
针对所要调用的BAPI建立代理类,将BAPI的业务功能封装起来。
建立一个解释类,负责调用业务功能类,并将参数从javabeans传递到业务功能类。
2)流程: