我創建了一個宏來使用 BAPI 從 SAP 表中讀取資料BBP_RFC_READ_TABLE。
如果我使用 FILTER VIEW,它會成功編譯并運行單個引數:
objOptTab(objOptTab.RowCount, "TEXT") = "EBELN EQ '12345'"
但是,代碼的目標是能夠將字串陣列作為 textfilter 傳遞,因此該ekknPurchaseOrders變數存在。由于 SAP 使用 SQL 查詢并與通用 SQL 語言共享很多語法,我假設我可以在下面作為文本過濾器傳遞:
ekknPurchaseOrders = "('12345', '67890', '101112')"
這就是為什么下面一行首先出現的原因:
"EBELN IN " & ekknPurchaseOrders'
使用EBELN IN "..運行代碼/執行 BAPI 會導致 SQL_PARSE 錯誤,因為語法無效。
關于我可以使用什么語法將多個值的集合傳遞給 EBELN TEXT FILTER 的任何建議?
請注意,發生錯誤時,TEXT FILTER 語法從“EQ”更改為“IN”。通過使用多個值ekknPurchaseOrders和不改變的語法“IN”回傳用于在第一元件的值ekknPurchaseOrders。
Public Const worksheetName As String = "EKKN"
Public Sub GetEKPOtable()
Dim funcs As SAPFunctions
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets(worksheetName)
'LOG IN TO SAP
Set sapConn = CreateSapFunctions()
If sapConn Is Nothing Then
Exit Sub
End If
'DECLEARE FUNCTION EXPORTS
Set objRfcFunc = sapConn.Add("BBP_RFC_READ_TABLE")
Set objQueryTab = objRfcFunc.Exports("QUERY_TABLE")
Set objDelimiter = objRfcFunc.Exports("DELIMITER")
Set objRowCount = objRfcFunc.Exports("ROWCOUNT")
'SET VALUES
objRowCount.Value = "99999999"
Set objOptTab = objRfcFunc.Tables("OPTIONS")
Set objFldTab = objRfcFunc.Tables("FIELDS")
Set objDatTab = objRfcFunc.Tables("DATA")
objQueryTab.Value = "EKPO" 'TABLE
objDelimiter.Value = "|" 'DELIMITER
objOptTab.FreeTable
'OPTION FIELD SAP STATEMENT
objOptTab.AppendRow
objOptTab(objOptTab.RowCount, "TEXT") = "EBELN IN " & ekknPurchaseOrders 'FILTERS FOR VIEW
objFldTab.FreeTable
'OUTPUT FIELDS
objFldTab.AppendRow
objFldTab(objFldTab.RowCount, "FIELDNAME") = "EBELN"
objFldTab.AppendRow
objFldTab(objFldTab.RowCount, "FIELDNAME") = "EBELP"
objFldTab.AppendRow
objFldTab(objFldTab.RowCount, "FIELDNAME") = "EMATN"
objFldTab.AppendRow
objFldTab(objFldTab.RowCount, "FIELDNAME") = "ELIKZ"
'IF CALL FAILES, EXIT
If objRfcFunc.Call = False Then
MsgBox objRfcFunc.Exception
End If
Dim objDatRec As Object
Dim objFldRec As Object
'WRITE RESULT TO WS
Dim lo As ListObject
Set lo = ws.ListObjects(outputTable)
Call ClearTableData(lo)
For Each objDatRec In objDatTab.Rows
For Each objFldRec In objFldTab.Rows
ws.Cells(objDatRec.Index 8, objFldRec.Index 7) = Mid(objDatRec("WA"), objFldRec("OFFSET") 1, objFldRec("LENGTH"))
Next
Next
End Sub
uj5u.com熱心網友回復:
使用 EBELN IN ".. 運行代碼/執行 BAPI 會導致 SQL_PARSE 錯誤,因為語法無效。
WHERE IN 語法完美適用于 RFC_READ_TABLE 和 BBP_RFC_READ_TABLE,您的問題出在別處。
對代碼進行故障排除時需要注意的三個時刻:
OPTIONS引數對您可能命中的單行有 72 個字符的限制。檢查您的條件長度并根據需要將其拆分為多行。OPTIONS行不“喜歡”缺少空格所以不要放過字符
而不是線
objOptTab(objOptTab.RowCount, "TEXT") = "EBELN IN ('050112','060201')
推這個
objOptTab(objOptTab.RowCount, "TEXT") = " EBELN IN ( '050112', '060201' )
- 并且不要忘記在您的 中轉義值
ekknPurchaseOrders,每個值都應該用單引號括起來!
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329197.html
上一篇:如何強制重繪導航控制元件?
