SAP接口编程-RFC系列05 : Table作为输出参数
来源:互联网 发布:电脑一维码识别软件 编辑:程序博客网 时间:2024/04/30 14:33
Table参数作为输出参数
SAP大量使用Table作为参数,表达二维的数据。Table可以作为输入参数,也可以作为输出参数。我们首先来看看Table作为输出参数的用法。
添加TableFactory控件的引用
为了使用Table接收数据,需要使用tableFactory控件。控件为wdtaocx.ocx,Windows 7下默认的路径为:
C:\Program Files (x86)\SAP\FrontEnd\SAPgui。
TableFactory的数据读取
Table是一个二维的形式,读取的方法由多种。详细介绍读者可以参考PA教材 BIT525。
按单元格方式读取
oTable.Value(x, y)
因为列有名称,对于列来说,也可以用列名,比如说y列的名称为CODE,则表示为
oTable.Value(x, “CODE”)
按行方式读取
oTable.Rows.Item(x)表示x行
oTable.Rows.Item(x).Value (y) 表示x行y列的值
或者用简写形式
oTable.Rows(x)表示x行
oTable.Rows(x).Value (y)
按列方式读取
oTable.Columns.Items(y)表示y列
oTable.Columns.Item(y).Value (x) 表示x行y列的值
或者用简写形式
oTable.Columns(y)表示y列
oTable.Columns(y).Value (x)
为了说明table参数的用法,我们以BAPI_COMPANYCODE_GETLIST函数为例。这个函数的table参数返回SAP系统已经创建的公司代码清单。
Option ExplicitDim sapLogon As SAPLogonCtrl.SAPLogonControlDim sapConn As SAPLogonCtrl.ConnectionPublic Sub Logon() Set sapLogon = New SAPLogonControl Set sapConn = sapLogon.NewConnection sapConn.Logon 0, FalseEnd SubPublic Sub Logoff() If sapConn.IsConnected = tloRfcConnected Then sapConn.Logoff End IfEnd SubPublic Sub GetCoCdList() Dim functions As SAPFunctionsOCX.SAPFunctions Dim fm As SAPFunctionsOCX.Function Dim cocdDetail As SAPTableFactoryCtrl.Table Call Logon Set functions = New SAPFunctions Set functions.Connection = sapConn ' FM加入Functions集合 Set fm = functions.Add("BAPI_COMPANYCODE_GETLIST") '调用 fm.Call '得到Table参数 Set cocdDetail = fm.Tables("COMPANYCODE_LIST") ' 打印出公司代码的名称 Dim row As Integer For row = 1 To cocdDetail.RowCount Debug.Print cocdDetail.Value(row, "COMP_NAME") Next Call LogoffEnd Sub
因为cocdDetail是一个二维表,所以使用遍历的方式取得所有公司代码的列表。为了更具一般性,我们可以写一个通用的routine,将internal table输出到Excel单元格。
Public Sub WriteTable(itab As SAPTableFactoryCtrl.Table, sht As Worksheet) Dim col As Long ' column index Dim row As Long ' row index Dim headerRange As Variant '在Excel中根据itab的header大小,类型为Variant数组 Dim itemsRange As Variant '在Excel中根据itab的行数和列数,类型为Variant数组 If itab.RowCount = 0 Then Exit Sub '------------------------------------------------- ' 取消Excel的屏幕刷新和计算功能以加快速度 '------------------------------------------------- Application.ScreenUpdating = False Application.Calculation = xlCalculationManual ' 清除cells的内容 sht.Cells.ClearContents '------------------------------ ' 将Table的Header写入Worksheet '------------------------------ ' 根据内表的列数,使用Range创建一个数组 Dim headerstarts As Range Dim headerends As Range Set headerstarts = sht.Cells(1, 1) Set headerends = sht.Cells(1, itab.ColumnCount) headerRange = sht.Range(headerstarts, headerends).Value ' 将内表列名写入数组 For col = 1 To itab.ColumnCount headerRange(1, col) = itab.Columns(col).Name Next ' 从数组一次性写入Excel,这样效率较高 sht.Range(headerstarts, headerends).Value = headerRange '------------------------------- ' 将Table的行项目写入Worksheet '------------------------------- ' 根据内表的大小,使用Range创建数组 Dim itemStarts As Range Dim itemEnds As Range Set itemStarts = sht.Cells(2, 1) Set itemEnds = sht.Cells(itab.RowCount + 1, itab.ColumnCount) itemsRange = itab.Data ' 一次性将数组写入Worksheet sht.Range(itemStarts, itemEnds).Value = itemsRange '--------------------------------- ' 恢复Excel的屏幕刷新和计算 '--------------------------------- Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomaticEnd Sub
有了以上通用routine,程序可以简化为:
Public Sub GetCompanyCodeList() Dim functions As SAPFunctionsOCX.SAPFunctions Dim fm As SAPFunctionsOCX.Function Dim cocdDetail As SAPTableFactoryCtrl.Table If sapConnection Is Nothing Or sapConnection.IsConnected <> tloRfcConnected Then MsgBox "没有连接到目标SAP系统,请先建立连接!", vbExclamation Exit Sub End If Set functions = New SAPFunctions Set functions.Connection = sapConnection 'lonon成功后,sapConnection为SAP连接 ' FM加入Functions集合 Set fm = functions.Add("BAPI_COMPANYCODE_GETLIST") '调用FM fm.Call '通过Table参数获得company code details Set cocdDetail = fm.Tables("COMPANYCODE_LIST") ' Table输出至Sheet1 Call WriteTable(cocdDetail, Sheet1)End Sub
- SAP接口编程-RFC系列05 : Table作为输出参数
- SAP接口编程-RFC系列06 : Table作为输入参数
- SAP接口编程-RFC系列12 : Table Parameter作为输出参数
- SAP接口编程-RFC系列13 : Table Parameter作为输入参数
- SAP接口编程之 NCo3.0系列(04) : Table作为输出参数
- SAP接口编程之 NCo3.0系列(05) : Table作为输入参数
- SAP接口编程-RFC系列03 : RFC调用SAP函数
- SAP接口编程-RFC系列01 : RFC Hello World
- SAP接口编程-RFC系列11:C#语言调用RFC
- SAP接口编程 之 JCo3.0系列(03) : Table参数
- SAP接口编程-RFC系列04 : 动态调用SAP函数
- SAP接口编程-RFC系列02 : Connection对象
- SAP接口编程-RFC系列09 : 使用BAPI
- SAP接口编程-RFC系列15 : 调用自定义FM
- SAP接口编程-RFC系列08 : 获取SAP DDIC的数据字段
- SAP接口编程-RFC系列14 : 获取SAP DDIC的数据字段
- SAP接口编程-RFC系列07 : 通用的数据库表读取
- SAP接口编程-RFC系列10 : BAPI控件的DimAs方法
- Qt学习小记-NULL字符串和空(empty)字符串的区别
- sap JCO3.0安装缺少Microsoft Visual C++ 2005 Service Pack 1 Redistributable Package (KB973544)
- 放球模型
- 属性树提供的操作函数
- Android常用的adb命令
- SAP接口编程-RFC系列05 : Table作为输出参数
- 多线程学习-停止线程
- 最小次数(递归)
- uboot网卡移植
- hdu Oil Deposits
- 二维表只读功能的实现
- leetcode Pascal's Triangle
- (学习)C Primer Plus(1)
- 谈WinDbg之InternalCall的使用与实现