調(diào)用SAP FM的時(shí)候,如果table作為輸入?yún)?shù),調(diào)用前需要填充。本篇講述填充的方法,以RFC_READ_TABLE為例。
RFC_READ_TABLE用于讀取SAP數(shù)據(jù)庫表的結(jié)構(gòu)和數(shù)據(jù)。使用方法如下 IMPORTING QUERY_TABLE:讀取的表名 DELIMITER:輸出字段(DATA參數(shù))之間的分隔符 NO_DATA:輸入’X’時(shí),不向傳出表DATA輸出數(shù)據(jù) ROWSKIP:輸出的第一條數(shù)據(jù)的行號(hào)(從0開始) ROWCOUNT:從ROWSKIP開始,一共輸出的數(shù)據(jù)行數(shù)(0代表所有數(shù)據(jù)) TABLE: OPTIONS:表查詢條件,比如SKA1表,KTOPL = ‘Z900’表示查收Z900賬目表的會(huì)計(jì)科目數(shù)據(jù),留空 代表所有數(shù)據(jù)。 FIELDS:輸出的表字段,留空代表輸出所有字段。 DATA:輸出的數(shù)據(jù)記錄。
假設(shè)我們要讀取Z900賬目表有所有會(huì)計(jì)科目,并且只需要輸出KTOPL(賬目表)和SAKNR(會(huì)計(jì)科目)兩個(gè)字段
Public Sub Read_Table_SKA1()
Dim functions As SAPFunctionsOCX.SAPFunctions
Dim options As SAPTableFactoryCtrl.Table
Dim fields As SAPTableFactoryCtrl.Table
Dim data As SAPTableFactoryCtrl.Table
Call Logon
Set functions = New SAPFunctions
Set functions.Connection = sapConnection
Dim fm As SAPFunctionsOCX.Function
Set fm = functions.Add("RFC_READ_TABLE")
fm.Exports("QUERY_TABLE").Value = "SKA1" ' 要查詢的表'
fm.Exports("DELIMITER").Value = "," ' Data表要存儲(chǔ)的數(shù)據(jù)以逗號(hào)分割'
Set options = fm.Tables("OPTIONS")
Set fields = fm.Tables("FIELDS")
Set data = fm.Tables("DATA")
' 以下是表參數(shù)填充的方法'
' options表參數(shù)限定要選擇的數(shù)據(jù)'
options.FreeTable
options.AppendRow
options(1, "TEXT") = " KTOPL = 'Z900' " '第一行列名為TEXT的列增加選擇條件'
' fields表參數(shù)限定要輸出的列,如果不限定'
' 默認(rèn)輸出所有列'
' 我只想輸出KTOPL和SAKNR兩列'
fields.FreeTable
fields.AppendRow
fields(1, "FIELDNAME") = "KTOPL"
fields.AppendRow
fields(2, "FIELDNAME") = "SAKNR"
fm.Call
' 如果有Exception , 說明有錯(cuò)誤產(chǎn)生'
If fm.Exception <> "" Then
Debug.Print fm.Exception
Exit Sub
End If
' 將DATA輸出到立即窗口'
Dim row As SAPTableFactoryCtrl.row
Dim col As SAPTableFactoryCtrl.Column
' 按行讀取,DATA表只有一列'
For Each row In data.Rows
Debug.Print row.Value("WA")
Next
Call Logoff
End Sub
表參數(shù)填充的方法:
填充第一行第一列: sometable(1, 1) = “XXX”
或者根據(jù)列名:sometable(1, “FIELDNAME”) = “XXX”
因?yàn)閠able有一個(gè)RowCount屬性,我們總是可以將RowCount用于代碼中,增加靈活性。比如上面的代碼可以寫成:
fields.FreeTable
fields.AppendRow
fields(fields.RowCount, "FIELDNAME") = "KTOPL"
fields.AppendRow
fields(fields.RowCount, "FIELDNAME") = "SAKNR"