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

时间:2012-08-07 15:31:59

标签: excel-vba sap bapi vba excel

大家好,并提前谢谢。

我正在尝试使用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

2 个答案:

答案 0 :(得分:0)

你需要把

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

objRfcFunc.Call

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

答案 1 :(得分:0)