Вызов существующего отчета SAP в ABAP с подавлением GUI
Я хочу представить функциональность программы SAP (транзакции) как BAPI. Мне нужно вызвать отчет и указать фильтры диапазона, чтобы графический интерфейс был обойден.
У кого-нибудь есть рабочий пример конструкции SUBMIT ... WITH ... ABAP или другие предложения о том, как выполнить то, что мне нужно сделать?
4 ответа
Вот рабочий пример:
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 (одно поле), где я использую IN, это оператор SELECT_OPTIONS (диапазон)
Вот простой пример того, как заполнить диапазон:
REFRESH lrbelnr.
lrbelnr-sign = 'I'.
lrbelnr-option = 'EQ'.
lrbelnr-low = HBKORM-belnr.
CLEAR lrbelnr-high.
append lrbelnr.
Если вы хотите подавить эту функцию как BAPI, вы должны обернуть ее в модуль удаленного вызова функций (RFC). Просто внедрите функциональный модуль RFC. В зависимости от того, как реализован отчет, он может использовать объекты ABAP, которые также могут быть вызваны из вашей реализации RFC. Учитывая этот случай у вас есть довольно хорошее решение. Всякий раз, когда отчет корректируется, также ваш BAPI будет отражать изменения. Если это стандартная программа от SAP, которую нельзя обернуть, подумайте о том, чтобы скопировать ее в свое пространство имен и настроить ее. Тем не менее, это может создать определенные трудности, когда SAP выполняет обновление с помощью стека пакетов поддержки, и вы этого не осознаете. Вывод двух методов различен. Кроме того, если вы хотите вызвать его извне, нет ничего другого, кроме как реализовать RFC-модуль.
Отправить отчет не может вернуть значения за пределы. Отчеты всегда предназначены только для функций графического интерфейса, а не для обмена данными. Если в вашем отчете используются опции выбора, вам необходимо каким-то образом реализовать эту функцию "вручную" в вашем RFC, поскольку эти операторы нельзя использовать внутри модулей RFC. Обычно я пытался бы переработать отчет, модульно оформить его и поместить информацию о выборе в центральный класс или, возможно, другой функциональный модуль, который можно вызвать из отчета и вашего функционального модуля BAPI. Фильтры, о которых вы говорите, не могут быть автоматически внедрены в RFC. Вы должны реализовать эти диапазоны вручную. Предупреждение, которое появляется, не может быть подавлено, если вы делаете RFC-вызов из удаленной системы, и появляется всплывающее окно с предупреждением, вы заканчиваете коротким замыканием. Поэтому вы должны переработать отчет и заново реализовать его для своих нужд.
Если вы просто хотите обойти это с помощью планирования заданий, создайте вариант и запланируйте отчет с этим вариантом, но я полагаю, что это не то решение, которое вы ищете.
Вы можете использовать встроенный BAPI, также просто напишите "Range" и нажмите F4.
Вы можете заключить отчет в сеанс BATCH INPUT и выполнить его внутри функции. Единственным недостатком является то, что вам нужно перезаписывать BATCH INPUT каждый раз, когда вы меняете отчет.