【发布时间】:2023-03-24 02:07:01
【问题描述】:
假设其中一张 SAP 表中有 100 条记录,而我只想访问其中的 5 条。当我调用 BAPI 函数执行时,它会将所有 100 条记录带入内存,然后只有我可以对它们进行迭代。我想在执行 BAPI 函数之前将记录限制为 5。 我不能要求客户限制表本身的记录数,所以我使用 JCO lib 对其进行了编码。
【问题讨论】:
-
分享代码怎么调用BAPI,什么BAPI
假设其中一张 SAP 表中有 100 条记录,而我只想访问其中的 5 条。当我调用 BAPI 函数执行时,它会将所有 100 条记录带入内存,然后只有我可以对它们进行迭代。我想在执行 BAPI 函数之前将记录限制为 5。 我不能要求客户限制表本身的记录数,所以我使用 JCO lib 对其进行了编码。
【问题讨论】:
这样的功能必须在 BAPI 本身中实现。事实上,一些 BAPI 有一个 WHERE 子句,允许限制 BAPI 将返回的结果集。
但是“从外部”(即从 JCo 层)您不能影响 BAPI 将返回的结果。至少不是在如此精细的级别上:如果您调用返回数十个表的 BAPI(并花费大量时间从数据库),但您只对其中几个表感兴趣。然后您可以将其他表设置为“非活动”,后端的 RFC 层将只返回活动表的数据。 (如果 BAPI 以智能方式编程,它会预先确定哪些表是活动的,并为不活动的表跳过 SELECT 语句。)
这里有一些示例代码,它会停用名为“TABLE_NAME”的 BAPI 表:
JCoFunction myBapi = ...;
JCoParameterList tables = myBapi.getTableParameterList();
tables.setActive("TABLE_NAME", false);
// Now you can execute myBapi, and the backend system will not return
// data for the table named TABLE_NAME.
【讨论】: