Сделать это рекурсивно
function findId(obj, id, currentPath = "") {
// Go through every object in the array
let i = 0;
for (let child of obj) {
// If id matches, return
if (child.id == id) return currentPath + `[${i}]`;
// Else go through the children, if we find anything there, return it
let next = findId(child.child, id, currentPath + `[${i}]['child']`);
if (next) return next;
i++;
}
// We didn't find anything
return null;
}
Вот рабочий пример:
SUBMIT SAPF140
TO SAP-SPOOL "optional"
SPOOL PARAMETERS print_parameters "optional"
WITHOUT SPOOL DYNPRO "optional (hides the spool pop-up)"
VIA JOB jobname NUMBER l_number "optional"
AND RETURN "optional - returns to the calling prog"
WITH EVENT = REVENT
WITH BUKRS IN RBUKRS
WITH BELNR IN lRBELNR
WITH GJAHR IN RGJAHR
WITH USNAM = SY-UNAME
WITH DATUM = SAVE_DATUM
WITH UZEIT = SAVE_UZEIT
WITH DELDAYS = RDELDAYS
WITH KAUTO = 'X'
WITH RPDEST = SAVE_PDEST
WITH TITLE = TITLE.
Все операторы "WITH" касаются полей выбора на названной программе, где я использую =, это - оператор PARAMETER (единственное поле), где я использую В нем, оператор SELECT_OPTIONS (диапазон)
Вот простой пример того, как заполнить диапазон:
REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.
Если Вы хотите подавить эту функциональность как BAPI, Вам необходимо обернуть эту функциональность в модуль Remote Function Call (RFC). Просто реализуйте функциональный блок RFC. В зависимости от того, как реализован отчет, он может использовать объекты ABAP, которые также можно вызывать из вашей реализации RFC. В этом случае у вас есть неплохое решение. Всякий раз, когда отчет корректируется, ваш BAPI также будет отражать изменения. В случае, если это стандартная программа из SAP, которую невозможно обернуть, подумайте о копировании ее в свое пространство имен и настройке. Тем не менее, это может вызвать некоторые неудобства, когда SAP выполняет обновление через Support Package Stack, а вы этого не осознаете. Вывод этих двух методов отличается. Кроме того, если вы захотите вызвать его извне, то нет ничего другого, кроме как реализовать модуль RFC.
Отчет о передаче не может вернуть значения извне. Отчеты всегда предназначены только для GUI-функций, а не для обмена данными. В случае, если в отчете используются выбранные опции, необходимо каким-то образом реализовать эту функцию "вручную" в КСФ, так как эти утверждения нельзя использовать внутри модулей КСФ. Обычно я пытаюсь переделать отчет, модулизировать его и поместить информацию о выборе в центральный класс или, может быть, в другой функциональный блок, который может быть вызван из отчета и вашего BAPI функционального блока. Фильтры, о которых вы говорите, не могут быть реализованы в RFC автоматически. Вы должны реализовать эти диапазоны вручную. Появляющееся предупреждение не может быть подавлено, если вы делаете вызов RFC с удаленной системы и всплывающее окно с предупреждением заканчивается коротким дампом. Поэтому вам нужно переработать отчет и переделать его под свои нужды.
Если вы просто ищете возможность обойти его через планирование заданий, создайте вариант и запланируйте отчет с этим вариантом, но я полагаю, что это не то решение, которое вы ищете.
.