SAP接口编程-RFC系列03 : RFC调用SAP函数
来源:互联网 发布:信息技术软件介绍ppt 编辑:程序博客网 时间:2024/04/30 08:37
RFC方式调用SAP函数
RFC调用SAP函数的过程
RFC是Remote function call,远程调用函数的意思。调用SAP函数代码基本上是模式的代码,区别在于每个函数的参数不一样。总体过程如下:
- 创建SAPLogonControl对象
- 通过SAPLogonControl.NewConnection()方法创建Connection对象
- 登陆到SAP
- 通过SAPFunctions.Add()方法创建Function对象
- 填充参数
- 函数调用
- 获取返回值
- 显示返回的结果
- 注销
我们以BAPI_COMPANYCODE_GETDETAIL函数为例,演示RFC方式调用过程和方法
SAP系统查看函数的参数
用事务码SE37查看函数的参数。输入参数只有一个:CompanyCodeId
输出参数有三个,都是structure型的
- COMPANYCODE_DETAIL: company code detail
- COMPANYCODE_ADDRESS: company code address
- RETURN: SAP BAPI标准的返回值(结构型)
SAP系统测试函数
输入公司代码0001
运行,获得返回值
VBE添加对SAPFunctions控件的引用
方法不再赘述,参考上一篇。SAPFucntions控件的文件名为wdtfuncs.ocx,Windows 7 64位的默认路径:C:\Program Files (x86)\SAP\FrontEnd\SAPgui。
RFC调用代码
代码分为两个module, module1为SAP Connection
Option ExplicitPublic sapLogon As SAPLogonCtrl.SAPLogonControlPublic sapConnection As SAPLogonCtrl.ConnectionPublic Sub Logon() Set sapLogon = New SAPLogonCtrl.SAPLogonControl Set sapConnection = sapLogon.NewConnection() Call sapConnection.Logon(0, False)End SubPublic Sub Logoff() If sapConnection.IsConnected = tloRfcConnected Then sapConnection.Logoff End IfEnd Sub
Module2为RFC调用
Option ExplicitPublic Sub GetCompanyCodeData() Dim functions As SAPFunctionsOCX.SAPFunctions Dim fm As SAPFunctionsOCX.Function ' BAPI_COMPANYCODE_GETDETAIL的三个输出参数,都是structure, ' 对VB来说这些是输入参数,获得SAP返回的信息 Dim ret As SAPFunctionsOCX.Structure '返回值 Dim coCdDetail As SAPFunctionsOCX.Structure '公司代码信息 Dim addrData As SAPFunctionsOCX.Structure '地址数据, 本示例例没有使用 ' Step 1: 登陆SAP Call Logon ' 如果连接成功,调用BAPI If sapConnection.IsConnected <> tloRfcConnected Then MsgBox "连接失败!." Exit Sub End If ' Step 2: 创建functions(集合) Set functions = New SAPFunctionsOCX.SAPFunctions Set functions.Connection = sapConnection ' Step 3 : 将BAPI加到SAPFunctions Set fm = functions.Add("BAPI_COMPANYCODE_GETDETAIL") ' Step 4: 填充参数, importing parameter对VB来说是输出参数 fm.Exports("COMPANYCODEID").Value = "0001" ' Step 5: 调用FM fm.Call ' 确定没有Exceptions If fm.Exception <> "" Then Exit Sub End If ' Step 6: 获取函数返回的信息 Set ret = fm.Imports("RETURN") 'return参数是一个结构 Set coCdDetail = fm.Imports("COMPANYCODE_DETAIL") ' Step 7: 展示return Values ' 因为RETURN是一个structure(结构),用遍历的方法得到structure各column的值 Dim i As Integer For i = 1 To ret.ColumnCount '从1开始 Debug.Print ret.ColumnName(i) & ":" & ret.Value(i) Next Debug.Print "===================================" ' 分割 ' 展示SAP返回的公司代码明细(company code detail) For i = 1 To coCdDetail.ColumnCount Debug.Print coCdDetail.ColumnName(i) & ":" & coCdDetail.Value(i) Next ' Step 8: Logoff Call LogoffEnd Sub
知识点
SAPFunctions集合
SAPFunctions集合也可以使用晚绑定,代码如下:
Dim functions As ObjectSet functions = CreateObject(“SAP.Functions”)
Function对象的初始化
Function对象是通过SAPFunctions.Add()方法来创建和初始化的:
Dim fm As SAPFunctionsOCX.FunctionSet fm = functions.Add("BAPI_COMPANYCODE_GETDETAIL")
SAP函数的参数
SAP函数参数分为单值型、结构型和表类型,对于VBA来说,SAP定义的输入函数是VB的输出参数,本例演示了单值参数的赋值方法:
fm.Exports(“COMPANYCODEID”).Value = “0001”
其他类型的填充方法后面再做介绍。
SAP的输出参数,对于VBA来说是输入参数,大多情况下,输出参数是结构和表类型。如果是结构类型,通过循环的方式获取列名和每列的值。
列名:someStructure.ColumnName(index)
列值:someStructure.Value(i) (使用field索引值,注意column从1开始,而不是0)
列值:someStructure.Value(“FieldName”) (使用列名)
Dim coCdDetail As SAPFunctionsOCX.StructureDim i As IntegerSet coCdDetail = fm.Imports("COMPANYCODE_DETAIL")For i = 1 To coCdDetail.ColumnCount Debug.Print coCdDetail.ColumnName(i) & ":" & coCdDetail.Value(i)Next
- SAP接口编程-RFC系列03 : RFC调用SAP函数
- SAP接口编程-RFC系列04 : 动态调用SAP函数
- SAP接口编程-RFC系列11:C#语言调用RFC
- RFC调用sap接口
- SAP接口编程-RFC系列15 : 调用自定义FM
- SAP接口编程-RFC系列01 : RFC Hello World
- PB调用SAP的RFC函数接口
- C#调用sap rfc 接口
- sap的rfc接口调用
- PB调用SAP RFC函数
- java调用SAP RFC函数
- Java 调用SAP RFC函数
- java调用SAP RFC函数
- sap调用外部rfc函数
- MULE 连接sap rfc接口开发二:调用rfc接口
- SAP接口编程-RFC系列02 : Connection对象
- SAP接口编程-RFC系列05 : Table作为输出参数
- SAP接口编程-RFC系列06 : Table作为输入参数
- 配置samba服务器
- Listview加载网络数据、图片并跳转传值
- java正则表达式纪录
- 线段树 FZU 2201 序列操作
- CSS你可能还不知道的一些知识点
- SAP接口编程-RFC系列03 : RFC调用SAP函数
- MYSQL 操作入门
- 从17到same:UGC社区的利益激励机制
- phantomjs 的安装和使用
- HDU 1561 The more, The Better(树形DP入门)
- UIButton的ImageView 添加animation,动画执行完毕后变暗
- 理解 Java 的 GC 与 幽灵引用
- iOS数组去重总结
- Area Folding