SAP JCo - Server在前端工作站

时间:2017-12-06 20:40:38

标签: java sap jco

我需要创建一个程序,它驻留在客户端PC上,从SAP LOGON执行,接收一些RFC请求,返回数据并终止。

我一直在关注如何实现JCo服务器的本教程:

https://blogs.sap.com/2017/08/25/sap-jco-server-example/

我根据教程配置了jco连接属性。我的程序被执行,但SAP无法向其发送任何RFC请求,并在超时时结束。

我注意到我的程序使用以下参数执行:

  

/H/gd9.company.com,sapgw02,87945336,IDX = 4

我想这是SAP告诉我RFC连接的配置值。我的意思是,我不应该让它们静态(比如教程中的配置文件),而是使用参数中的值。

第一个应该是主持人(jco.server.gwhost),虽然我不明白为什么用/H/准备结束。她的第二个可能是jco.server.gwserv

但是其他两个参数是什么?我应该用它们以某种方式配置RFC连接吗?

3 个答案:

答案 0 :(得分:1)

在SM59中,您可以设置类型为" T"的目的地。以几种不同的方式:

  • 注册服务器(带有程序ID)
  • 启动服务器(启动可执行文件的名称)。这有几种不同的风格:从应用程序服务器主机开始,在网关上启动,在前端PC上启动,以及其他一些,如果我没记错的话。

在第一种情况下("注册服务器"),连接已经存在(它是由服务器程序创建的,当在给定的程序ID下注册时),并且SAP系统只是发送任何RFC请求通过此开放连接获得此目的地。

在第二种情况(启动服务器)中,机制完全不同。 SAP系统首先生成唯一ID(CPIC会话ID),告诉网关开始侦听具有该ID的传入连接,然后启动给定的可执行文件并告诉它打开具有该ID的连接。当网关报告,具有该ID的某人确实打开了连接时,SAP系统最终通过它发送RFC请求。可执行文件以几种不同的方式启动,具体取决于" flavor"目的地:通过fork("在网关上启动"),通过远程shell("在给定的应用服务器主机上启动")或通过发送可执行文件的名称和启动参数通过当前打开的DIAG连接返回SAPGui,连接SAPGui与当前的ABAP端用户会话。然后,SAPGui使用给定的参数启动可执行文件("从前端PC&#34开始;)。

正如Trixx已经说过的那样:JCo3只支持注册的服务器,但不支持启动的服务器。如果您需要该类型的RFC服务器(例如,因为您希望通过SAPGui在前端PC上启动它),则需要使用NetWeaver RFC库编写C / C ++程序或使用NCo3编写.NET程序。 NCo3和NW RFC库都为启动的服务器提供必要的功能。 (参见他们的文档。)

答案 1 :(得分:0)

JCo 3.0不支持启动的RFC服务器程序,只支持已注册的程序,其中启动计划来自Java端。

您不会将此启动RFC服务器方案与JCo一起使用。

只有一个解决方法可以想象,启动一些非Java程序,如命令shell脚本,其目的只是启动JCo服务器程序,然后在网关上使用一些预定义的程序ID注册自己。之后,您可以使用ABAP端的第二个目标,该目标配置为使用此注册的RFC程序ID。 不太好但是目前唯一的办法就是你需要坚持使用Java。

编辑(2018年1月10日):
我认为你得到的四个参数是:

  1. GWHOST(SAP网关主机以SAProuter字符串为前缀)
  2. GWSERV(SAP网关服务作为符号服务名称)
  3. CONVID(正在使用的CPIC会话ID)
  4. IDX(指定正在使用的某个SAP内部数据结构的CPIC连接索引)
  5. JCo 3.0中没有API传递这些值,特别是参数号。但是,这需要启动RFC服务器程序方案。与已注册的RFC服务器程序方案的区别在于,对于已启动的RFC服务器程序,网关已经打开了CPIC连接,并且需要使用此现有CPIC连接,即RFC服务器必须将其自身附加到此现有CPIC连接上。连接。

答案 2 :(得分:-2)

我不知道IDX=4意味着什么,但前三个参数看起来像是设置JCOServer(主机,端口,程序ID)所需的值。我从来没有设置过TCP目的地之外的其他东西,所以我可能错了,但你可以尝试用这三个参数设置一个JCOServer,然后看看接下来会发生什么。我想SAP会创建一个动态TCP目标,并等待您以这种方式连接。之后会调用RFC。

RFC调用的问题在于,您需要为该特定RFC设置具有适合的存储库元数据的RFC服务器,因此很可能在设置服务器之后SAP系统仍然无法发送数据。 SAP端的错误消息应该告诉您尝试了哪些RFC调用,或者使用跟踪消息(您可以设置的另一个属性)设置JCOServer,以找出线路上发生的事情""并从那里继续,即创建元数据,在连接之前将其添加到服务器的存储库等。

BTW:您可能需要使用数字端口值而不是别名(此处为sapgw02),因为与JCo 2不同,映射并不总是与JCo 3一起使用(它没有&#39 ;或者使用JCo 2来处理异国情调的价值观

相关问题