Ограничить количество записей, которые будут получены от SAP с использованием библиотеки JCO - PullRequest
0 голосов
/ 16 марта 2020

Предположим, в одной из таблиц SAP есть 100 записей, и я хочу получить доступ только к 5 из них. Когда я призываю к выполнению функции BAPI, она заносит в память все 100 записей, и тогда только я могу перебирать их. Я хочу ограничить записи до 5, прежде чем я выполню функцию BAPI. Я не могу попросить клиента ограничить количество записей в самой таблице, поэтому у меня есть код с использованием JCO lib.

1 Ответ

1 голос
/ 31 марта 2020

Функциональность, подобную этой, должна быть реализована в самом BAPI. Фактически, некоторые BAPI имеют предложение WHERE, которое позволяет ограничить результирующий набор, который будет возвращать BAPI.

Но «извне» (то есть со слоя JCo) вы не можете влиять на результат, который BAPI будет возвращение. По крайней мере, не на таком тонком уровне детализации: есть функция «выключения» всей таблицы, которую можно использовать, если вы вызываете BAPI, который возвращает десятки таблиц (и тратит много времени на выбор данных для них из базы данных), но вас интересуют только некоторые из этих таблиц. Затем вы можете установить другие таблицы как «неактивные», а уровень RF C бэкэнда будет возвращать только данные для активных таблиц. (И если BAPI запрограммирован интеллектуальным способом, он заранее определяет, какие таблицы активны, и пропускает операторы SELECT для неактивных.)

Вот пример кода, который деактивирует таблицу BAPI. с именем "TABLE_NAME":

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.
...