0

我需要使用BAPI_BILLINGDOC_GETLISTSAP 的 API 来获取一些发票。查看文档后,我只看到了一个参数。但是在咨询了 SAP 的人之后,那个参数就像一个参数的集合。

因此,使用 NSAPConnector,这就是我通常调用 SAP BAPI 的方式:

using (var connection = new SapConnection("SAP"))
{
    connection.Open();

    var command = new SapCommand("BAPI_BILLINGDOC_GETLIST", connection);

    command.Parameters.Add("REFDOCRANGE", salesOrderNumber);

    resultDataSet = command.ExecuteDataSet();
}

但正如你可以想象的那样,它不起作用。实际的 BAPI 需要一些名为SOPREF_DOC_LO和的字段的参数REF_DOC_HI。正如你在这里看到的:

在此处输入图像描述

但是如果我实际使用这些参数,我会得到错误,基本上告诉我它们不存在。那么我只是发送REFDOCRANGE参数中的数据吗?有谁知道应该如何格式化?

4

1 回答 1

1

参数REFDOCRANGE不是一个简单的值参数,它是一个 type 的结构体BAPI_REF_DOC_RANGE。该结构有几个字段,SIGN、和。您可以通过首先检索对结构的引用,然后设置各个字段值来设置这些字段。OPTIONREF_DOC_LOWREF_DOC_HIGH

看起来 NSAPConnector 并不真正支持复杂的参数。我查看了源代码,您只得到了一个具有名称和值的基本 SapParameter 类。

在本机 SAP .Net 连接器 3 中,这看起来像这样(有点伪代码,未经测试):

IRfcFunction fnc = destination.Repository.CreateFunction("BAPI_BILLINGDOC_GETLIST");
IRfcStructure param = fnc.GetStructure("REFDOCRANGE");
param.SetValue("SIGN", "BT");
param.SetValue("REF_DOC_LOW", salesOrderNumberLow);
param.SetValue("REF_DOC_HIGH", salesOrderNumberHigh);

fnc.Invoke(destination);

IRfcTable tabDetail = fnc.GetTable("BILLINGDOCUMENTDETAIL");
foreach(var row in tabDetail)
{
....   
}

如果我没有遗漏任何内容并且 NSAPConnector 库确实缺少对复杂参数的支持,我建议切换到标准 SAP .Net 连接器 3。您可以直接从SAP获取它(需要 SAP Marketplace 帐户)

于 2016-03-03T16:53:25.467 回答