excel SAP RFC调用从vb返回RETURN参数中的“错误0”

vc6uscn9  于 2023-05-01  发布在  其他
关注(0)|答案(1)|浏览(118)

大家好,提前感谢。
我试图从VB中使用RFC调用SAP BAPI,但在获取调用结果时遇到了一些问题。
BAPI BAPI_GL_ACC_EXISTENCECHECK(来自总账模块)有COMPANYCODEGLACCTRETURN参数。
我写了这段代码来进行调用,我没有问题建立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
ujv3wf0j

ujv3wf0j1#

你需要把

Dim objReturn As Object
Set objReturn = objRfcFunc.imports("RETURN")

objRfcFunc.Call之前
也就是说,你必须在调用函数之前声明你从函数中导入了什么。我通常把它放在.exports()线旁边。

相关问题