如何使用 NSAPConnector 将需要的参数发送到 REFDOCRANGE?

How do I send the needed parameters to REFDOCRANGE using NSAPConnector?

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

所以使用 NSAPConnector,这就是我通常调用 SAP B 的方式API:

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_LOREF_DOC_HI 的字段的参数。正如你在这里看到的:

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

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

NSAPConnector 似乎并不真正支持复杂参数。我查看了来源,你只得到一个基本的 SapParameter class,它有一个名称和一个值。

在原生 SAP .Net Connector 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 Connector 3。您可以直接从 SAP 获取它(需要 SAP Marketplace 帐户)