大家好,提前感谢。
我试图从VB中使用RFC调用SAP BAPI,但在获取调用结果时遇到了一些问题。
BAPI BAPI_GL_ACC_EXISTENCECHECK
(来自总账模块)有COMPANYCODE
、GLACCT
和RETURN
参数。
我写了这段代码来进行调用,我没有问题建立SAP连接(我使用SAP登录控制OLE/COM对象来完成这项工作),我试图进行RFC调用。
此外,在这种情况下,我打电话没有问题(似乎,不确定它...),因为RFC调用返回true并且没有异常。
但是,通过查看**objReturn
**对象/参数,其中有一个值“Error 0”。
我期待的是一个复杂的结构,如SAP中的BAPIRETURN对象或类似的东西,如果帐户不存在。
试图搜索与谷歌和SAP论坛,但我还没有找到一个真实的的解决方案,我的问题,所以在这里我问你所有,如果你有一些想法来解决这个问题(也许我只是打错了电话!!!我是SAP集成方面的新手。..).
顺便说一句,最后注解:在SAP端进行了大量的RFC_NO_AUTHORIZATION
之后,他们给了我一个SAP_ALL
/S_RFC
授权(有点像,不是SAPMaven),错误RFC_NO_AUTHORIZATION
消失了,但错误0没有返回
Dim sapConn As Object
Dim objRfcFunc As Object
Dim SAPMandante As String
Dim SAPUtente As String
Dim SAPPassword As String
Dim SAPLingua As String
Dim SAPApplicationServer As String
Dim SAPNumeroSistema As Variant
Dim SAPIDSistema As String
Dim SAPRouter As String
Dim FlagInsertLogin As Integer
Dim FlagLogin As Variant
On Error GoTo ErrorHandler
Set sapConn = CreateObject("SAP.Functions") 'Create ActiveX object
'Silent Logon
SAPMandante = "xxx"
SAPUtente = "yyyy"
SAPPassword = "zzzzzz"
SAPLingua = "IT"
SAPApplicationServer = "www.xxx.com"
SAPNumeroSistema = x
SAPIDSistema = "zzz"
SAPRouter = ""
FlagLogin = SilentLogin(sapConn, SAPMandante, SAPUtente, SAPPassword, SAPLingua, SAPApplicationServer, SAPNumeroSistema, SAPIDSistema, SAPRouter) 'IT WORKS, NO PROBLEM HERE
If FlagLogin = False Then
'Explicit Logon
If sapConn.Connection.logon(0, False) <> True Then
MsgBox "Cannot Log on to SAP", 16, "Query Interrupted"
sapConn.Connection.logoff
Set sapConn = Nothing
InsertCash = False
Exit Sub
End If
End If
'BAPI RFC Call
Set objRfcFunc = sapConn.Add("BAPI_GL_ACC_EXISTENCECHECK")
objRfcFunc.exports("COMPANYCODE") = "C100"
objRfcFunc.exports("GLACCT") = "0000000001" 'Inexistent
Rem *** BAPI CALL ***
If objRfcFunc.Call = False Then
ErrorMsg = objRfcFunc.Exception 'Message collection
MsgBox ErrorMsg, 16, "Errore"
sapConn.Connection.logoff
Exit Sub
else
Dim objReturn As Object
Set objReturn = objRfcFunc.imports("RETURN")
End If
1条答案
按热度按时间ujv3wf0j1#
你需要把
objRfcFunc.Call
之前也就是说,你必须在调用函数之前声明你从函数中导入了什么。我通常把它放在
.exports()
线旁边。