如何使用 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 需要一些名为 S
、OP
、REF_DOC_LO
和 REF_DOC_HI
的字段的参数。正如你在这里看到的:
但如果我实际使用这些参数,我会得到错误,基本上告诉我它们不存在。那么我是否只发送 REFDOCRANGE
参数中的数据?有谁知道应该如何格式化?
参数REFDOCRANGE
不是简单的值参数,它是BAPI_REF_DOC_RANGE
类型的结构体。该结构有几个字段,SIGN
、OPTION
、REF_DOC_LOW
和 REF_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 帐户)
我需要使用 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 需要一些名为 S
、OP
、REF_DOC_LO
和 REF_DOC_HI
的字段的参数。正如你在这里看到的:
但如果我实际使用这些参数,我会得到错误,基本上告诉我它们不存在。那么我是否只发送 REFDOCRANGE
参数中的数据?有谁知道应该如何格式化?
参数REFDOCRANGE
不是简单的值参数,它是BAPI_REF_DOC_RANGE
类型的结构体。该结构有几个字段,SIGN
、OPTION
、REF_DOC_LOW
和 REF_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 帐户)