中程在线信息产业培训网(www.miiceic.org.cn)
RFC是远程过程调用(Remote Function Call,也叫远程函数调用,请求注解,Request For Comments)的缩写形式。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:

下面主要以VB为例介绍一下SAP接口RFC的开发思路。在SAP客户端SAP Gui Client安装的时候,注意选择安装附带的SDK包(最保险是选择完全安装)。RFC接口程序开发,主要用的是"SAP.Functions"这个控件,通过控件在外部程序模拟SAP Gui Client的用户登录和函数调用,然后返回函数的值。请看下面的程序片段和重点注解(尤其是test_Click()):
| Private Sub Command1_Click() ' 定义R/3用户名和密码变量(用户名应由SAP管理员开运行函数的权限) Dim logname As String * 22, password As String * 22 Call logonr3(logname, password) ' 调用SAP登录界面程序 If logflag Then ' 调用生产、开发系统开关 StatusBar1.Visible = True StatusBar1.SimpleText = "正在登录SAP R/3系统..." Dim R3AppServer As String, R3Client As String, R3SystemNo As String If Form2.opPRD.Value Then ' 以下服务器参数请根据客户配置情况更改 R3AppServer = "10.3.1.4" ' 生产系统服务器IP R3Client = "800" '生产系统集团代码 R3SystemNo = "00" '生产系统号 Else R3AppServer = "10.3.3.1" ' 开发系统服务器IP R3Client = "101" R3SystemNo = "00" End If Unload Form2 ' 释放 Form2 , 所有控件及值不可用 Set Functions = CreateObject("Sap.Functions") ' 创建RFC的本地对象 Set Connect = Functions.Connection ' 设置连接 Connect.ApplicationServer = R3AppServer ' 赋值服务器IP Connect.Client = R3Client ' 赋值SAP集团代码 Connect.Language = "ZH" ' 置SAP系统界面中文 Connect.User = Trim(logname) ' 赋值SAP登录用户名 Connect.password = Trim(password) ' 赋值SAP登录用户密码 Connect.SystemNumber = R3SystemNo ' 赋值SAP系统号 If Not Connect.Logon(0, True) Then ' 软件登录SAP并判断 MsgBox "登录SAP R/3失败,请重新登录!", vbOKOnly + vbExclamation, "系统提示" Command1.SetFocus Else ' 登录SAP成功 Command1.Enabled = False Command2.Enabled = True test.Enabled = True End If StatusBar1.SimpleText = "" StatusBar1.Visible = False End If End Sub Private Sub Command2_Click() ' 注销SAP登录 Connect.LogOff Command2.Enabled = False Command1.Enabled = True test.Enabled = False End Sub Private Sub Command3_Click() ' 退出SAP接口演示程序 If Form1.Command2.Enabled Then MsgBox "退出前请断开SAP R/3系统!", vbOKOnly + vbInformation, "系统提示" Else End End If End Sub Private Sub Form_Load() Command2.Enabled = False test.Enabled = False logoflag = False End Sub Private Sub test_Click() ' SAP RFC远程调用处理主演示 Dim GetCustomers As Object Dim Customers As Object Dim i As Integer ' 通过RFC接口远程运行SAP内部函数RFC_CUSTOMER_GET ' 赋要调用的SAP内建函数名 Set GetCustomers = Functions.Add("RFC_CUSTOMER_GET") GetCustomers.Exports("KUNNR") = "0000000103" ' 向函数入口赋值(客户代码) ' 向函数入口赋查询表名称 Set Customers = GetCustomers.Tables("CUSTOMER_T") If GetCustomers.Call Then ' 调用成功遍历显示客户所有信息条目 For i = 1 To Customers.rowcount MsgBox Customers(i, "KUNNR") Next i Else MsgBox " 搜索出错! 出错信息: " + GetCustomers.Exception End If End Sub |
SAP的RFC调用是其接口技术中最简单和易用的一种方式,该方式开发比较简便,特别适合于外部报表开发,但对于大数据量的查询效率相对较低。大家在熟练掌握后,可以进一步学习高级的IDOC和BAPI接口开发技术。
============================================================
RFC的另一个含义:
请求注解(RFC,Request for Comments)是Internet工程任务组的正式文档,由委员会起草,然后由感兴趣的团体对其进行评论。有些RFC是属于报告型的。对那些为成为Internet标准而制定的RFC,其最后版本将会成为标准,并且不允许进一步评论或修改。但是,还是可以对这个标准进行改动,只是必须取代以一个对先前RFC全部或部分进内容行了详细说明的后续RFC版本。
RFC(Request For Comments)-意即“请求注解”,包含了关于Internet的几乎所有重要的文字资料。如果你想成为网络方面的专家,那么RFC无疑是最重要也是最经常需要用到的资料之一,所以RFC享有网络知识圣经之美誉。通常,当某家机构或团体开发出了一套标准或提出对某种标准的设想,想要征询外界的意见时,就会在Internet上发放一份RFC,对这一问题感兴趣的人可以阅读该RFC并提出自己的意见;绝大部分网络标准的指定都是以RFC的形式开始,经过大量的论证和修改过程,由主要的标准化组织所指定的,但在RFC中所收录的文件并不都是正在使用或为大家所公认的,也有很大一部分只在某个局部领域被使用或并没有被采用,一份RFC具体处于什么状态都在文件中作了明确的标识
RFC由一系列草案组成,起始于1969年(第一个RFC文档发布于1969年4月7日,参见“RFC30年”,RFC2555”),RFC文档是一系列关于Internet(早期为ARPANET)的技术资料汇编。这些文档详细讨论了计算机网络的方方面面,重点在网络协议,进程,程序,概念以及一些会议纪要,意见,各种观点等。
“RFC编辑者”是RFC文档的出版者,它负责RFC最终文档的编辑审订。“RFC编辑者”也保留有RFC的主文件,称为RFC索引,用户可以在线检索。在RFC近30年的历史中,“RFC编辑者”一直由约翰?普斯特尔(Jon Postel)来担任,而现在“RFC编辑者”则由一个工作小组来担任,这个小组受到“因特网社团”(Internet Society)的支助。
RFC编辑者负责RFC以及RFC的整体结构文档,并维护RFC的索引。Internet协议族的文档部分(由Internet工程委员会“因特网工程师任务组”IETF以及IETF 下属的“因特网工程师指导组”IESG 定义),也做为RFC文档出版。因此,RFC在Internet相关标准中有着重要的地位。
RFC编辑者的职责是由Internet 中的大家提议形成的,所出版的语言也就和Internet一样。IETF和ISOC是代表了世界各地的国际性组织,英语是IETF的第一工作语言,也是IETF的正式出版语言。RFC 2026 "The Internet Standards Process -- Revision 3" 允许RFC翻译成其他不同的语言。但是不能保证其翻译版本是否正确。因此,RFC编辑不对非英语的版本负责,而只是指明了哪里有非英语的版本,将这些信息列在WEB页上。
1.1 RFC历史及概况
RFC文档也称请求注解文档(Requests for Comments,RFC),这是用于发布Internet标准和Internet其他正式出版物的一种网络文件或工作报告。RFC文档初创于1969年,RFC出版物由RFC编辑(RFC Editor)直接负责,并接受IAB的一般性指导。现在已经有3000多个RFC系列文件,并且这个数目还在不断增加, 内容和Internet (开始叫做为ARPANET)相关。草案讨论了计算机通讯的方方面面,重点在网络协议,过程,程序,以及一些会议注解,意见,风格方面的概念。
RFC编辑者负责RFCs 以及RFCs的整体结构文档,并维护RFCs的索引。Internet协议族的文档部分(由Internet工程委员会IETF以及IETF 下属的管理组IESG 定义),也做为RFC文档出版。因此,RFC在Internet相关标准中有着重要的地位。
RFC编辑者的职责是由Internet 中的大家提议形成的,所出版的语言也就和Internet一样。IETF and the ISOC是代表了世界各地的国际性组织,英语是IETF的第一工作语言,也是IETF的正式出版语言。RFC 2026 "The Internet Standards Process -- Revision 3" 允许RFCs翻译成其他不同的语言。但是不能保证其翻译版本是否正确。因此,RFC编辑不对非英语的版本负责,而只是指明了哪里有非英语的版本,将这些信息列在WEB页上。
1.2 RFC处理过程
一个RFC文件在成为官方标准前一般至少要经历三个阶段:建议标准、草案标准、因特网标准。
在Internet上,任何一个用户都可以对Internet某一领域的问题提出自己的解决方案或规范,作为Internet草案(Internet Draffs,ID)提交给Internet工程任务组(IETF)。草案存放在美国、欧洲和亚太地区的工作文件站点上,供世界多国自愿参加的IETF成员进行讨论、测试和审查。最后,由Internet工程指导组(IESG)确定该草案是否能成为Internet的标准。
如果一个Internet草案在IETF的相关站点上存在6个月后仍未被IESG建议作为标准发布,则它将被从上述站点中删除。事实上,在任何时候,一个Internet 草案都有可能被新的草案版本所替换掉,并重新开始6个月的存放期。
如果一个Internet草案被IESG确定为Internet的正式工作文件,则被提交给Internet体系结构委员会(IAB),并形成具有顺序编号的RFC文档,由Internet协会(ISOC)通过Internet向全世界颁布。每个Internet标准文件在被批准后都会分配一个独立于RFC的永久编号,这就是STD编号。有一个不断被更新的文件RFC-INDEX.TXT按照RFC的编号来索引所有的文件,对于因特网标准文件还列出了其相应的STD编号。
RFC文档必须被分配RFC编号后才能在网络上发布。例如,RFC2026的内容是“Internet标准进程-修订版3”、RFC1543的内容为“RFC作者指导”等等。需要时,可以复制或打印这些联机文档。用户也可以通过遍布全世界的数个联机资料数据库中获得RFC文档。例如,可以使用路径名RFC/RFCnnnn.TXT通过FTP的方式从ds.internic.net站点获得RFC,其中“nnnn”指的是RFC的编号。在这里,使用FTP登录时,所用的用户名和口令分别为“anonymous”和你的电子邮件地址。此外,用户还可以通过Internet网络信息中心(InterNIC)的目录服务功能、电子邮件、WWW等方式获得RFC文档.
作为标准的RFC又分为几种,第一种是提议性的,就是说建议采用这个作为一个方案摆出来,Draft是
已经有一部分在用了,希望被采用为正式的标准,还有一种就是完全被认可的标准,这种是大家都在用,而且是不应该改变的。还有一种就是现在的最佳实践法,它相当于一种介绍。这些文件产生的过程是一种从下往上的过程,而不是从上往下,也就是说不是一个由主席,或者由工作组负责人的给一个指令,说是要做什么,要做什么,而是有下边自发的提出,然后在工作组里边讨论,讨论了以后再交给刚才说的工程指导委员会进行审查。但是工程指导委员会只做审查不做修改,修改还是要打回到工作组来做。IETF工作组文件的产生就是任何人都可以来参加会议,任何人都可以提议,然后他和别人进行讨论,大家形成了一个共识就可以产出这样的文件。
2 RFC的内容
2.1 RFC的分类
根据RFC被公布时的状态可以把RFC索引划分成几类:Standards(标准);Draft Standards(草案标准);Proposed Standards(提案标准)。每个分类具体的内容见:www.rfc-editor.org。
2.2 与计算机网络有关的RFC
2.2.1 应用层协议
l FTP (RFC 959)
文件传送协议FTP(File Transfer Protocol)是Internet文件传送的基础。通过该协议,用户可以从一个Internet主机向另一个Internet主机拷贝文件。
与大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出命令,服务器程序执行用户所发出的命令,并将执行的结果返回到客户机。比如说,用户发出一条命令,要求服务器向用户传送某一个文件的一份拷贝,服务器会响应这条命令,将指定文件送至用户的机器上。客户机程序代表用户接收到这个文件,将其存放在用户目录中。
l HTTP (RFC 1945)
HTTP协议(Hypertext Transfer Protocol,中文称“超文本传输协议”)是用来在Internet上传送超文本的传送协议。它是运行在TCP/IP协议族之上的HTTP应用协议,它可以使浏览器更加高效,使网络传输减少。任何服务器除了包括HTML文件以外,还有一个HTTP驻留程序,用于响应用户请求。浏览器是HTTP客户,向服务器发送请求,当浏览器中输入了一个开始文件或点击了一个超级链接时,浏览器就向服务器发送了HTTP请求,此请求被送往由IP地址指定的URL。驻留程序接收到请求,在进行必要的操作后回送所要求的文件。
l SMTP (RFC 821/822)
SMTP(Simple Mail Transfer Protocol)是一组规则,用于由源地址至目的地址传送电子邮件。每一个想接收电子邮件的主机都安装了SMTP服务器。当主机由用户接收了电子邮件并想传递到另外一台服务器,则它联络SMTP服务器。SMTP服务器会作出反应,显示确认、错误消息或特定的请求信息。其中RFC821定义了SMTP标准,RFC822定义了SMTP消息格式。
l POP3 RFC 1081
POP3(Post Office Protocol 3)协议通常被用来接收电子邮件。这个协议很简单,因为它只包含12个命令。这些命令被客户端计算机用来发送 给远程服务器。反过来,服务器返回给客户端计算机两个回应代码。
l Telnet (RFC854)
TELNET Protocol的目的是提供一个相对通用的,双向的,面向八位字节的通信方法。它主要的目标是允许接口终端设备的标准方法和面向终端的相互作用。
2.2.2 传输层协议
l TCP (RFC 793)
传输控制协议(Transmission Control Protocol)是为了在主机间实现高可靠性的包交换传输协议。TCP协议主要在网络不可靠的时候完成通信。它支持多种网络应用程序。TCP对下层服务没有多少要求,它假定下层只能提供不可靠的数据报服务,它可以在多种硬件构成的网络上运行。TCP可以根据IP协议提供的服务传送大小不定的数据,IP协议负责对数据进行分段,重组,在多种网络中传送,因此TCP协议则提供了一个可靠的、可流控的、全双工的信息流传输服务。
l UDP (RFC 786)
UDP(用户数据报协议--User Datagram Protocol)是TCP/IP协议集中等同于TCP的通信协议。UDP直接利用IP协议进行UDP数据报的传输,因此UDP提供的是无连接、不可靠的数据报投递服务。UDP常用于数据量较少的数据传输,例如:域名系统中域名地址/IP地址的映射请求和应答(Named),Ping 、BOOTP、TFTP等应用。在少量数据的传输时,使用UDP协议传输信息流,可以减少TCP连接的过程,提高工作效率。当使用UDP协议传输信息流时,用户应用程序必须负责解决数据报排序,差错确认等问题。
2.2.3 网络层协议
l IP (RFC 791)
Internet 上使用的一个关键的低层协议是网际协议,通常称IP协议。我们利用一个共同遵守的IP协议,从而使 Internet 成为一个允许连接不同类型的计算机和不同操作系统的网络。 网际协议IP协议提供了能适应各种各样网络硬件的灵活性,对底层网络硬件几乎没有任何要求,任何一个网络只要可以从一个地点向另一个地点传送二进制数据,就可以使用IP协议加入 Internet 了。IP协议对于网络通信有着重要的意义:网络中的计算机通过安装IP软件,使许许多多的局域网络构成了一个庞大而又严密的通信系统。从而使 Internet 看起来好像是真实存在的,但实际上它是一种并不存在的虚拟网络,只不过是利用IP协议把全世界上所有愿意接入 Internet 的计算机局域网络连接起来,使得它们彼此之间都能够通信。
l ICMP (RFC2236)
ICMP(Internet Control Message Protocol”,Internet控制消息协议)是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
l ARP(RFC 826)
在TCP/IP网络环境下,每个主机都分配了一个32位的IP地址,这种互连网地址是在国际范围标识主机的一种逻辑地址。为了让报文在物理网上传送,必须知道彼此的物理地址。这样就存在把互连网地址变换为物理地址的地址转换问题。以以太网(Ethernet)环境为例,为了正确地向目的站传送报文,必须把目的站的32位IP地址转换成48位以太网目的地址DA。这就需要在网络层有一组服务将IP地址转换为相应物理网络地址,这组协议即是ARP。
在进行报文发送时,如果源网络层给的报文只有IP地址,而没有对应的以太网地址,则网络层广播ARP请求以获取目的站信息,而目的站必须回答该ARP请求。这样源站点可以收到以太网48位地址,并将地址放入相应的高速缓存(cache)。下一次源站点对同一目的站点的地址转换可直接引用高速缓存中的地址内容。地址转换协议ARP使主机可以找出同一物理网络中任一个物理主机的物理地址,只需给出目的主机的IP地址即可。这样,网络的物理编址可以对网络层服务透明。
l RARP(RFC 903)
RARP(反向地址转换协议)用于一种特殊情况,如果站点初始化以后,只有自己的物理地址而没有IP地址,则它可以通过RARP协议,发出广播请求,征求自己的IP地址,而RARP服务器则负责回答。这样,无IP地址的站点可以通过RARP协议取得自己的IP地址,这个地址在下一次系统重新开始以前都有效,不用连续广播请求。RARP广泛用于获取无盘工作站的IP地址。
2.2.4链路层协议
l PPP协议(RFC1661)
PPP协议是一种有效的点一点通信协议,它由串行通信线路上的组帧方式,用于建立、配制、测试和拆除数据链路的链路控制协议LCP及一组用以支持不同网络层协议的网络控制协议NCPs三部分组成。
由于PPP帧中设置了校验字段,因而PPP在链路层上具有差错检验的功能。PPP中的LCP协议提供了通信双方进行参数协商的手段,并且提供了一组NCPs协议,使得PPP可以支持多种网络层协议,如IP、IPX、OSI等。另外,支持IP的NCP提供了在建立连接时动态分配IP地址的功能,解决了个人用户上Internet的问题。
l SLIP协议(RFC1055)
SLIP提供在串行通信线路上封装IP分组的简单方法,用以使用远程用户通过电话线和MODEM能方便地接入TCP/IP网络。
SLIP是一种简单的组帧方式,使用时还存在一些问题。首先,SLIP不支持在连接过程中的动态IP地址分配,通信双方必须事先告知对方IP地址,这给没有固定IP地址的个人用户上Internet网带来了很大的不便:其次,SLIP帧中无协议类型字段,因此它只能支持IP协议;再有,SLIP帧中列校验字段,因此链路层上无法检测出传输差错,必须由上层实体或具有纠错能力的MODEM来解决传输差错问题。
3 RFC资源
以下是几个较为稳定的RFC链接,以及几个重要的标准化组织的网站链接
http://www.rfc.net RFC的官方站点,可以检查RFC最及时的更新情况
http://www.ietf.org 最重要的Internet组织之一
http://sunsite.dk RFC查询非常强大(可以以FTP登录下载全部RFC文档)
http://www.iso.ch ISO-国际标准化组织
http://standards.ieee.org IEEE-电气与电子工程师协会
http://web.ansi.org ANSI-美国国家标准化组织
http://www.itu.int ITU-国际电信同盟