SAP为我们提供了JAVA平台程序的连接库SAP JCO3,由此打通所有JAVA程序同SAP服务器的数据传递:
SAP也为我们提供了.net平台程序的连接库SAP NCO,由此打通WINDOWS平台程序同SAP服务器的数据传递:
SAP同外围系统连接,程序实现有两种方式。
第一种: 我们常用的,SAP服务器作为服务器端server,外围接口程序作为客户端client。 client端发起请求,调用SAP服务器中的RFC函数,实现所需要的操作或查询。
这种方式是由客户端发起的,源头在客户端产生,调用频率也是有客户端控制。 这种方式在本次项目中叫做“请求响应”模式。 即客户端发起请求,服务器响应。
客户端程序使用该方式,需要在客户端填入登陆SAP系统的用户,密码。 然后客户端程序自动登入SAP服务器,调用RFC函数。 该方式的代码网上很多。
第二种方式: 网上资料少,有一些场景是SAP服务器主动发起请求,比如做一个收货操作后,马上需要把这个信息通知外围系统。 而收货操作本身,我们不知道用户什么时
候去做这件事情。( 如果用第一种的方法,也可以实现,但是需要客户端不停的轮询服务器,如果轮询的次数太多,我们可能担心系统性能,如果轮询次数不多,可能又不能
马上做到服务器同外围系统的收货操作信息同步) 这个时候,需要SAP服务器作为客户端client, 外围程序作为服务器端server. 为什么这么说, 因为外围程序需要一直运行,
等待SAP服务器的请求 ,外围程序就像服务器那样一直工作。 这种模式在本次项目中称为“订约发布”模式。
SAP的中间件接口程序,是怎么来实现这中方式的呢?
实际上,SAP并不要求外围程序写一个正真的网络服务器,而是,首先使用client方式,长连接到SAP服务器, 然后基于这个长连接,RFC程序推数据给外围程序。
让我们来看看这种方式外围程序写法的参数文件:
从参数文件中可以看到, 外围程序作为server端,首先会使用A01.JCO.CLIENT中的参数部分,去做一个同SAP服务器的长连接,这个同第一种方式一致。
连接成功后,可以在SAP系统中用SMGW事务代码查看:
A01.JCO.SERVER参数部分才是SAP服务器推数据给外围程序的需要使用参数,在sm59中配置好“SAPJCO”,SAP ABAP程序中是这样使用的:
而使用前,还要建一个只有数据申明的空FUNCTION "ZMM_IF_FM016".
外围服务器程序就等SAP通过这个空的FUNCTION "ZMM_IF_FM016"推数据过来。
TAB1,TAB2,TAB3是SAP给外围程序的数据, 外围程序处理后,还可以通过RETURN返回SAP服务器信息。
SAP的JCO和NCO库,都可以在http://service.sap.com/connectors 中下载到,SAP提供了详细的说明,和代码例子。
本文只是主要讲清第二种方式, 开发时理解SAP 接口中外围程序作server方式,不同于正真的网络服务器,避免进入不必要的误区。