RFC方式调用SAP函数

标签:
abapsap |
分类: ABAP |
RFC调用SAP函数的过程
RFC是Remote function
call,远程调用函数的意思。调用SAP函数代码基本上是模式的代码,区别在于每个函数的参数不一样。总体过程如下:
http://mmbiz.qpic.cn/mmbiz/Cicll4C565AwgSuEn7EV364XqnjdMt6jAwkqmlevuBJEjFTXmrETWmKjEULaYFAKG26o6LH1YJ4fYGOcGiaIDatg/0?wx_fmt=png
-
创建SAPLogonControl对象
-
通过SAPLogonControl.NewConnection()方法创建Connection对象
-
登陆到SAP
-
通过SAPFunctions.Add()方法创建Function对象
-
填充参数
-
函数调用
-
获取返回值
-
显示返回的结果
-
注销
我们以BAPI_COMPANYCODE_GETDETAIL函数为例,演示RFC方式调用过程和方法
SAP系统查看函数的参数
用事务码SE37查看函数的参数。输入参数只有一个:CompanyCodeId
http://mmbiz.qpic.cn/mmbiz/Cicll4C565AwgSuEn7EV364XqnjdMt6jA6KUI7vTstic4Eec8asyyLR1n0qNXbbRegQV3EgFs8p24eicYx8iaibD9RA/0?wx_fmt=png
输出参数有三个,都是structure型的
-
COMPANYCODE_DETAIL: company code detail
-
COMPANYCODE_ADDRESS: company code address
-
RETURN: SAP BAPI标准的返回值(结构型)
SAP系统测试函数
VBE添加对SAPFunctions控件的引用
方法不再赘述,参考上一篇。SAPFucntions控件的文件名为wdtfuncs.ocx,Windows 7 64位的默认路径:C:\Program Files (x86)\SAP\FrontEnd\SAPgui。
RFC调用代码
代码分为两个module, module1为SAP Connection
Option Explicit
Public sapLogon As SAPLogonCtrl.SAPLogonControl
Public sapConnection As SAPLogonCtrl.Connection
Public Sub Logon()
End Sub
Public Sub Logoff()
End Sub
Module2为RFC调用
Option Explicit
Public Sub GetCompanyCodeData()
End Sub
知识点
SAPFunctions集合
SAPFunctions集合也可以使用晚绑定,代码如下:
Dim functions As Object
Set functions = CreateObject(“SAP.Functions”)
Function对象的初始化
Function对象是通过SAPFunctions.Add()方法来创建和初始化的:
Dim fm As SAPFunctionsOCX.Function
Set 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.Structure
Dim i As Integer
Set coCdDetail = fm.Imports("COMPANYCODE_DETAIL")
For i = 1 To coCdDetail.ColumnCount
Debug.Print coCdDetail.ColumnName(i) & ":" & coCdDetail.Value(i)
Next