我需要使用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期望某些字段的参数称为S
,OP
,REF_DOC_LO
和REF_DOC_HI
。正如你在这里看到的那样:
但如果我真的使用这些参数,我会收到错误,基本上告诉我它们不存在。那么我只是在REFDOCRANGE
参数中发送数据吗?有谁知道应该如何格式化?
答案 0 :(得分:1)
参数REFDOCRANGE
不是简单的值参数,它是BAPI_REF_DOC_RANGE
类型的结构。该结构包含多个字段SIGN
,OPTION
,REF_DOC_LOW
和REF_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帐户)