| 订阅 | 在线投稿
分享
 
 
 

利用VB开发SAP接口程序初探

来源:互联网网民  宽屏版  评论
2007-06-12 04:35:54

作者:冯强出处:天极开发

天极链接:http://dev.yesky.com/31/2200031.shtml

SAP R/3系统是业界最先进、最稳定的ERP系统,国际和国内大型企业采用该系统的比例遥遥领先于其它ERP系统的总和。SAP R/3内建了二次开发平台,使用的开发语言叫做ABAP,是一种类似于COBOL的编程语言。ABAP在报表输出方面功能相对较弱(只能按行打印在屏幕上或者导出到Excel中处理),所以日常工作中经常需要在外部开发程序。通过程序接口自动读取SAP R/3的数据表(视图),在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。

SAP R/3的接口方式主要有RFC、IDOC、BAPI三种,本文要介绍的是相对比较简单的RFC(Romote Function Call,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型:
[/url]

王朝网络

本文主要不是讨论SAP R/3函数的开发,因为使用SAP的公司一般都有专门的ABAP开发人员。大家如果有机会接触ABAP平台,可以通过事务代码SE37进入ABAP开发平台的"函数编制器"进行函数开发测试。如图:

[url=http://www.iptver.com/showimg.asp?BoardID=19&filename=2006-1/200612614233720921.jpg]
[/url]

[url=http://www.iptver.com/showimg.asp?BoardID=19&filename=2006-1/200612614233720921.jpg]

王朝网络

下面主要以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接口开发技术。

本文程序VB6工程文件包:http://www.iptver.com/download/share/20051016_SAP_RFC_Example_VB.rar

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
作者:冯强 出处:天极开发 天极链接:[url=http://dev.yesky.com/31/2200031.shtml]http://dev.yesky.com/31/2200031.shtml[/url]   SAP R/3系统是业界最先进、最稳定的ERP系统,国际和国内大型企业采用该系统的比例遥遥领先于其它ERP系统的总和。SAP R/3内建了二次开发平台,使用的开发语言叫做ABAP,是一种类似于COBOL的编程语言。ABAP在报表输出方面功能相对较弱(只能按行打印在屏幕上或者导出到Excel中处理),所以日常工作中经常需要在外部开发程序。通过程序接口自动读取SAP R/3的数据表(视图),在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。   SAP R/3的接口方式主要有RFC、IDOC、BAPI三种,本文要介绍的是相对比较简单的RFC(Romote Function Call,远程函数调用)。SAP系统RFC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。下面是RFC调用的模型: [url=http://www.iptver.com/Boke/UploadFile/2/2005-11/200511202315660006.jpg][/url] [img]http://images.wangchao.net.cn/images/upload/images/lsdn/1181594151287.png[/img]   本文主要不是讨论SAP R/3函数的开发,因为使用SAP的公司一般都有专门的ABAP开发人员。大家如果有机会接触ABAP平台,可以通过事务代码SE37进入ABAP开发平台的"函数编制器"进行函数开发测试。如图: [url=http://www.iptver.com/showimg.asp?BoardID=19&filename=2006-1/200612614233720921.jpg][/url] [url=http://www.iptver.com/showimg.asp?BoardID=19&filename=2006-1/200612614233720921.jpg][/url] [url=http://www.iptver.com/showimg.asp?BoardID=19&filename=2006-1/200612614233720921.jpg][/url][img]http://images.wangchao.net.cn/images/upload/images/lsdn/1181594152365.jpg[/img]   下面主要以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 [url=http://www.yesky.com/key/1057/596057.html]Integer[/url]   ' 通过RFC接口远程运行SAP内部函数RFC_CUSTOMER_GET  ' 赋要调用的SAP内建函数名  Set GetCustomers = Functions.Add("RFC_CUSTOMER_GET")  GetCustomers.Exports("KUNNR") = "[url=http://www.yesky.com/key/4978/604978.html]0000[/url]000103" ' 向函数入口赋值(客户代码)  ' 向函数入口赋查询表名称  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接口开发技术。 本文程序VB6工程文件包:[url=http://www.iptver.com/download/share/20051016_SAP_RFC_Example_VB.rar]http://www.iptver.com/download/share/20051016_SAP_RFC_Example_VB.rar[/url]
󰈣󰈤
 
 
 
>>返回首页<<
 
 热帖排行
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
©2005- 王朝网络 版权所有