大家好,并提前谢谢。
我正在尝试使用vb中的RFC来调用SAP BAPI,但是我遇到了一些问题来获取调用的结果。
BAPI“BAPI_GL_ACC_EXISTENCECHECK”(来自总账科目模块)有两个参数,
COMPANYCODE和GLACCT,以及RETURN参数。
我写了这段代码来进行调用,我没有问题建立SAP连接(我使用SAP Logon Control OLE / COM对象来完成工作),我试图进行RFC调用。
同样在这种情况下,我没有问题地进行调用(似乎,不确定它...),因为RFC调用返回true并且没有例外。
但是,查看 objReturn 对象/参数,其中包含值“Error 0”。
我期待像SAP中的BAPIRETURN对象这样的复杂结构,或者如果该帐户不存在则类似的东西。
尝试使用Google和SAP论坛进行搜索,但我没有找到解决问题的真正解决方案,所以我在这里问你所有人是否有一些想法来解决这个问题(也许我只是做错了打电话!!!我是SAP集成的新手......)。
BTW,最后的注释:经过SAP方面的大量RFC_NO_AUTHORIZATION后,他们给了我一个SAP_ALL / S_RFC授权(有点,而不是SAP专家),错误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
答案 0 :(得分:0)
你需要把
Dim objReturn As Object
Set objReturn = objRfcFunc.imports("RETURN")
前objRfcFunc.Call
即。在调用之前,必须说明从函数导入的内容。我通常把它放在.exports()
行旁边。
答案 1 :(得分:0)