SAP业务对象SAPBAPI技术调用BAPI业务对象的设计示例小结SAP及来务对象BAPI讲议内容SAP业务对象BAPI(BusinessApplicationProgrammingInterfaces),它使SAP组件或SAP与非SAP系统之间沟通成为可能,从技术到业务层面通过BAPI可以将外围及SAP系统整合在一起,也为SAP与BW系统提供相应接口.SAP业务对象SAP业务对象概述业务对象(BusinessObject),SAP业务对象描述了在SAP系统中每个模块中真实的对象体(如:销售单,生产工单,物料清单),它是基于OO(ObjectOriented)思想而设计,通过业务组件(BusinessComponent),业务对象(BusinessObjectType)和BAPI等实现.SAP业务对象SAP业务对象概述-业务对象仓库(Businessobjectrepository,BOR)业务对象仓库是业务对象类型(BusinessObject)和BAPI组织的中心,业务对象根据所属的模块应用层级进行组织,同时管理着业务对对象的不同版本.SAP业务对象业务对象的仓建:SWO1PATH:Tools-BusinessFramework-BAPIDevelopment-BusinessObjectBuilder业务对象类型:指技术名称业务对象名称:一般有实际意(如村料编号,物料清单SAP业务对象业务对象的浏览:SWO3利用它可以方便查找每个模块或应用组件中有哪些可用的业务对象.SAP业务对象SAP业务对象概述-业务对象类型的组件SAP业务对象接口(Interface)是一种特殊的业务对象类型,它不能生成对象实例,只能做为其它业务对象类型的组件.关键字段(KeyFields),用于唯一确定一个业务对象类型的实例,可做为FM中的传输值.属性(Attribute)是业务对象的数据部分,可以是数据字典中的字值.方法(Method)用于操作业对象的属性,在方法中可以通过ABAP代码,其它业务对象,FM,报表等实现,它是外部访问的接口.事件(Events)是SAP平台与业务对象的一种行为,如状态开关的改变来触发工作流.基本数据(BasicData)是用来保存业务对象技术名称,状态,默认属性或方法.SAP业务对象SAP业务对象概述-测试业务对象T-CODE:SW01PATH:Tools-BusinessFramework-BAPIDevelopment-BusinessObjectBuilder图1:主界面1,输入对象类型2,点选测试SAP业务对象SAP业务对象概述-测试业务对象图2:方法选择界面SAPBAPI技术BAPI概述BAPI为SAP对象类型中的方法提供基本的逻辑实现,它建立在RFC协议的基础上,可以实现SAP组件或SAP与其它非SAP系统之前通讯,在此理论基础上,使SAP能和旧有的系统及辅助系统集成,它可以与.NET/JAVA/CORBA/C++等主流开发软件或ExcelVBA通信.BAPI的查找1.通过BAPI浏览器查找,T-CODE:BAPISAPBAPI技术BAPI的查找2.通过BOR查找,T-CODE:SWO1通过BOR查找,在对象类型的Methods清单下状态表示已经激活的可用方法.调用BAPIBAPI事务模型:ACID原则1.完整性(Atomic):所有数据库操作将全部完成或全部回滚.2.一致性(Consistent):前一次输入的数据不应影响新的调用结果.3.独立性(Isolated):两个事务之间不能产生功能上的依赖关系.4.持久性(Durable):提交事务后,不能将之前的修改还原.调用BAPIBAPI事务模型:ACID原则调用BAPI在ABAP中调用BAPI功能模块1.在SAP中通过ABAP调用BAPI调用结果都是根据Return查看.TYPE:消息类型(S=Success,E=Error,W=Warning,I=Information)ID:消息类别NUMBER:消息编号MESSAGE:消息长文本MESSAGE_V1/MESSAGE_V2/MESSAGE_V3/MESSAGE_V4:传递消息变量.TABLES:BAPI0002_1.DATA:ITABLIKESTANDARDTABLEOFBAPI0002_1WITHHEADERLINE.CALLFUNCTION'BAPI_COMPANYCODE_GETLIST'*IMPORTING*RETURN=TABLESCOMPANYCODE_LIST=ITAB.以下是调用通过ABAP调用BAPI的示例:如上图:Callfunction‘SAPFM名称’,SAP中自带有很多标准的FM,这些可以直接放到自已开发的报表中用,以达到代码的重用性.调用BAPI在ABAP中调用BAPI功能模块2.跨Client或服务器远程调用BAPI有时需要通过BAPI跨Client交换数据DATA:RFC(10)TYPEC.TABLES:BAPI0002_1.DATA:ITABLIKESTANDARDTABLEOFBAPI0002_1WITHHEADERLINE.RFC='RFC'.CALLFUNCTION'BAPI_COMPANYCODE_GETLIST'DESTINATIONRFC*IMPORTING*RETURN=TABLESCOMPANYCODE_LIST=ITAB.调用方法同例1大同小异,需要在Callfunction中加入DESTINATION命令,作用是告诉SAP从哪个逻辑目标取数据.调用BAPI在ABAP中调用BAPI功能模块2.通过外部程序访问SAP.(右边是演示VB.NET访问SAP的示例)FUNCTIONS=CreateObject(SAP.FUNCTIONS)CONN=FUNCTIONS.ConnectionCONN.ApplicationServer=59.152.212.220CONN.Client=355CONN.Language=ENCONN.User=“useridCONN.Password=“pwdCONN.SystemNumber=00STATUS=CONN.Logon(0,True)建立和SAP的接连参数,如右图:可以根据STATUS来判断连接状态.SETT_CALL_FUNC=FUNCTIONS.Add(BAPI_MATERIAL_EXISTENCECHECK)T_CALL_FUNC.Exports(MATERIAL)=Trim(ITEM_CODE)SETT_STRUC=T_CALL_FUNC.Imports(RETURN)T_CALL_FUNC.Call将数据读到本地IfNot(CONNIsNothing)ThenCONN.CloseSetCONN=NothingEndIf关闭RFC连接创建业务对象的示例通常SAP标准的BAPI基本能满足实际的编程需要,有时也需要自定义一些特殊的BAPI来应对个别的需求,以下是创建一个BAPI来获取SO资料的示例,从而加深了解对BAPI逻辑的理解:业务情景:根据需要根据客户编号提取以下资料客户编号销售单号项目行产品产品描述数量出货工厂KUNNRVBELNPOSNRMATNRMAKTXZMENGWERKS创建业务对象的示例建立业务对象类型(T-CODE:SWO1)PATH:Tools-BusinessFramework-BAPIDevelopment-BusinessObjectBuilder图1图2如图1,在Object/InterfaceType栏位中输入对象名称ZORD,点击Create.在图2界面中输入对象类型/对象名/程序名.创建业务对象的示例创建关键字段选中KeyFields,点击新增按钮.在Table栏中输入KNA1,系统自动带出关键字段供选择,此例主要是引用客户编号,所以从客户Master表中提取.创建业务对象的示例创建属性创建业务对象的示例创建方法创建FunctionModule首先创建需要传输的数据结构(T-CODE:SE11)在DataType栏内输入ZBAPIORD(注意:BAPI自定义结构类型需要以ZBAPI开头)在左图中输入相应的数据字段.创建业务对象的示例创建FunctionModule(T-CODE:SE37)定义FM:输入FM名称及FUNCTIONGROUP.Import参数Table参数创建业务对象的示例创建方法SAP已经继承了两个方法,通常也需要手工添加方法来实现在FunctionModule栏位输入刚刚创建的函数.在下一界面更改显示的Method.创建业务对象的示例选中所建的METHOD,点击如左图:BEGING_METHOD.…………………..…………………..END_METHOD.这个是对象的方法名,中间包含有处理相关逻辑代码段,刚刚我们加入了自已建立的FM,其实也可以视情况手工加入一些处理代码创建业务对象的示例实现和激活.选择TOImplemented分别实现业务对象类型的属性/方法Release创建业务对象的示例测试在SWO1中输入刚刚建立的ObjectType,然后点选执行.如右图:选择刚刚新建的方法OrderDetial后,输入客户编号点击执行.小结业务对象本示例简述了SAP业务对象工作的基本原理,业务对象的设计与调用要点.BAPIBAPI其实是业务对象的方法,它代表对应的RFM功能模块,它是访问业务对象的中间件.ABAPOOABAPOO是SAP中ABAP语言的从面过程到面向对象编程的实现,作为ABAP编程语言的扩展,它也可能以向下兼容,同时增加了代码的可重用性.