在 Message Broker中使用 SAP JCO 连接 SAP 系统
http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0811_yinrui/0811_yinrui.html
实质上,WBI SAP Adapter 的内部实现机制就是使用 SAP JCO 来连接 SAP,在 Message Broker 与 SAP Adapter 的交互过程中,SAP Adapter 接收到 Message Broker 发送的请求消息后,会通过 SAP JCO 类库来调用 SAP 应用系统提供的 RFC 函数,从而实现与 SAP 应用的交互。SAP Adapter 是符合 WBI Adapter Framework 的统一的连接 SAP 的适配器,有很多的设计、开发和测试工具作支持,它屏蔽了调用 SAP 应用系统 RFC 函数的技术细节,对与 SAP 系统的双向交互做了较好的封装,并使用 JMS 标准协议作为交互方式。但相对于直接使用 JCO 来说,WBI SAP Adapter 需要专门的开发环境和运行环境,其配置步骤和开发过程较为复杂,对开发人员的要求较高。如何在 Message Broker 中使用WBI SAP Adapter, 请参考附录相关文章;本文以下部分将详细介绍如何在 Message Broker 中直接使用 SAP JCO 来集成 SAP 应用,给开发者提供一个简单快速的解决方案。
为实现员工请假登记这个功能,SAP 开发人员在 SAP HR 系统中开发了名字为 ZRFC_LEAVE 的 RFC 函数,ESB开发人员在 Message Broker 开发消息流,使用 SAP JCO 调用该 RFC 函数,最后将消息流发布为 Web 服务并由 OA 系统调用。
下面我们将根据这个简单的业务场景讲述具体的配置和开发过程,示例中用到的主要工具和类库以及对应的版本是:
Message Broker toolkit 6.02
Message Broker 6.003
SAP JCO 2.18
在该例中使用的Message Broker版本是6.0,但本文解决方案可适用于Message Broker V6.0、V6.1及以上版本。
定义好 WSDL 之后,就可以在 Message Broker Toolkit 中开发实现该 WSDL 的消息流了。首先新建消息流项目 MsgFlowSample 和消息集项目 MsgSetSample,在新建 MsgSetSample 消息集的步骤中,选择基于 WSDL 新建消息定义文件,导入上面创建的 WSDL 后即可生成对应的消息定义文件。
按照下图4所示在 MsgFlowSample 项目中实现消息流,其中 HTTP Input 节点接受请求的SOAP 消息,TraceInput 将请求消息记录到文件中。如果执行失败,TryCatch 节点会将异常信息路由到 catch 终端,TraceError 记录异常信息,Throw 节点将异常消息抛出。Call SAP JCO 是一个 Java Compute 节点,我们通过在 Java 代码中使用 SAP JCO 调用 SAP RFC 并将返回结果传递到后面的 Construct Reply 节点来构造返回的 SOAP 响应消息。HTTP Reply 节点返回 SOAP 响应消息给请求者。
图 4. 在Message Broker实现的消息流
在消息流编辑器中,双击 Call SAP JCO 这个 Java Compute 节点就会打开实现该节点的 Java类文件,在下面的步骤中,我们将在这个 Java 类中编写 Java 代码来使用 SAP JCO 类库调用 SAP HR 提供的 RFC 函数 ZRFC_LEAVE。要调用 SAP 的 RFC 函数,首先需要定义连接 SAP 系统的相关参数,例如 IP 地址、登陆用户名和密码等等,为了较好地维护这些参数,我们在一个配置文件 SAPHRLogon.properties 中指定这些参数名值对,在消息流运行时该 Java Compute 节点会读取该配置文件获取这些参数来创建 SAP 系统的连接。清单1是在配置文件SAPHRLogon.properties 中定义的连接 SAP 的参数,例如客户机编号,主机地址、用户名和密码,具体参数可咨询 SAP 管理员。
清单 1. SAP连接配置文件
?
回页首
结论
本文介绍了一种在 Message Broker 消息流中使用 SAP JCO 连接 SAP 系统的方法,通过在 Message Broker 中直接使用 SAP JCO 类库调用 SAP 应用提供的 RFC 函数,为企业开发人员集成 SAP 应用系统提供了一个简单直接的解决方案。本文以具体实例讲述了使用 SAP JCO 同步调用 SAP 应用中最常见的业务应用程序编程接口(BAPI) RFC 函数的方式,同时 SAP JCO 也支持通过 IDoc 中间文件方式实现对 SAP ALE 接口的异步调用,有兴趣的读者可以自行研究。