1

大家好,提前感谢。

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

尝试用谷歌和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
4

2 回答 2

0

你需要把

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

objRfcFunc.Call

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

于 2012-08-09T14:15:26.540 回答