SAPR/3接口技术老李整理SAPR/3提供了众多的API应用编程接口和接口工具,以方便SAP二次开发和爱好者进行研究。RFC、ALE/IDocs是SAP公司早期为SAPR/3R4.6C版本所提供的接口机制,目前应用最为广泛。在R4.0以后的版本中,又添加了技术上先进的BAPI和DCOM。下面对这些接口方式以及其它可用的整合方式进行介绍。一、RFC(RomoteFunctionCall,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:这里主要不是讨论SAPR/3函数的开发,使用SAP的公司一般都有专门的ABAP开发人员,通过事务代码SE37进入ABAP开发平台的“函数编制器”进行函数开发测试。以VB为例,SAP接口RFC的开发思路如下。在SAP客户端SAPGuiClient安装的时候,注意选择安装附带的SDK包。RFC接口程序开发,主要用的是“SAP.Functions”这个控件,通过控件在外部程序模拟SAPGuiClient的用户登录和函数调用,然后返回函数的值。SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发,但对于大数据量的查询效率相对较低。在附件中有VB中调用RFC的例程。在JAVA中也可以使用JCO接口来CALLSAP中的RFC,相关包和demo也包含在附件中。二、ALE/IDOCALE是ApplicationLinkandEnabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件。IDocs是中介文本(IntermediateDOCument)的缩写,是SAP提供的系统整合专用的数据/消息格式,可用于EDI、ALE或导出导入(XML,ASCII)文件等。当然也可ALE在SAP3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(MessagingService),使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(RemoteFunctionCall)调用SAP系统的功能模块。数据/消息分配层,主要提供三个关键服务:按数据分配模型决定数据接收者、消息的过滤和转换、数据/消息的压缩,以提高传递效率。应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。ALE的机制代替了原来的SAP所提供的批数据通讯BDC(BatchDataCommunication)方式。顾名思义,BDC为系统之间提供了简单的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。总得说来,应用SAP的ALE机制进行SAP与SAP或非SAP系统整合有以下几个好处:ALE技术不受SAP版本升级的影响,它提供了版本向后兼容性。ALE定义于SAP应用层,与SAP的逻辑层相对独立,整个ALE中间件独立于发送和接收系统。ALE消息设计逻辑保证消息的“一次且只有一次”的消息传递。ALE采用“存储-发送”技术确保消息即使系统发生故障或接收方没有准备接收时也可以达到目的地。这样就保证接收方不至于收到重复消息。ALE也提供了IDocs管理功能。主要有文本缩减、文本版本控制以及文本数据过滤。三种控制机制使得SAP开发人员可以根据实际需要对IDocs文本在运行中进行动态处理。ALE提供了系统管理功能,允许对ALE系统进行启动/复位/恢复等系统操作,为开发人员提供了进一步的管理控制。IDoc几乎可以传带任何SAP应用的数据,是一种“外围”定义格式,与SAP的应用数据定义不直接相关。IDocs已经广泛应用于早期的SAP-EDI的数据交换,因而它的设计有点类似于EDI的标准,即EDIFACT标准。IDocs是以字符基础的,因而是可读的。它有三种纪录类型,即:控制纪录-含文本信息,如IDoc类型,发送/接收方信息以及文本标识。数据纪录-含管理和实际数据部分。状态纪录-用来追踪文本传递各点的状态,如状态码,系统时间,错误标识等。再来看一下ALE/IDocs在系统整合过程中消息的实际传递情况:首先看发送过程。一个发送过程由事件触发,文本生成,数据打包以及交由传输媒介传递这四个步骤组成,具体如下:a应用系统事件触发系统目标(Objects)的状态变化,用户自主活动或其它数据库特定变化等可以启动数据表的触发程序,从而进行数据传递的初始化工作,如数据准备。b生成主IDoc文本(Master)按标准格式生成主IDoc文件,包含所有可以传递数据(不分接收者)c生成通讯Idoc从主IDoc中生成只与特定接收者有关的文本,通讯文本是主文本的子数据集(Subset)dIdoc发送利用异步通讯方式将一定版本的IDoc传递到接收方。下面,看看接收过程。接收过程始于SAP系统从外部收到IDoc文本。接收过程的优点在于,接收方既可以是SAP系统,也可以是第三方系统,这也是SAP与第三方进行有效整合的基础。接收过程由以下三个步骤组成:a存储Idoc-将文本存储于数据库,并进行语法校验b邮件处理程序读取Idoc--一个专门设计的IDoc处理程序读取IDoc并产生SAP或其它系统所需的系统消息。多个程序可以同时运行。c生成系统文本--处理程序进一步生成系统文本供系统使用,并将结果信息存于Idocd的状态纪录中。三、BAPI简介BAPI是BusinessApplicationProgrammingInterface的缩写,是SAP为3.0版本以上提供的基于企业目标(BusinessObject)技术的接口应用界面。SAP在3.0版本以上采用了Object-oriented技术,逻辑定义了SAPR/3系统的所有功能目标,并且将所有的目标(Objects)和BAPIs存储于企业目标库BOR(BusinessObjectsRepository)。SAPR/3企业目标的目标类型(ObjectType)相当于目标设计语言中类(Class)的概念,其定义结构由以下几部分组成:基本数据--所有目标类的通用属性,如目标标识和默认方法(Method)。接口界面--目标的方法(Method),事件(Event),特征(Attributes)。键(KeyFields)--供BOR中目标检索使用方法(Methods)--对目标进行所要求的各种操作。特征(Attibutes)--描述目标特征。事件(Events)--触发以改变目标状态。利用BAPI,开发人员可以实现对BOR进行实时访问,从而实现应用系统(SAP-SAP)之间在数据/逻辑层上的有效整合。1、当一个用户需求到来时,首先需要确认用户的需求,主要是接口参数的确定。2、在SAP下面输入事务代码BAPI,进入系统标准BAPI的列表界面。寻找符合要求的标准BAPI,主要关注业务模块以及版本号,目前SAP4.6A的为符合条件的标准BAPI接口,在文档标签中,也有关于每一个BAPI对象的详细介绍。如果标准接口过多,或者你仍然不清楚应该调用哪个系统标准的BAPI,那么你可以去咨询相关的业务专家或开发专员,Sdn.sap.com上面也可以去咨询,也可以到国外网站的BBS上咨询。3、在找到标准BAPI后,对于每个BAPI接口而言,它都有相应的参数,这些参数都对应着具体的结构,可以在BAPI标准接口的SORUCECODE下面双击该结构,然后可以进入该结构体的查看界面,这里你可以寻找结构体各个字段中符合你的用户需求的字段,跳出这些字段。4、确认用户需求时主要是确认传进去和传出来的参数,这些参数比如,日期,物料列表等等,对于日期而言它是单个行项目的,对于物料列表而言,它是多个行项目的,那么你需要将单个行项目的设计成结构体,而多个行项目设计成表tables。具体BAPI的应用,在SAP系统中用事务se37按baip*查找,再用where-use看其如何使用,也是非常详细的资料。SAPR/3的企业目标库BOR(BusinessObjectsRepository)中封装了R/3的功能对象。通过BAPI(BusinessApplicationProgrammingInterface)可以访问BOR。BAPI是R/3平台专用的开发接口,但是从系统整合的角度看,BAPI主要是支持SAP应用-SAP应用之间的整合,SAP应用-非SAP应用之间的整合需要其他的技术,其中R/3DCOM接口应用比较广泛。四、SAP-DCOM接口SAP于1998首次提供SAP-DCOM接口,以满足各种桌面应用开发的要求。利用DCOM连接端口,开发人员可以利用VB,C++,以DCOM目标方式访问SAP数据。在Web应用上,可以用VBScript,JavaScript以DHTML方式页面访问,也可以用ASP访问数据。另外,利用DCOM也可以间接访问SAP的企业目标库BOR。上面提到的BAPI是SAP系统上专用的,在实际应用上不如DCOM来得广泛。DCOM端口主要有两个技术模块组成,一个是管理模块,另一个模块生成SAPBO的DCOM代理组件(ProxyComponents),生成的DCOM组件存放于C++。代理组件有以下属性:Client-要访问的R/3客户系统UserID-R/3用户Password-用户密码Language-系统语言Destination-预先定义的目标名称另外,每个组件具有以下方法:PutSeesionInfo()—设定系统一次调用的目标参数AdviceRfcGuiSink()—用于需要SAPGUI或dubugging的场合。CommitWork()-用于数据更新,无implicitcommit的场合。InitKeys()-DCOM目标键初始化DimAs()-返回MicrosoftADO(AdvancedDataObject)纪录集(支持游标控制)。其它从R/3BO定义中继承的方法。R/3的DCOM接口主要用于Windows平台的应用程序访问R/3。R3DCOM可以除了可以访问BAPI外,还可以远程调用R/3上的ABAP程序(需要DCOMConnector4.6D以后的版本支持)。SAP的frontendCD中,附带了一个R/3DCOM的生成和管理工具,叫做DCOMConnector。通过DCOMConnector生成的DCOM组件包含两个组件,一个是业务代理组件,用于代理调用R/3BAPI或远程方法;另一个是Session组件,用于管理业务代理组件和R/3系统的交互。R/3DCOM组件运行在COM+环境(或者MTS)中,通过RFC协议访问R/3应用服务器。RFC是R/3开发接口的基本协议。不仅DCOM使用RFC协议,IDOC和BAPI也使用RFC调用访问R/3应用服务器。R/3DCOM可以被C/C++、VB等开发的桌面应用程序访问,也可以嵌入VBScript、JavaScript和ASP页面从而支持Web应用。下面简单介绍一下DCOMConnector的使用。1、运行环境。如果是Win2000,那么只需要VC6开发环境。如果是NT/98/95,那么需要IE5.0以上版本,并且安装微软的数据库访问组件MDAC2.5。建议使用Win2000。2、安装。一路默认安装,如果不需要com4abap,那么在configurecom4abap属性页中什么都不用填。安装后的DCOMConnector是一个WindowsMMC程序。3、转到节点Destination,配置Destination。填入各