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

时间:2016-03-03 14:34:37

标签: c# sap bapi sap-connector

我需要使用SAP的BAPI_BILLINGDOC_GETLIST API来获取一些发票。看了documentation后,我只看到一个参数。但在与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_LOREF_DOC_HI。正如你在这里看到的那样:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

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

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

在原生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-library确实缺少对复杂参数的支持,我建议切换到标准SAP .Net Connector 3.您可以直接从{{3 (需要SAP Marketplace帐户)