Сделать отчет SAP доступным через RFC
Один клиент хочет получить доступ к отчету SAP через RFC.
шаги:
- Стороннее приложение подключается к SAP через RFC
- RFC-вызов передается
- SAP запускает отчет
- SAP возвращает отчет.
Как это можно реализовать в SAP?
Я использую PyRFC в качестве клиентской библиотеки. Но AFAIK это не имеет значения для этого вопроса. Этот вопрос касается только серверной части внутри SAP.
В данном случае это отчет RM07MLBS, который должен быть доступен через RFC.
4 ответа
Вам нужен ABAPer, чтобы сделать функцию для вас, я думаю, что нет пути без нее.
Если у вас есть ABAPer, просто сделайте что-то вроде этого:
SUBMIT <REPORT_NAME> ... EXPORTING LIST TO MEMORY AND RETURN.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = t_listobj.
CALL FUNCTION 'LIST_TO_ASCI'
TABLES
listasci = t_ascilist
listobject = t_listobj.
Теперь у вас есть список в формате ASCII, вы можете преобразовать его в то, что вы хотите.
Другой способ - отправить результат отчета в спул, получить его и конвертировать в HTML/PDF.
Для преобразования Spool вы можете использовать следующие функции:
RSPO_RETURN_ABAP_SPOOLJOB
RSPO_RETURN_SPOOLJOB_DAT
RSPO_RETURN_SPOOLJOB_HTML
В идеальном мире вы должны иметь логику отчета, инкапсулированную в abap-классе или выделенном функциональном модуле, и использовать ее в качестве основы как для вашего отчета, так и для вызовов RFC. Но если это стандартный отчет SAP, а сами SAP не были достаточно хороши для предоставления указанного функционального модуля, у вас может не быть этой опции.
Я не думаю, что это лучшее решение для вашего запроса, а просто добавить еще один вариант к уже упомянутым в других ответах: коммерческий продукт Theobald Xtract Universal может выполнять отчеты и возвращать результаты, используя несколько доступных типов назначения. Xtract - это служба Windows, которая предлагает подключение к нескольким целевым типам баз данных, а также поток результатов на основе http. Это не дешево, и, по сути, он может подключаться только к системам на основе SAP Netweaver в качестве источника данных (по крайней мере, S/4 уже поддерживается). Целевые направления должны быть приобретены дополнительно, но, по крайней мере, не для каждой системы, только для каждого типа назначения (Oracle, MySQL, MSSQL...).
https://theobald-software.com/en/xtract-universal/
Xtract Universal использует ряд клиентских функциональных модулей, чтобы выполнить отчет в целевой системе, перехватить выходные данные и вернуть их, по существу, в виде текстовой стены. Вам придется анализировать этот результат самостоятельно, вы не получите хорошую предварительно проанализированную таблицу с данными в ней.
Просто чтобы убедиться, что нет никаких недоразумений о возможном конфликте интересов: я не работаю в Theobald, но мы платный клиент и используем Xtract для наших собственных операций извлечения данных. Он очень прост в использовании, может быть выполнен в сценариях, но, как уже было сказано, просто выполняет эту работу.
Лучший способ сделать это - обернуть ваш отчет в специальный функциональный модуль с поддержкой RFC, а затем предоставить им доступ для запуска этого функционального модуля RFC.
Насколько я знаю, возможность запуска отчета через функциональный модуль с поддержкой rfc ограничена. В противном случае попробуйте инициировать транзакцию (на основе вашего отчета) через функциональный модуль. Также проверьте: https://archive.sap.com/discussions/thread/811196
Я не думаю, что вы можете отправить результат отчета в вашу стороннюю систему.
С точки зрения консультирования я бы рекомендовал периодически запускать отчет, записывать результаты в таблицу, извлекать данные из таблицы (из сторонней системы) через функциональный модуль с поддержкой RFC.