我正在尝试从Java应用程序调用SAP函数RFC_SYSTEM_INFO。我正在使用JCo 3.0。我正在使用JCo文档提供的示例代码。
我得到了一个例外
Caused by: RfcException: [IA1|CZVBIIN101]
message: No RFC authorization for function module DDIF_FIELDINFO_GET.
Return code: RFC_SYS_EXCEPTION(3)
error group: 104
key: RFC_ERROR_SYSTEM_FAILURE
message class: 00
message type: X
message number: 341
message parameter 0: RFC_NO_AUTHORITY
据我的同事正在查看SAP日志(我对SAP一无所知,他知道),在调用函数RFC_SYSTEM_INFO之前,JCo进行了大约7次调用,其中一些需要“开发人员的权限”。那么,我们不明白为什么我们需要开发人员的权限才能进行这么简单的调用?为什么JCO拨打这么多电话而不是只拨打一个电话?
例如,我不明白为什么我们需要从模块DDIF_FIELDINFO_GET调用一个函数?我只想调用RFC_SYSTEM_INFO,而不是DDIF_FIELDINFO_GET。是否可以在不调用RFC_SYSTEM_INFO的情况下调用RFC_SYSTEM_INFO?
用户进行RFC调用所需的最低访问权限是什么?
答案 0 :(得分:1)
RFC调用有一个特定的授权对象。
在您的角色中,您将在类AAAB(auth。对象,所有应用程序)中添加对象S_RFC(RFC调用auth.check)。你用对象'FUGR'和你想要使用的功能组来填充它(一如既往,'*'是可能的,但 不 推荐)
这限制了用户可以对您定义的列表执行的RFC函数调用。
另外,正如niccolo所说,您调用的功能模块必须启用RFC。
此外,abbaper还可以使用ST01事务来获取用户对RFC调用的授权检查的系统跟踪,并获取所需的功能模块列表。
答案 1 :(得分:1)
It's all in the documentation.: - )
Java连接器需要一些基本权限来读取功能模块的元数据 - 否则它将不知道如何编码和解码此特定后端系统的数据。 DDIF_FIELDINFO_GET
是该过程的一部分。
(必须记住,除了依赖于版本的更改之外,还可以扩展或修改许多结构,因此即使您在不同系统中调用相同的功能模块,也无法保证结构完全正确同样的。)
答案 2 :(得分:1)
由于SAP已删除了vwegert在答案中提到的SAP文档,因此添加了通过“archive.sap.com”分散的可用信息来回答此问题。
要检查所需角色的参考JCO用户是 SAPJCF 。对许多人来说似乎有用的关闭角色是 SAP_BC_JSF_COMMUNICATION 。用户也应该没有对话授权。
参考文献:
https://archive.sap.com/discussions/thread/631020 https://archive.sap.com/discussions/thread/375125
答案 3 :(得分:0)
在幕后,SAP在一次RFC调用中进行多次调用。此外,SAP还会进行安全调用,以确保您有权调用您正在调用的内容。它为任何功能模块调用执行此操作,而不仅仅是RFC。
我不知道DDIF_FIELDINFO_GET特别做什么 - 它可能是SAP对其进行的调用之一满足您的整体调用RFC_SYSTEM_INFO。
另外,为了有资格作为RFC的一部分进行调用,SAP功能模块必须“远程启用”(可能在SE37中但不是引用我的话。)
答案 4 :(得分:0)
SAP在以下注释中详细记录了几种使用方案所需的最低RFC用户授权: