SAP接口編程之 RFC系列(06) : Table作為輸入?yún)?shù)

調(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"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容