RFC“读取表传递”;选项“;及;“字段”;参数(c#)

RFC“读取表传递”;选项“;及;“字段”;参数(c#),c#,abap,sap-dotnet-connector,C#,Abap,Sap Dotnet Connector,需要帮助,我正在尝试使用RFC_READ_表从SAP获取销售数据,但不知道如何将选项和字段参数传递给SAP。这里是我的应用程序的示例代码 连接正在工作,执行后,我有一个异常“超出数据缓冲区” public void RFC\u READ\u TABLE() { 尝试 { ECCDESTIONCONFIG cfg=新ECCDESTIONCONFIG(); RfcDestinationManager.RegisterDestinationConfiguration(cfg); RfcDestinat

需要帮助,我正在尝试使用RFC_READ_表从SAP获取销售数据,但不知道如何将选项和字段参数传递给SAP。这里是我的应用程序的示例代码

连接正在工作,执行后,我有一个异常“超出数据缓冲区”

public void RFC\u READ\u TABLE()
{
尝试
{
ECCDESTIONCONFIG cfg=新ECCDESTIONCONFIG();
RfcDestinationManager.RegisterDestinationConfiguration(cfg);
RfcDestination dest=RfcDestinationManager.GetDestination(“ABI_ERP”);
RfcRepository repo=目的地存储库;
IRfcFunction fn=repo.CreateFunction(“RFC_READ_TABLE”);
fn.SetValue(“查询表”、“VBAP”);
fn.可获取(“数据”);
fn.调用(dest);
var companyCodeList=fn.GetTable(“VBAP”);
var COMPANYDATABLE=companyCodeList.TODATABLE(“VBAP”);
dataGridView1.DataSource=公司数据表;
}
捕获(RFCBASEX异常)
{
MessageBox.Show(“程序执行中存在一些问题。请检查输入的数据,然后重试。”+
“\n”+
“\n”+
“\n”+
“\n有关错误的其他信息:”+x.消息,“Oops,运行时错误”);
}
}

使用RFC\u READ\u表的“选项”和“字段”表选项缩小查询范围

RFC\u READ\u TABLE
不是用于读取销售订单数据的理想功能模块(它实际上是为在没有其他功能的情况下快速读取脏表而设计的)。我将研究以下启用RFC的功能模块:

  • BAPI\u SALESORDER\u GETLIST
    -获取销售文档列表
  • BAPISDORDER\u GETDETAILEDLIST
    -阅读单个销售文档的详细信息

如果您查看功能组
2032
或交易
BAPI
中的销售和分销->销售->销售订单,您会发现其他可能有帮助的列。

您应该只定义您真正需要的列,如SQL中的
选择
之后的列,即销售文档、物料和物料编号:

IRfcTable fieldsTable = fn.GetTable("FIELDS");
fieldsTable.Append();
fieldsTable.SetValue("FIELDNAME", "VBELN"); //Sales Document
fieldsTable.Append();
fieldsTable.SetValue("FIELDNAME", "POSNR"); // Sales Document Item
fieldsTable.Append();
fieldsTable.SetValue("FIELDNAME", "MATNR"); // Material number
如果不这样做,调用将失败,因为超出了数据缓冲区,正如您所提到的。这是因为
RFC\u READ\u TABLE
函数中的
DATA
结构属于
TAB512
类型,这意味着每行最多只能包含512个字符。您查询的表(
VBAP
)中组合的所有列的内容长度约为1500个字符

然后您还希望筛选表,类似于SQL中的
WHERE
子句

IRfcTable options = fn.GetTable("OPTIONS");
options.Append();
options.SetValue("TEXT", "VBELN = '000000000' AND POSNR = '000000'");
options.Append();
options.SetValue("TEXT", " OR VBELN = '000000001' AND POSNR = '000001'");
在这里,您还需要小心,因为每个选项文本的最大长度应为72个字符。如果需要多个或更长的
WHERE
子句,只需附加新选项,如filed。 我注意到,
会导致某些表出现一些性能问题

设置函数的这两个属性后,您应该能够成功地调用它。

函数的可能重复项
IRfcTable options = fn.GetTable("OPTIONS");
options.Append();
options.SetValue("TEXT", "VBELN = '000000000' AND POSNR = '000000'");
options.Append();
options.SetValue("TEXT", " OR VBELN = '000000001' AND POSNR = '000001'");