1

我正在尝试从 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 调用的最低访问权限是多少?

4

5 回答 5

1

这一切都在文档中。:-)

Java 连接器需要一些基本权限才能读取功能模块的元数据——否则它不知道如何为这个特定的后端系统编码和解码数据。DDIF_FIELDINFO_GET是该过程的一部分。

(必须记住,除了依赖于版本的更改外,许多结构都可以扩展或修改,因此即使您在不同系统中调用相同的功能模块,也不能保证结构完全相同。 )

于 2013-09-11T09:25:21.753 回答
1

RFC 调用有一个特定的授权对象。

在您的角色中,您将对象 S_RFC(RFC 调用 auth.check)添加到类 AAAB(auth.object,所有应用程序)中。你用对象'FUGR'和你想使用的功能组来填充它(一如既往,'*'是可能的,但推荐)

这将您的用户可以执行的 RFC 函数调用限制为您定义的列表。

另外,正如niccolo所说,您调用的功能模块必须启用RFC。

此外,abbaper 还可以使用 ST01 事务来获取有关用户对 RFC 调用的授权检查的系统跟踪,并获取您需要的功能模块列表。

于 2013-09-10T12:32:09.740 回答
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

于 2018-05-04T16:03:25.163 回答
0

在幕后,SAP 在一次 RFC 调用中进行多次调用。此外,SAP 会进行安全调用以确保您有权调用您正在调用的内容。它对任何功能模块调用执行此操作,而不仅仅是 RFC 调用。

我不知道 DDIF_FIELDINFO_GET 特别做什么——它可能是 SAP 为满足您的整体调用 RFC_SYSTEM_INFO 所做的调用之一。

此外,为了有资格作为 RFC 的一部分被调用,SAP 功能模块必须是“远程启用的”(可能在 SE37 中,但不要引用我的话)。

于 2013-09-09T18:47:12.743 回答
0

SAP 在以下注释中详细记录了几种使用场景所需的最低 RFC 用户授权:

于 2018-05-05T15:25:03.070 回答