相关技术简介RFC(RomoteFunctionCall,远程函数调用)接口模式RFC是SAP系统和其他(SAP或非SAP)系统间的一个重要而常用的双向接口技术,也被视为SAP与外部通信的基本协议。简单地说,RFC过程就是系统调用当前系统外的程序模块,从而实现某个功能,而且调用系统和被调用系统中至少有一个必须是SAPABAP系统。这种远程功能调用也可在同一系统内部进行(如本地SAP系统内的远程调用);但通常情况下,调用程序和被调用程序处于不同系统。SAP系统RFC应用的原理很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。优点:SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发。缺点:但对于大数据量的查询效率相对较低。如果有大数据量开发很多使用IDOC和BAPI接口开发技术RFC接口方案开发量小,实施简单,很快就能满足客户需求,如在外部系统打印报表,或外部系统获取SAP简单的数据信息进行加工处理等。但这种方案只能满足客户简单的需求。BAPI(BusinessApplicationProgrammingInterface)接口模式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是一个标准化的开放接口。BAPI是SAP提供给用户的一些标准函数,比如创建销售订单的函数,只要给定相应的参数,就可以实现特定的功能.它也克服了很多BDC存在的固有BUG.优点:BAPI是外部系统对SAP标准业务进行调用的一种方式,当外部系统有对SAP标准业务关联较紧密的功能性开发调用时较适合。缺点:但当外部系统与SAP系统间有大数据量的交付,并且分布广,网络状况较差情况下不适合。这种模式,也是只需写少量的代码就能实现,并且满足了客户对SAP业务模块对象化的应用,这种模式需要在SAP业务模块进行适量的配置,这是目前小业务数据量交付的常用接口模式,因为外部系统只需给出调用的输入参数,在获取SAP的输出参数,但SAP系统自身处理相应业务逻辑,这增加了SAP服务器负载,并且不适宜分布较广的系统间大数据量的交付ALE(ApplicationLinkandEnabling)/IDocs(IntermediateDOCument)接口模式ALE是ApplicationLinkandEnabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件。IDocs是中介文本(IntermediateDOCument)的缩写,是SAP提供的系统整合专用的数据/消息格式。ALE在SAP3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(MessagingService),使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。ALE的机制代替了原来的SAP所提供的批数据通讯BDC(BatchDataCommunication)方式顾名思义,BDC为系统之间提供了简单的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。ALE这些方面却处理的很好IDoc是EDI(电子数据接口)的一种标准,它是SAP系统支持的唯一一种EDI标准,所以,在SAP系统中,不用考虑EDI各个标准的转换问题ALE/IDocs模式适合有大数据量交付,系统间网络状况较差,且分布较广的SAP系统与非SAP系统间的集成接口模式SAP.NET可以实现与SAP系统的IDOC,FM,BAPI,RFC,webservice方式的连接,进行交互,其中webservice是未来SAP与外界进行交互技术发展的趋势,也是ESOA的实现之一。SAP.NET可以实现与SAP系统的IDOC,FM,BAPI,RFC,webservice方式的连接,进行交互,其中webservice是未来SAP与外界进行交互技术发展的趋势,也是ESOA的实现之一。开发步骤:这个实例使用BAPI_USER_GET_DETAIL做为receiverinterface和用户定义outbound同步interface。创建responsemessagemapping。创建interfacemapping。创建sendercommunicationchannel类型是SOAPadapter,使用outboundsynchronousinterface创建receivercommunicationchannel创建receiverdetermination在ID端定义webservice,创建WSDLoutboundsynchronous,URLhttp://host:port/XISOAPAdapter/MessageServlet?channel=party:service:channel在.net开发环境下加入web引用,可以用本地文件,或者远程URL。编译后会生成CS的类文件,关于sap.net的应用可以查看sap.net安装后的DEMO,很好,很强大。在线等vb与sap接口的问题(从sap读取数据中文不能正确显示)利用VisualBasic开发SAP接口程序初探2005-11-1809:16作者:冯强出处:天极开发责任编辑:方舟SAPR/3系统是业界最先进、最稳定的ERP系统,国际和国内大型企业采用该系统的比例遥遥领先于其它ERP系统的总和。SAPR/3内建了二次开发平台,使用的开发语言叫做ABAP,是一种类似于COBOL的编程语言。ABAP在报表输出方面功能相对较弱(只能按行打印在屏幕上或者导出到Excel中处理),所以日常工作中经常需要在外部开发程序。通过程序接口自动读取SAPR/3的数据表(视图),在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。SAPR/3的接口方式主要有RFC、IDOC、BAPI三种,本文要介绍的是相对比较简单的RFC(RomoteFunctionCall,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:本文主要不是讨论SAPR/3函数的开发,因为使用SAP的公司一般都有专门的ABAP开发人员。大家如果有机会接触ABAP平台,可以通过事务代码SE37进入ABAP开发平台的函数编制器进行函数开发测试。如图:下面主要以VB为例介绍一下SAP接口RFC的开发思路。在SAP客户端SAPGuiClient安装的时候,注意选择安装附带的SDK包(最保险是选择完全安装)。RFC接口程序开发,主要用的是SAP.Functions这个控件,通过控件在外部程序模拟SAPGuiClient的用户登录和函数调用,然后返回函数的值。请看下面的程序片段和重点注解(尤其是test_Click()):PrivateSubCommand1_Click()'定义R/3用户名和密码变量(用户名应由SAP管理员开运行函数的权限)DimlognameAsString*22,passwordAsString*22Calllogonr3(logname,password)'调用SAP登录界面程序IflogflagThen'调用生产、开发系统开关StatusBar1.Visible=TrueStatusBar1.SimpleText=正在登录SAPR/3系统...DimR3AppServerAsString,R3ClientAsString,R3SystemNoAsStringIfForm2.opPRD.ValueThen'以下服务器参数请根据客户配置情况更改R3AppServer=10.3.1.4'生产系统服务器IPR3Client=800'生产系统集团代码R3SystemNo=00'生产系统号ElseR3AppServer=10.3.3.1'开发系统服务器IPR3Client=101R3SystemNo=00EndIfUnloadForm2'释放Form2,所有控件及值不可用SetFunctions=CreateObject(Sap.Functions)'创建RFC的本地对象SetConnect=Functions.Connection'设置连接Connect.ApplicationServer=R3AppServer'赋值服务器IPConnect.Client=R3Client'赋值SAP集团代码Connect.Language=ZH'置SAP系统界面中文Connect.User=Trim(logname)'赋值SAP登录用户名Connect.password=Trim(password)'赋值SAP登录用户密码Connect.SystemNumber=R3SystemNo'赋值SAP系统号IfNotConnect.Logon(0,True)Then'软件登录SAP并判断MsgBox登录SAPR/3失败,请重新登录!,vbOKOnly+vbExclamation,系统提示Command1.SetFocusElse'登录SAP成功Command1.Enabled=FalseCommand2.Enabled=Truetest.Enabled=TrueEndIfStatusBar1.SimpleText=StatusBar1.Visible=FalseEndIfEndSubPrivateSubCommand2_Click()'注销SAP登录Connect.LogOffCommand2.Enabled=FalseCommand1.Enabled=Truetest.Enabled=FalseEndSubPrivateSubCommand3_Click()'退出SAP接口演示程序IfForm1.Command2.EnabledThenMsgBox退出前请断开SAPR/3系统!,vbOKOnly+vbInformation,系统提示ElseEndEndIfEndSubPrivateSubForm_Load()Command2.Enabled=Falsetest.Enabled=Falselogoflag=FalseEndSubPrivateSubtest_Click()'SAPRFC远程调用处理主演示DimGetCustomersAsObjectDimCustomersAsObjectDimiAsInteger'通过RFC接口远程运行SAP内部函数RFC_CUSTOMER_GET'赋要调用的SAP内建函数名SetGetCustomers=Functions.Add(RFC_CUSTOMER_GET)GetCustome