我需要创建一个程序,它驻留在客户端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连接吗?
答案 0 :(得分:1)
在SM59中,您可以设置类型为" T"的目的地。以几种不同的方式:
在第一种情况下("注册服务器"),连接已经存在(它是由服务器程序创建的,当在给定的程序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日):
我认为你得到的四个参数是:
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来处理异国情调的价值观