【问题标题】:SAP RFC call returns "Error 0" in RETURN parameter from vbSAP RFC 调用在 vb 的 RETURN 参数中返回“错误 0”
【发布时间】:2012-08-07 15:31:59
【问题描述】:

大家好,提前致谢。

我正在尝试使用来自 vb 的 RFC 调用 SAP BAPI,但在获取调用结果时遇到了一些问题。 BAPI“BAPI_GL_ACC_EXISTENCECHECK”(来自总帐帐户模块)有两个参数, COMPANYCODE 和 GLACCT,以及一个 RETURN 参数。 我编写了这段代码来进行调用,并且建立 SAP 连接没有问题(我使用 SAP 登录控制 OLE/COM 对象来完成这项工作),并且我尝试进行 RFC 调用。
同样在这种情况下,我毫无问题地拨打电话(似乎,不确定......),因为 RFC 调用返回 true 并且没有异常。
但是,通过 objReturn 对象/参数查看,其中有一个值“错误 0”。 如果帐户不存在,我期待一个复杂的结构,如 SAP 中的 BAPIRETURN 对象或类似的东西。

试图用谷歌和SAP论坛搜索,但我还没有找到真正解决我的问题的方法,所以我在这里问大家是否有解决这个问题的想法(也许我只是做错了打电话!!!我是 SAP 集成的新手...)。

顺便说一句,最后说明:在 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

【问题讨论】:

    标签: excel sap bapi vba


    【解决方案1】:

    你需要放

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

    之前objRfcFunc.Call

    即在调用函数之前,您必须说明从函数中导入的内容。我通常把它放在.exports() 行旁边。

    【讨论】:

    • 谢谢,Smigs。我实际上无法登录 SAP - 我想这是 SAP 服务器的问题。我会尽快检查您的建议...
    • 你好。尝试在调用 RFC 之前设置 RETURN 对象,但没有任何变化,我再次在对象中得到“错误 0”。 objRfcFunc.Exports("COMPANYCODE") = "C100" objRfcFunc.Exports("GLACCT") = "0000000001" 'Inesistente Dim objReturn As Object Set objReturn = objRfcFunc.Imports("RETURN")
    • 这很有用:现在我在分配对象的那一刻,在 RFC 调用之前收到“错误 0”消息!错误在代码Set objReturn = objRfcFunc.Imports("RETURN") 中,但它真的很奇怪,因为BAPI_GL_ACC_EXISTENCECHECK 确实返回了 BAPIRETURN 类型的 RETURN 对象,我查看了 SAP 文档!
    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多