一位客户希望通过RFC访问SAP报告。
步骤:
- 第三方应用程序通过RFC连接到SAP
- RFC呼叫被传输
- SAP运行报告
- SAP返回报告
如何在SAP内部实现该部分?
我使用PyRFC作为客户端库。但AFAIK,这对这个问题来说根本不重要。此问题仅涉及SAP内部的服务器部分。
在这种情况下,应通过RFC提供报告RM07MLBS。
你需要一个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格式的列表,您可以将其转换为您想要的内容。
另一种方法是将报告结果发送到spool,获取spool并将其转换为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的功能模块触发报告的可能性有限。否则,请尝试通过功能模块触发事务(基于您的报告(。同时检查:https://archive.sap.com/discussions/thread/811196
我认为你无法将报告结果回复给你的第三方系统。
从咨询的角度来看,我建议定期运行报告,将结果写入表中,通过启用RFC的功能模块从表中(从第三方系统(获取数据。
最好的方法是将您的报告封装在启用了RFC的定制功能模块中,然后允许他们运行该RFC功能模块。