![](/img/trans.png)
[英]Reading TCURR table with RFC_READ_TABLE truncates the rate value
[英]RFC_READ_TABLE passing “options” and “Fields” parameters (c#)
需要帮助,我正在尝试使用 RFC_READ_TABLE 从 SAP 获取销售数据,但不知道如何将 OPTIONS 和 FIELDS 参数传递给 SAP。 这是我的应用程序的示例代码。
连接正常,执行后出现异常“DATA_BUFFER_EXCEEDED”
public void RFC_READ_TABLE()
{
try
{
ECCDestinationConfig cfg = new ECCDestinationConfig();
RfcDestinationManager.RegisterDestinationConfiguration(cfg);
RfcDestination dest = RfcDestinationManager.GetDestination("ABI_ERP");
RfcRepository repo = dest.Repository;
IRfcFunction fn = repo.CreateFunction("RFC_READ_TABLE");
fn.SetValue("QUERY_TABLE", "VBAP");
fn.GetTable("DATA");
fn.Invoke(dest);
var companyCodeList = fn.GetTable("VBAP");
var companyDataTable = companyCodeList.ToDataTable("VBAP");
dataGridView1.DataSource = companyDataTable;
}
catch (RfcBaseException x)
{
MessageBox.Show("Some problems in programe execution. Check entered data, and try again." +
"\n" +
"\n<SAP Remote Execution Error>" +
"\n" +
"\nAdditional Information on Error: " + x.Message, "Oops, Runtime Error");
}
}
RFC_READ_TABLE
不是用于读取销售订单数据的理想功能模块(它实际上是为在没有其他内容的情况下快速读取脏表而设计的)。 我会调查以下启用 RFC 的功能模块:
BAPI_SALESORDER_GETLIST
- 获取销售文件列表BAPISDORDER_GETDETAILEDLIST
- 阅读单个销售文档的详细信息如果您查看功能组2032
或销售和分销->销售-> 交易BAPI
销售订单,您会发现其他可能有帮助的功能。
你应该只定义你真正需要的列,比如在 SQL 中的SELECT
之后,即销售文档、项目和材料编号:
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_READ_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
子句,只需附加新的选项,如fileds。 我注意到, OR
在某些表上会导致一些性能问题。
设置函数的这两个属性后,您应该能够成功调用它。
使用 RFC_READ_TABLE 的“options”和“fields”表选项缩小查询范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.