技术开发 频道

智慧的连接实现对SAP系统的零代码集成

【IT168 专稿】

    本文以IBM WebShpere Adapter for SAP Software为例,简要介绍如何通过Adapter产品实现对SAP EIS系统的快速连接,实现对SAP系统的零code集成。

Part 1.简要介绍以及原理

    1.Adapters是什么,能干什么?两大功能。

    WebSphere Adapter是IBM对Java EE Connector Architecture(JCA)标准的实现。它提供了一种将已有企业信息系统基础设施与IBM WebSphere企业中间件集成的机制。

    WebSphere Adapter同时也实现了Enterprise MetaData Discovery(EMD)规范。通过提供一套基于向导图形界面工具,使用户能够快速、方便、准确的发现并导入目标系统的数据定义和交互协议,而不必编写代码。

    WebSphere Adapter提供的服务能够快速轻松的支持企业遗留应用程序、ERP、HR、CRM与供应链系统,帮助企业便利、高效地整合现有资源,使企业的信息系统整合架构具有更好的可扩展性。

    2.Adapter的架构

    下图为IBM WebShpere Adapter for SAP Software的工作示意图,由此我们可以看出,Adapter的作用实际就是简化用户对EIS的操作,使其透明。用户可以把与EIS交互的工作委托给Adapter,而用户只关心自己的也无逻辑以及如何使用不同的Adapter实现对现有系统的整合。

    3.为什么说是零code开发

    WebSphere Adapter符合JCA规范,其返回给上层程序的结果是便于管理的,因此无需在做特殊的处理即可直接使用其结果数据。而与EIS的交互有课以通过EMD和Runtime功能得以实现,因此对于一般的应用场景,无需再编写多余的code即可实现功能。

    对于不同EIS的集成整合,也可以通过IBM WebSphere Integration Developer(WID)以Business Process Execution Language(BPEL)的方式,通过配置BPEL节点以及很少code来进行整合。关于这部分内容的介绍,请关注后续文章。

    4.IBM WebShpere Adapters的两大功能

    A.EMD(Enterprise MetaData Discovery),开发阶段,通过EMD功能连接EIS,浏览、选择并且生成服务描述(service descriptions),以供runtime功能使用。

    B.Runtime,使用阶段,将EMD生成的服务描述项目(service descriptions)部署在runtime server,以供上层逻辑程序调用。

