Сделать отчет SAP доступным через RFC

Один клиент хочет получить доступ к отчету SAP через RFC.

шаги:

  1. Стороннее приложение подключается к SAP через RFC
  2. RFC-вызов передается
  3. SAP запускает отчет
  4. 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.

Другие вопросы по тегам