《管理信息化浅谈基于系统的远程功能调用》由会员分享,可在线阅读,更多相关《管理信息化浅谈基于系统的远程功能调用(5页珍藏版)》请在金锄头文库上搜索。
1、第1期刘建武. 浅谈基于SAP系统的远程功能调用55浅谈基于SAP系统的远程功能调用 摘要:本文介绍了SAP系统中远程功能调用的基本知识和相关概念,并对五种基本的调用类型从如何使用、何时使用以及为何使用等方面进行了一一阐述。关键词:SAPR/3 RFC RFM SAPR/3是德国SAP公司研发的基于客户/服务器环境的系统软件,可用于处理一个公司中几乎所有的经营管理任务,具有功能模块化、信息高度共享、开放性、用户界面友好和安全性高等特点。之所以说SAPR/3是一个开放的系统,一是因为它具有专属的ABAP语言开发环境,能够让开发人员实现个性化的功能;二是它能够使R/3与R/3系统之间、R/3与非R
2、/3系统之间无缝集成。就技术角度而言,SAPR/3提供了文件交换、程序通讯、数据库存取以及对标准网络服务的支持等通讯手段来实现系统内部和系统之间的数据交流,从而达到信息的高度共享。本文所论述的RFC(Remote Function Call)远程功能调用就是实现程序通讯(即program-to-program)的一种方式。文章首先简要介绍了RFC的基本知识和相关概念,然后对RFC的五种基本调用类型从如何使用、什么时候使用以及为什么使用等方面进行了一一阐述。1 RFC简介远程功能调用(RFC)就是指与调用者不在同一个系统的功能函数被执行的过程。在技术上,SAP允许调用者与被调用的功能函数既可以属
3、于不同的系统,也可以属于同一个系统。所运行的系统既可以是R/3系统之间,也可以是R/3与非R/3系统之间。在RFC中调用者称为客户,被调用者称为服务器,整个调用过程既开始于客户端也结束于客户端,按顺序可以分成四个步骤:第一步,客户端向服务器端的功能函数发起调用;第二步,服务器检测被调用的功能函数是否有效以及是否允许远调用,如果函数正确有效则受理调用请求;第三步,检测用户是否具有函数的调用权限,如果权限满足则运行函数,并可以返回调用结果给客户端;第四步,客户端接收到服务器端返回的结果,然后根据这个结果执行相应的处理逻辑。2 RFC的五种基本调用类型SAPR/3提供了五种基本的RFC调用类型,以适
4、应不同的需求。同步型,Synchronous RFC(sRFC) 收稿日期:2008-02-29作者简介:刘建武,1998年毕业于长炼职工大学,现从事于计算机软件开发工作。sRFC是一个最普通的调用类型,当程序要求在功能函数执行完成后立即返回结果时,使用sRFC是一种比较理想的选择。然而,此时在如图1所示的sRFC通讯过程中,客户端和服务器端必须同时有效。图中DESTINATION的参数被称为目标系统,也就是远程功能函数(RFM)所在的服务器名称。如果目标系统参数为空或者NONE,则表示所调用的功能函数在本地运行。在sRFC传递到服务器后,调用者程序就被悬挂起来,一直到RFM返回结果为止。首次
5、被调用的功能函数都会在其所属的系统内创建一个上下文环境,同时把该函数所在功能组的内容全部装载进来,并且该环境会一直保持在内存中,一直到调用者程序发出结束会话的指令为止。当属于同一个目标系统相同函数组的其它函数被调用时,不会再创建新的会话环境,当前被调用的函数可以获取到该函数组任何全局变量的值,不管它是否被其它函数所修改,从而到达数据共享的目的。如图1所示。异步型,Asynchronous RFC(aRFC)了能够同时调用多个RFM,而不必一味地等待前者被调用的结果,以提高ABAP程序的运行效率,使用aRFC是一种非常好的选择。换句话说,aRFC可以让目标系统在接收到调用请求后立即将控制权交还给
6、调用者程序,以使后续的RFM能够毫无耽搁地被调用。从图2所示aRFC的调用过程看,与sRFC相比就语法角度而言aRFC多了一条语句STARTING NEW TASK。这表示每个aRFC都要创建自己的会话环境,不管所调用的功能函数是否相同。一旦功能函数执行完毕,无需调用者程序发送任何命令,所建立的上下文会话环境将自动图1 同步调用关闭。虽然aRFC在功能函数执行完毕之前就交还了控制权,但是只要添加一条PERFORMING func1 ON END OF TASK语句,并编写代码实现相应的回调函数func1,调用者程序仍然可以获得来自RFM的运行结果。因此对于aRFC来说,是否捕获返回结果完全取决
7、于调用者程序的需要,不管怎样都不会影响程序的执行效率,使用起来非常方便灵活。如图2所示。图2 异步调用图2 异步调用 事务型,Transactional RFC(tRFC)tRFC能够将一个或多个RFM组织起来形成一个工作进程逻辑单元(LUW),所有的RFM都在这个LUW中顺序执行,并且每个RFM只执行一次。也就是说,如果其中任何一个RFM调用出错,属于同一个LUW的后续RFM将不会执行。tRFC提供了错误跟踪机制,可以记录从调用请求发送到函数执行完成整个过程的错误信息。用户可以通过事务码SM58查看到所产生的这些错误信息,以便对调用程序或目标系统作相应的修改或调整。因此,tRFC非常适用于生
8、成后勤业务凭证或财务凭证记帐的情况,它能够完全确保凭证生成或记帐的唯一性。与sRFC和aRFC相比,tRFC必须使用提交语句COMMIT WORK,相应的功能函数才会在目标系统中执行。同时使用tRFC也可以省去程序员自己编写错误处理代码的时间和精力。就调用语法而言,tFRC比sRFC多了一条IN BACKGROUND TASK语句。就调用过程而言,tFRC与aRFC类似,同样是在功能函数接收到调用请求之后立即将控制权交还给调用者程序。队列型,Queued RFC(qRFC)虽然tRFC可以确保属于同一个LUW的RFM能够顺序执行,但是如果存在多个LUW也按次序执行时,使用qRFC则完全可以满足
9、需求,因此可以说qRFC实际上是tRFC的一种扩展。与tRFC相比,相同的是所有功能函数必须在接收到提交命令之后才会执行,不同的是在每一次调用RFC之前都必须先调用TRFC_SET_QUEUE_NAME函数,以确定tRFC的执行顺序。qRFC的这种函数执行次序控制机制被称为队列,它可以分为外向队列和内向队列。当调用者程序与被调用的功能函数不在同一个系统时,qRFC执行顺序由外向队列控制,反之则由内向队列控制。并发型,Parallel RFC(pRFC)pRFC被认为是aRFC的一种扩展,因为它在执行效率非常显著,远比aRFC要高。当存在大量的RFC需要异步调用时,使用pRFC是一种十分谨慎和可
10、靠的选择(例如:在进行MRP运算时,如果使用pRFC可以大大提高执行效率和业务的处理能力)。与aRFC相比,pRFC更加智能化,它会在目标系统内存吃紧或者多个进程占用相同资源的情况下等待功能函数调用的最佳时机,并不会象aRFC那样不考虑任何环境因素而造成服务器过载,致使系统性能严重下降甚至死机。之所以说pRFC运行效率高,是因为它可以用参数DESTINATION IN GROUP指定功能函数运行的应用服务器组(在事务码RZ12中维护),利用RFC本身自有的负载均衡机制,将RFC分配到属于同一组的不同应用服务器上运行。以上阐述的RFC调用类型各有各的利弊和侧重点,它们适用于不同的情况,实现不同的
11、目的。我们可以从图3所示六个方面来对这五种RFC调用类型进行一个总的比较。表1 五种基本调用类型对比同步型(sRFC)异步型(aRFC)事务型(tRFC)队列型(qRFC)并发型(pRFC)运行时间立即执行立即执行等待提交等待提交立即执行处理类型同步异步异步(EO)异步(EOIO)异步输出参数支持支持不支持不支持支持切换用户支持支持支持支持不支持对话交互支持支持不支持不支持不推荐运行检测不支持不支持支持支持不支持EO=Exactly Once(执行一次)EOIO=Exactly Once In Order(按顺序执行一次)l 执行时间使用sRFC、aRFC和pRFC时,只要调用请求一旦被目标系
12、统接受功能函数就会立即执行,而tRFC和qRFC则必须要等到提交指令的发出功能函数才得以调用。l 处理类型在五种调用类型中只有sRFC使用得最频繁,因为它代码简单、容易调试,并且无需编写回调函数就可以轻松获取RFM的调用结果。其余四种类型都属于异步调用,虽然代码比sRFC较为复杂,但是执行效率却远远高于sRFC。其中,tRFC和qRFC还能够控制功能函数的执行次序。l 输出参数aRFC和pRFC可以通过回调函数的机制获取到来自RFM的结果,而tRFC和qRFC则没有获取返回结果的能力。l 切换用户当RFM被调用之前,必须事先使用事务码SM59在调用者系统中创建一个RFC连接,这个连接包含了登录
13、目标系统的方式以及用户和集团号等信息。在五种调用类型中除了pRFC以外,其余四种类型都可以随时指定登录目标系统的用户或集团,即切换用户。l 对话交互在sRFC和aRFC中允许出现与用户进行交互的对话框界面(GUI),而在tRFC和qRFC中则不能出现任何GUI交互动作。虽然pRFC也允许对话交互,但是SAP不推荐这样做。l 运行监测在五种调用类型中只有tRFC和qRFC具有运行情况的跟踪监测功能,即查看RFC运行日志。其中事务码SM58用于监测tRFC,事务码SMQ1用于检测qRFC的外向队列,事务码SMQ2用于检测qRFC的内向队列。4 RFC的通讯处理周期每一个RFC请求的生成就表示一次R
14、FC通讯处理周期的开始,它以工作进程的形式存在,其中包含了连接参数、登录信息和运行时数据等内容。l 连接参数连接参数含了目标服务器的宿主机名和端口号,这些技术性设置都在SM59中进行维护。l 登录信息登录信息包含了相关用户在目标系统中的属性,例如:登录语言、集团号和用户名等。l 运行时数据运行时数据包含了功能函数的名字和相关参数,例如:输入参数、输出参数和表参数等。每次RFC通讯处理开始时,客户端网关就会打开一个与服务器网关的连接,然后把调用请求序列化传送过去,接着服务器网关还原序列化的内容成请求后分配给能够处理它的工作进程,最后将处理结果返回给客户端网关,并释放相关资源供其它进程使用。5 结
15、束语在日常的工作实践中,RFC广泛应用于系统集成方面,包括R/3系统之间以及R/3与非R/3系统之间,它能够在很短的时间内以最小的代价实现各个系统之间的数据交换,达到信息共享的目的。随着SAP系统的不断推广和广泛应用,对于ABAP开发人员来说,非常有可能会遇到需要使用RFC的情况,因此如何正确选择适合的RFC类型就成了解决问题的关键。希望本文所阐述的内容能够起到参考的作用,给他们一些启发和提示。参考文献1 周旋(译). SAP R/3技术与实现. 机械工业出版社,2001年版2 黄佳. SAP程序设计. 机械工业出版社,2005年版3 黄佳. SAP业务数据传输指南.人民邮电业出版社,2006年版4 SAP标准教材BC415,SAP公司2002年版二联合以实际行动迎接设备大检查近日,二联合积极开展查隐患抓整改,整资料搞演练等系列活动,以实际行动迎接总公司设备大检查。 为了把迎检工作抓实抓细,二联合首先从员工的行为规范抓起,每天值班干部查检员工是否按规定穿戴着装,发现不符合要求的严格考核兑现。积极开展查隐患抓整改活动,分工艺、设备、安全、综合四路对全装置设备进行拉网式隐患大排查,共查出各类隐患6项,及时联系有关单位限期整改完。对