Part 2.功能展示

    下面我们就以IBM WebShpere Adapter for SAP Software的BAPI outbound功能为例,介绍如何使用Adapters。

    环境:

    IBM WebSphere Integration Developer(WID)6.2—— 基于Eclipse的开发工具,良好地支持IBM WebShpere Adapters。

    IBM WebSphere Process Server(WPS)6.2—— 基于IBM WebSphere Application Server,再此基础上提供了一些良好的业务逻辑支持。

    IBM WebShpere Adapters—— 包含多种Adapters产品,如SAP,Oracle E-Business Suite,PeopleSoft,Siebel Business Applications,JD Edwards EnterpriseOne等,用以连接不同的企业级ERP、HR、CRM系统。另外还包括一些通用技术的Adapters,如Email,FTC,JDBC,FlatFile等。

    1.EMD

    打开WebSphere Integration Developer(WID),默认视图为Business Integration。

    在左侧Business Integration Panel中右键单击鼠标->New->Other…,出现如下Panel。选择External Service,Next

    在选择External Service的Panel中,选择Adapters->SAP,Next

    6.2版本的WID中已经集成了对应版本的IBM WebSphere Adapter for SAP Software,请在这个Panel中选择一个Adapter。注:IBM WebSphere Adapter for SAP Software包含支持local transaction的和不支持local transaction的两个版本,我们可以根据实际的业务需要选择一个版本。关于local transaction的更多介绍,可以参考JCA规范的相应文档。我们在此选用不带local transaction支持的adapter(如图)。

    接下来,EMD会为我们生成一个Adapter的Connector project,此处我们可以为其指定一个名称或直接使用默认的project名称。另外EMD要求我们选择一个Target runtime,此处我们选择WebSphere Process Server v6.2。

    Next之后,EMD会要求我们选择dependency files。此处所谓的dependency files是指连接SAP EIS所需要的driver文件。我们知道,Java是通过JCo(SAP Java Connector)来连接SAP系统的,JCo的作用类似于JDBC driver,都是Java连接外部应用的driver。JCo是由SAP公司提供的,6.2版本的SAP Adapter支持2.x版本的Jco,当前推荐的稳定版本为JCo 2.1.8。除了一个jar包外(sapjco.Jar),还有另外两个binary文件(对于windows,它们是librfc32.dll和sapjcorfc.dll)需要提供。

    Next之后的Panel,EMD要求我们选择交互方式,只有入站(Inbound)和出站(Outbound)两种。入站和出站都是从Adapter的位置而言的,入站指的是进行入站操作时,EIS数据发生任何改变都会生成相应事件,适配器通过主动poll或者被动push,发现事件后查询相应EIS数据,将其发送到特定目的端;出站指的是进行出站操作时,应用程序通过适配器对EIS数据执行CRUD等操作,或者调用EIS提供的对外接口与服务。此处我们选择出站(Outbound)。

    Next之后,EMD要求我们输入SAP系统的连接信息,并且要求用户选择一个SAP Interface。SAP Adapter共支持11种不同的interface(Inbound+Outbound)以满足不同的业务需要。关于不同Interface各自侧重的功能,请参考IBM WebSphere Adapter for SAP Software的User Guide。此处我们选择BAPI(Outbound),输入完毕后选择Next。

    从接下来的Panel开始就是EMD的核心功能Object Discovery了,在此处EMD会通过用户的输入条件自动查找并筛选SAP上的对象并返回给用户,此过程省却了用户手动coding的的工作。对于SAPAdapter,EMD提供了两种搜索方式RFC(Remote Function Call)和BOR(Business Object Repository),RFC会根据用户的输入条件列出所有可用的Object(对于我们选的BAPI interface,EMD会列出BAPI function list),BOR会把结果以Functional group的形式返回。

    我们在此Panel中点击“Create or edit filter”按钮。

    之后会弹出一个要求用户输入Filter的Panel,我们可以根据BAPI的name或者description进行查找,支持通配符*。另外我们还可以指定返回结果的最大条数,以防返回结果数据量过大而耽误过多时间。

    我们在此输入BAPI的名称BAPI_CUSTOMER_GETDETAIL。点击OK。

    之后返回到刚才的Object Discovery Panel,点击RFC左侧的+号使其展开,EMD便会自动根据我们刚才输入的条件对SAPserver进行查询,很快就会找到我们输入的BAPI。我们选中这个BAPI,点击>按钮将其添加到Selected Object中。

    点击>按钮后会弹出一个配置这个BAPI的Panel,此处可以配置这个BAPI的可选参数,主要包括import,outport和tabel参数。另外还可以配置一些高级的属性,比如使用SAP中的field名称直接生成我们Adapter会用到的Business Object中的field名称,在默认情况下Adapter会对默认SAP中的field名称进行处理,它会结合每个field的description来生成Business Object中的field名称,以便于用户理解。具体信息请参考IBM WebSphere Adapter for SAP Software的User Guide。

    此处我们不进行配置,使用默认值,点击OK。

    这样,BAPI_CUSTOMER_GETDETAIL就添加好了,EMD返回到Object Discovery Panel。用户还可以重复刚才的过程添加多个BAPI。

    我们在此就不再添加其他BAPI了,直接点击Next。

    之后的Panel,EMD要求用户添加operation。EMD默认提供了CRUD四种operation,我们可以添加一个或多个operation,并为每个operation指定一个我们刚刚选择的BAPI。此处我们添加一个Retrieve operation,并将BAPI_CUSTOMER_GETDETAIL指定给它。

    实际上,四种operation的名字与真实的操作并无直接联系,选择比较好记住的名字只是为了开发方便不宜混淆。

    添加完operation后,我们再输入一个service operation的名称,任意起名。此处我们输入“Customer”。这个Panel上还有一些其他的高级功能,我们暂时不会用到,如需了解可参考User Guide。点击Next。

    之后的Panel我们再次输入SAP的连接信息。

    问:之前的EMD过程中我们已经输入过一次SAP的连接信息了,为何此Panel会再次要求我们输入?

    答:因为就像前面介绍过的那样,Adapter实际包括两部分主要功能,EMD和Runtime。之前我们输入的连接信息是EMD要用到的,用来进行对SAP上的Business Object进行搜索和生成Adapter要用到的Business Object(这就是我们到目前为止所体验的EMD功能)。在这个页面配置的SAP连接信息实际上是提供给Runtime用的,由于像BAPI_CUSTOMER_GETDETAIL这样的BAPI function是内置在SAP系统中的,用户如购买相同版本的SAP系统,这个BAPI应该是完全一样的,这样的话我们刚刚做的EMD生成的Business Object实际上也是可以用在另外一台同版本的SAP系统上的。如此设计是为了提供用户在开发上的便利,用户完全可以用一台备份SAP来进行Adapter的集成开发,从而不影响线上SAP系统的使用。当然此功能的前提是两台SAP系统的版本一致或至少保证BAPI_CUSTOMER_GETDETAIL的版本一致。

    再此我们使用相同的SAP连接信息。Next。

    之后我们新建一个Module保存刚才所做的工作,过程比较简单,就不再进行介绍了。

    至此,EMD功能完成,我们检查一下都生成了哪些Project。切换到J2EE试图,我们看到一共有5个Project生成了:

    CWYAP_SAPAdapter:Adapter的project,如我们多次运行EMD生成多个module,则可共用同一个adapter project。

    BAPI_OUTBOUND_GETDETAIL:EMD生成的核心Module,其中的.xsd文件即为Adapter为我们生成的Business Object文件。另外一些如.import和.wsdl文件等就是供runtime使用的一些配置文件。

    BAPI_OUTBOUND_GETDETAILAPP/EJB/Web:End point projects,实际就是Outbound的起点或者Inbound的终点。此处实际为一个EJB项目。这部分project实际并不属于Adapter,EMD生成他们实际是为了简化用户的开发,用户可以直接利用这些EJB项目植入自己的逻辑code。

    可以看到XSD格式的Business Object文件其实就是把SAP上的对象以xml格式(我们称这种格式为SDO)的形式表示出来。

    2.Runtime

    首先,添加一台WepSphere Process Server(WPS)作为runtime的Server。

    在Services Panel右键单击->New->Server。我们添加本地的WPS。

    成功添加完WPS后我们既可以部署刚才EMD生成的App project到这台Server上。

    WID为我们提供了出色的Test Component功能,我们可以用此功能来测试Runtime。右键单击SAPOutboundInterface->Test Component。

    在这里我们输入input data。对于BAPI_CUSTOMER_GETDETAIL,我们只需输入一个值CustomerToBeRequired=0000000001。然后点击Continue执行runtime操作。

    很快,结果返回。我们可以看到,这个BAPI的返回结果显示在了Return Parameters中(PostalCode、City、CountryKey等)。

    至此,Runtime调用完毕。我们看到,整个过程我们没有写一行code,却完成了对SAP上的BAPI_CUSTOMER_GETDETAIL的调用。除了我们刚刚看到的BAPI outbound功能,SAP Adapter还支持很多其他的Interface,结合具体的业务逻辑是用相应的Interface,可以大大简化用户的集成开发。用户需要做的只是连接上自己的客户代码,而与SAP的交互可以完全交给Adapter来完成。

参考资料

    WebSphere Adapters v6.2信息中心

    http://publib.boulder.ibm.com/infocenter/dmndhelp/v6r2mx/index.jsp?topic=/com.ibm.wbit.620.help.adapter.emd.ui.doc/topics/timpexpapps.html

    J2EE Connector Architecture 1.5规范

    http://java.sun.com/j2ee/connector/index.jsp

    Enterprise Metadata Discovery规范

    http://www.ibm.com/developerworks/cn/java/j-emd/

    Synchronize data between Siebel and SAP with WebSphere Adapters and WebSphere Process Server

    http://www.ibm.com/developerworks/websphere/library/techarticles/0701_chung/0701_chung.html

    WebSphere JCA Adapter开发入门

    http://www.ibm.com/developerworks/cn/websphere/library/techarticles/0706_dongqing/

0
相关文章