【问题标题】:How to execute RFC function on explicit destination using JCo?如何使用 JCo 在显式目标上执行 RFC 功能?
【发布时间】:2018-06-28 11:54:01
【问题描述】:

我想使用 JCo 在显式目标上执行 RFC 函数。

我已经修改了现有的 JCo StepByStepClient.java 并且 我能够 执行 RFC 函数的方式与使用 Sap GUI “se37”的方式完全相同,当“RFC 目标系统”字段为 。 为了我的演示目的,我调用了“TH_USER_LIST”函数。

然后我使用程序 ID“MY_PROG_ID”注册了我自己的 JCo 服务器,然后使用“注册服务器程序”=“MY_PROG_ID”的“sm59”添加了 tcpip 目标“MY_DEST”。

我现在可以使用带有 RFC 目标 sys = "MY_DEST" 的“se37”在我的 JCo 服务器上调用 TH_USER_LIST

我希望能够使用 JCo 客户端在我的 JCo 服务器上执行相同的 TH_USER_LIST 实现,但我仍在调用默认实现并且不是我的注册程序。

我以为我只需要将目标分配为像下面这样的新属性,但它没有帮助

connectProperties.setProperty(DestinationDataProvider.JCO_ASHOST, "appserver");
connectProperties.setProperty(DestinationDataProvider.JCO_SYSNR,  "00");
connectProperties.setProperty(DestinationDataProvider.JCO_CLIENT, "000");
connectProperties.setProperty(DestinationDataProvider.JCO_USER,   "JCOTESTER");
connectProperties.setProperty(DestinationDataProvider.JCO_PASSWD, "JCOTESTERSPASSWORD");
connectProperties.setProperty(DestinationDataProvider.JCO_LANG,   "en");

请指教

【问题讨论】:

    标签: sap jco saprfc


    【解决方案1】:

    如需调用已注册的外部 RFC 服务器程序,请阅读

    用于所需的目标配置参数。

    您需要指定 jco.client.tpname,而不是 jco.client.ashostjco.client.sysnr jco.client.gwhostjco.client.gwserv。此外,您可能需要 ABAP 系统的另一个目的地来查询所需的 RFC 元数据。此目的地需要指定为属性 jco.destination.repository_destination。

    【讨论】:

    • 完美,我搞定了,例如JCO_ASHOST=>JCO_GWHOST, JCO_SYSNR=>"sapgw"+JCO_GWSERV, JCO_TPNAME=program_id, JCO_REPOSITORY_DEST=原始目的地名称。非常感谢!!!
    • 很高兴听到这个消息。除了使用需要适当维护etc/services 的符号服务名称"sapgw00",您还可以直接为jco.client.gwserv 指定端口号"3300"
    【解决方案2】:

    DestinationDataProvider.JCO_ASHOST 和 DestinationDataProvider.JCO_SYSNR 是指定目标系统的正确属性。 但仅设置属性是不够的。 您还必须从 JCoDestinationManager.getDestination("MYDESTNAME") 获取具有这些属性的新 JCoDestination 对象,然后使用此目标执行调用。

    顺便说一句,我建议将所有这些文件创建内容从您的 Java 程序中丢弃,并直接手动编辑适当的 MYDESTNAME.jcoDestination 属性文件以进入主题。

    【讨论】:

    • 正如我上面所说,我让它工作了,例如调用默认的“RFC 目标系统”。但是,我想使用 JCo 调用 另一个 实现,就像我 可以 使用带有 不同“RFC 目标系统”的 se37。我尝试将“RFC target sys”的值设置为DestinationDataProvider.JCO_DEST(以及其他一些),但仍然使用 JCo 调用默认实现。
    • “RFC 目标系统”不是 RFM 参数。它是 SE37 的功能,意味着从 SM59 中选择和使用指定的目的地,而不是本地执行。所以这是我的例子中的“MYDESTNAME”。如果要在不同的目标上执行 RFM,请为 MYDESTNAME.jcoDestination 指定不同的 JCO_ASHOST,或者使用具有不同连接参数集的不同目标名称。没有其他办法。你想要的东西是不可能的,也没有任何意义。为什么我要调用系统 A 并告诉它在系统 B 上执行它?在这种情况下,可以直接寻址系统 B。
    • 能否详细说明“使用具有不同连接参数集的不同目标名称”?究竟应该有什么不同以及如何不同?我的客户现在只打开一个目的地,最终执行默认实现而不是我注册的程序。不知道系统 B 是什么意思,只有一个 SAP 和一个注册的服务器程序。
    • 哦,现在我看到你在我回答后编辑了你的问题。现在这是一个完全不同的问题。
    • 关于调用已注册的外部 RFC 服务器程序(而不是 ABAP 系统)的修改后问题,请参阅我的其他答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多