0

我有一个旧程序将一些数据从 Microsoft SQL 服务器数据库推送到 SAP。它使用 Microsoft .NET Data Provider for mySAP Business Suite 连接到 SAP,并且一直运行良好。

现在,作为改进计划的一部分,我被要求从 Microsoft 驱动程序迁移到新的 SAP .Net 连接器 3.0 版。由于我对任何 Microsoft 连接器和 SAP 连接器都没有任何经验,因此我从文档开始。尽管我认为我已经完成了作业,但我遇到了一个我无法解决或找不到任何相关信息的错误。

我的主要功能:

    log.Debug("Get the SAP destination")
    Dim destination As RfcDestination = RfcDestinationManager.GetDestination("SAP")

    log.Debug("Fetch the function metadata")
    Dim rfcFunction As IRfcFunction = destination.Repository.CreateFunction("Z_TEC_CAT")

    log.Debug("Set the import parameters")
    Dim am As RfcStructureMetadata = destination.Repository.GetStructureMetadata("ZTEC_CAT")
    Dim exportTable As IRfcTable = rfcFunction.GetTable("ZTEC_CAT")
    FillIrfTable(exportTable, invoices)

    log.Debug("Invoking the function Z_TEC_CAT")
    rfcFunction.Invoke(destination)


填充我必须发送给 SAP 的表的助手:

    Private Sub FillIrfTable(ByVal sapTable As IRfcTable, ByVal dt As DataTable)

    log.Debug("Started FillIrfTable")
    For Each row As DataRow In dt.Rows
        sapTable.Append()
        Dim index As Integer = 0
        Do While (index < dt.Columns.Count)
            Dim columName As String = dt.Columns.Item(index).ColumnName
            Dim columnValue = row.Item(index)
            sapTable.SetValue(columName, columnValue)
            index = (index + 1)
        Loop
    Next

    log.Debug("Completed FillIrfTable")

End Sub


当可导出变量为空时,我得到一个 NO_DATA 异常并且一切都很好,但是当表有记录时,它会抛出:

Failed calling SAP Function Module Z_TEC_CAT
SAP.Middleware.Connector.RfcAbapException: BDC_OPEN_ERROR
   at SAP.Middleware.Connector.RfcConnection.ThrowRfcErrorMsg()
   at SAP.Middleware.Connector.RfcConnection.RfcReceive(RfcFunction function)
   at SAP.Middleware.Connector.RfcFunction.RfcDeserialize(RfcConnection conn, IRfcIOStream stream)
   at SAP.Middleware.Connector.RfcFunction.RfcCallReceive(RfcConnection conn, IRfcIOStream stream, RFCID rid)
   at SAP.Middleware.Connector.RfcFunction.RfcCallReceive(RfcConnection conn)
   at SAP.Middleware.Connector.RfcFunction.Invoke(RfcDestination destination)


有谁知道会发生什么?任何建议将不胜感激。

谢谢,

4

1 回答 1

2

经过一周的抗争后,我发现了发生了什么,我认为发布它可能会帮助其他人不要花很多时间在上面。

看起来 SAP 连接器在调用中插入了一个空格(Microsoft 连接器没有),因此,SAP 系统无法映射我发送给它的参数(exportTable)并且失败了。

另一端的 SAP 程序员已经修改了函数,所以现在它知道空间并且一切正常。

于 2012-05-03T13:45:11.917 回答