精通面向服务的体系结构:BPEL 指南

使用 BPEL 将 PeopleSoft CRM 与 Oracle 电子商务套件集成
作者:Lawrence Pravin

使用 BPEL 将 PeopleSoft 8.9 CRM 与 Oracle 应用程序 11i 集成的分步方法

 查看完整的“BPEL 指南”索引

 

本文相关下载:
 示例代码
 Oracle BPEL 业务流程管理器

2006 年 1 月发表

许多企业都具有许多跨不同部门、地理位置或分支机构的异类应用程序组合。尽管可以使用多个 ERP 系统来满足业务单元的要求,但它们实际上会导致数据碎片。集成这些系统比较复杂,并且通常采用专用方式进行处理;尽管如此,公司仍投入了大量的资源来集成遍布多个 ERP 系统的信息,以便作出更好的业务决策。

BPEL 提供了一个以流程为中心的标准方法来集成不同的系统。Oracle 的 BPEL 流程管理器是 Oracle 融合中间件(用于提供面向服务的体系结构 (SOA))中的一个重要工具,它支持 Microsoft、IBM、SAP 以及 BEA 所支持的行业标准 BPEL 规范,并且被广泛认为是一个用于降低集成项目的成本、复杂性和不灵活性的企业蓝图。

在 BPEL 指南的这一部分中,我将介绍一种使用 BPEL 将 PeopleSoft 8.9 CRM 与 Oracle 应用程序集成的方法。具体而言,通过一个示例业务情景,您将了解如何配置 PeopleSoft 以将它的模块公开为 Web 服务,以及如何配置 Oracle BPEL 流程管理器以便与 Oracle 应用程序交互。

 

实用情景

在一个典型的订单管理业务情景中,订单被输入到 CRM 系统中,并通过后端 ERP 履行订单。在本示例中,我们将 PeopleSoft 用作前端应用程序来管理营销、销售和服务操作,并将 Oracle 电子商务套件用作 ERP(订单管理、库存和财务)。此处考虑的业务流程是一个报价-订单流程。

本业务流程的一部分 — 报价和订单输入 — 在 CRM 系统中执行,而订单履行在 ERP 系统中执行。要优化内部操作,需要将整个跨应用程序的报价-订单业务流程自动化。

以下是此业务流程集成中提供的功能(参见图 1):

PeopleSoft 中的销售订单创建
  • 在 PeopleSoft 中,可以通过将报价转换为销售订单或直接通过 Order Capture 屏幕创建销售订单。
  • 提交时,系统将检查所需信息并将状态更改为 OPEN;否则,状态将为 HOLD。
  • 此销售订单流程将调用订单信息并将该信息提交给集成流程。随后将调用 BPEL 流程管理器。
  • BPEL 流程管理器将消息数据转换为 Oracle ERP 订单管理模块所要求的格式。
  • 销售订单创建过程发生在 Oracle ERP 应用程序中,并把订单确认传播给 PeopleSoft。
Oracle ERP 中的 ATP 检查
  • 在订单创建流程中,销售人员可能想要检查材料的可用性以确定交货日期。
  • PeopleSoft CRM 将同步调用 ERP 应用程序,使用商品/产品可用性查询组件获取现有的可用数量。
  • BPEL 流程管理器将此 ATP 检查请求传给 Oracle ERP。
  • Oracle ERP 将检查库存中特定商品的可用数量。它将相关的可用性详细信息返回给 BPEL 流程管理器。
  • BPEL 流程管理器将此 ATP 响应信息传递给 PeopleSoft CRM。根据该操作,将向客户承诺实际的交货日期。
将订单状态更新从 Oracle ERP 传播给 PeopleSoft CRM
  • 将销售订单传播给 ERP 应用程序后,将在 ERP 中下订单,将确认发送给 BPEL 流程,并随后传播给 PeopleSoft CRM 系统(订单状态将在该系统中更改为“In Process”)。
  • Oracle ERP 将不断传播订单状态的更改。ERP 中的此状态映射到 CRM 中的等价状态。

 


图 1


下面我们将着重介绍订单创建步骤。 该设计时 viewlet 演示了实际的配置和执行过程。有关该流程中其他步骤的详细信息,请参考 Oracle 应用程序集成指南

解决方案概述

至此,您了解了实用的业务流程,下面我们将了解如何在体系结构级别实现它。图 2 提供了一般使用 Oracle BPEL 流程管理器作集成平台集成 PeopleSoft CRM 与 Oracle 应用程序所需的组件。

 


图 2


企业集成点 (EIPS) 是使 PeopleSoft 应用程序能够与第三方系统和其他 PeopleSoft 软件无缝工作的 Web 服务连接。在 PeopleSoft CRM 中提交订单时,PeopleSoft 中的 EIP 将它转换为 XML 格式。随后,将该订单 XML 传递给附加的 PeopleCode 方法 ( WSDL_ORDER)。(PeopleCode 是用于实施业务规则或执行其他自定义的 PeopleSoft 编程语言。) WSDL_ORDER 将把收到的订单 XML 转换为 SOAP XML 并将该请求发送给 PeopleSoft 远程节点。 远程节点 是与在 BPEL 流程管理器中配置的 Web 服务握手的节点。

可以通过使用 Web 服务调用框架 (WSIF) 绑定(BPEL 流程管理器为其提供了强有力的支持)将远程节点映射到 WSDL 来调用 Web 服务。在收到此 SOAP XML 时,PeopleSoft 节点将根据为该节点导入和配置的 WSDL 来调用 Web 服务。此 Web 服务在 BPEL 流程管理器中调用和执行。

BPEL 流程管理器将订单数据作为 SOAP XML 处理并将它发送给 Oracle 应用程序;它在内部利用 Oracle 应用程序 (OA) 适配器 与 11i 通信。OA 适配器是一个纯 JCA 1.5 资源适配器,用于从电子商务套件中发送和接收消息。Oracle 应用程序通过此适配器将某个提供的 API 和表公开给外部应用程序。

Oracle 应用程序处理订单并发送确认;BPEL 流程管理器接收该响应并将它转发给 PeopleSoft 节点。随后,该节点将响应请求 Web 服务的 PeopleCode。后者将检索 XML 数据并将它提交给 PeopleSoft 中配置的组件接口。 组件接口 是公开 PeopleSoft 组件以便从其他应用程序(用 Java 或 PeopleCode 编写)中进行同步访问的接口。

它是订单数据从 PeopleSoft 发送到 Oracle 应用程序并返回的高级流。在下一个部分中,您将了解如何将 PeopleSoft CRM 模块公开为 Web 服务、如何构建一个 BPEL 流程以及如何配置 OA 适配器。

将 PeopleSoft CRM 与 Oracle ERP 集成

在 PeopleSoft CRM 中提交订单后,需要将订单信息传递给 Oracle 应用程序。该流程有三个主要步骤。

  1. 在 Oracle BPEL 流程管理器中设计业务流程。
  2. 配置 Oracle 应用程序适配器。
  3. 配置 PeopleSoft。

下面我们仔细了解其中的每个步骤:

第 1 步:设计 BPEL 流程

在该步骤中,您将使用 BPEL Designer 创建一个流程。BPEL 流程管理器将从 PeopleSoft 接收包含销售订单信息的 SOAP XML 并将它转换为 OA 适配器的 XML 格式。(为调用 API 创建合作伙伴链接时,OA 适配器将自动生成模式。)随后,将调用和转换 OA 适配器链接,并将订单 XML 提交给 Oracle 应用程序。Oracle API 将处理订单并在输出确认 XML 中返回订单号。

BPEL 流程管理器处理远程故障和绑定故障。当连接不可用时,它将重试五次,然后抛出异常。当发生绑定异常时,将处理绑定故障。

下面是一个为 BPEL 流程管理器设计的集成业务流程的典型示例。

 



(单击图像可放大)


该流程中的重要活动包括:

  1. 选择 Applications > New Application Workspace > New Project > BPEL Process Project
  2. 导入模式以定义 BPEL 流程的输入和输出变量。
    1. 从结构窗口中,选择 project schemas > import Schema
      输入输入模式名称 (createorder.xsd)。
    2. 从结构窗口中,选择 Message Types
      • 选择 CreateOrderRequestMessage 并映射 createorder.xsd 的 CreateOrderIn 根元素。
      • 选择 CreateOrderResponseMessage 并映射 createorder.xsd 的 CreateOrderOut 根元素。
    3. 从结构窗口中,选择 Variables
      • 确认将 InputVariable 映射到 CreateOrderRequestMessage
      • 确认将 OutputVariable 映射到 CreateOrderResponseMessage
  3. 为 OA 适配器创建合作伙伴链接。
    1. 从组件面板中为 CreateOrder 流程添加一个合作伙伴链接活动并将它命名为“CreateOrderPL”。
    2. 单击 Define Adapter Service 并执行以下步骤。
    3. 为合作伙伴链接配置 BPEL 流程管理器和 OA 适配器(稍后将对其进行详细介绍)。
  4. 添加 Invoke 活动来调用 OA 适配器。
    1. invoke 活动拖放到该流程并双击它。

    2. 将合作伙伴链接映射到 CreateOrderPL 并创建输入和输出变量。
  5. invoke 活动上添加一个 transform 活动,将 PeopleSoft 输出 XML 转换为 Oracle 应用程序输入 XML。
    1. 双击 transform 活动。选择 inputVariable 作为源变量,选择 invokeCreateOrderInputVariable 作为目标变量,然后单击创建映射图标,如下所示。
    2.  



    3. 映射源模式和目标模式,如下所示。
    4.  



  6. invoke 活动下添加另一个 transform 活动,将 Oracle 应用程序输出 XML 转换为 PeopleSoft 输入 XML。
    1. 双击 transform 活动。选择 invokeCreateOrderOutputVariable 作为源变量,选择 outputVariable 作为目标变量,然后单击创建映射图标。
    2.  



    3. 映射源模式和目标模式,如下所示。
    4.  



以下文件(全部包含在示例代码下载中)将在 BPEL Designer 中重新创建上述流程。

Bpel.xml

 

部署描述符文件,用于定义此 BPEL 流程流所调用服务的 WSDL 文件的位置

 

CreateOrder.xsd

 

PeopleSoft 应用程序提交的输入 XML 的模式

 

CreateOrder.bpel

 

包含流程流、合作伙伴链接、数据变量和必要的故障处理程序的流程源文件。

 

CreateOrder.wsdl

 

WSDL 客户端接口,用于定义该 BPEL 流程流的输入和输出消息、支持的客户端接口和操作以及其他特性。该功能使 BPEL 流程流可以作为服务调用。

 

您现在已经完成了该 BPEL 流程的设计。接下来,我们将详细介绍 PeopleSoft 端的配置。

第 2 步:配置 OA 适配器

OA 适配器在托管模式下部署在 Oracle Containers for J2EE 中。可以使用它从电子商务套件中发送和接收消息。以下是配置适配器所涉及的步骤。

  1. 定义一个适配器服务并选择 Oracle Applications Adapter
  2.  



  3. 输入服务名。该名称将用作选定 API/表的 Web 服务。
  4.  



  5. 选择一个在项目中定义的连接。如果没有可用的 DB 连接,单击 New 并按照向导执行操作。
  6.  



  7. 选择 Oracle 应用程序数据的 Table/Views/APIs 接口。
  8.  



  9. 搜索并选择要从 BPEL 流程中调用的 PROC_ORDERENTRY_ARRAY API。
  10.  




    注意:在本示例中,由于 BPEL 流程管理器将不支持 oracle 记录类型,因此 PROC_ORDERENTRY_ARRAY 是为 PROCESS_ORDER 预先提供的 API 编写的包装器 API。您将改用包装器过程中的对象类型(类似于 PROCESS_ORDER 中使用的记录类型)。此接口负责处理 Oracle 应用程序中的销售订单。

  11. 将把该 API 添加到适配器服务中。
  12.  



  13. 将把 Oracle 应用程序合作伙伴链接添加到 BPEL 流程,并创建 APPS_PROC_ORDERENTRY_ARRAY.xsd。
  14.  




  15. 适配器服务将为 PROC_ORDERENTERY_ARRAY API 创建一个 WSDL 文件,它的作用类似于 Web 服务并使用 WSIF 绑定到了 ERP。

    示例代码下载中的以下文件将帮助您在 BPEL Designer 中配置 OA 适配器。

Proc_orderentry_array.sql

 

用于调用 OA 提供的 Process_Order API 的自定义包装器 API

 

Create_ObjectScript.sql

 

包含 PROC_ORDERENTERY_ARRAY 自定义 API 中使用的对象创建脚本

 

CreateOrder.bpel

 

包含流程流、合作伙伴链接、数据变量和必要的故障处理程序的流程源文件。

 

CreateOrder.wsdl

 

WSDL 客户端接口,用于定义该 BPEL 流程流的输入和输出消息、支持的客户端接口和操作以及其他特性。该功能使 BPEL 流程流可以作为服务调用。

 

至此,已经完成了 BPEL 流程的设计和 OA 适配器的配置。接下来(以及最后),我们将配置 PeopleSoft。

第 3 步:配置 PeopleSoft

现在您已经创建了 BPEL 流程,下面我们将了解配置 PeopleSoft 的流程(分四个步骤)。

  • 在第 1 步中,将 BPEL 流程 WSDL 导入到 PeopleSoft 中。然后,您将使用导入的 WSDL 配置节点。该节点将最终与 BPEL 流程进行通信。
  • 在第 2 步中,配置销售订单 EIP,以便在每次创建新的销售订单时调用该节点。
  • 最后,在节点将订单信息发送给 BPEL 流程之前,您需要把它转换为 SOAP XML。因此,在第 3 步和第 4 步中,您将编写一个小 PeopleCode 函数来执行该转换并与节点建立关系。

下面我们将详细介绍其中的每个步骤。

1. 配置 PeopleSoft 节点以便与 BPEL 流程进行交互

在该步骤中,您将配置一个节点来与 BPEL 流程交互。您将定义请求和响应消息以及这些消息将通过的通道。

首先,使用 URL 选项将 CreateOrder.wsdl(先前创建的)导入到 PeopleSoft 中。这将 CreateOrder 标识为流程(在 PeopleSoft 中创建订单时将调用该流程)。将 WSDL 导入到 PeopleSoft 中时,集成代理程序将把它添加到 WSDL 信息库中。

要导入 CreateOrder.wsdl,选择 PeopleTools > Integration Broker > Web Services > Import WSDL

 




您现在可以使用 WSDL Repository 页访问 WSDL 信息库中的 WSDL。

将 CreateOrder WSDL 导入到 PeopleSoft 中后,必须配置一个远程节点以便与 BPEL 流程通信。要定义此通信,必须添加相应的 请求消息响应消息消息通道

创建新的远程节点:

  1. 选择 Create a New Node Definition 按纽。
  2.  



  3. 在 Node Name 域中,为新节点定义输入 BPEL_CREATEORDER。
  4. 在 Node Description 域中,输入描述性的节点名称。
  5. 从 Authentication 下拉列表中,选择一个验证方法。有效选项为 None (Default)、Certificate 或 Password。
  6. (可选)在 Password 域中,输入口令。
  7. (可选)在 Confirm Password 域中,重新输入口令。

单击 Next 按钮前进到 WSDL Operation Wizard 的下一页,在该页中为服务选择请求消息和响应消息。请求和响应消息是在 PeopleSoft 中创建的用于表示 SOAP RequestResponse 消息的非结构化消息。

创建一个新的请求或响应消息:

  1. 在相应部分中选择 Create a New Message 选项。
  2. 要创建一个新的请求消息,在 Request Message 部分中选择该选项。在 message name 域中输入 BPEL_ORDER_REQ。
  3. 要创建一个新的响应消息,在 Response Message 部分中选择该选项。在 message name 域中输入 BPEL_ORDER_RES。
  4. 新创建消息的消息版本默认为 VERSION_1。PeopleSoft 集成代理程序使用该值填充 Message Version 域。

     




    PeopleSoft 集成代理程序自动将新消息分配给新消息通道。在向导配置的结尾,将使用新消息在节点上创建输出同步事务。

  5. 在 channel name 域中输入新消息通道名称 BPEL_SERVICES。

     

至此,已经完成了第 1 步。您导入了 WSDL,告知 PeopleSoft 要调用的 Web 服务。您还定义了节点、消息和通道,将信息传递给 Web 服务 (BPEL Process CreateOrder)。在下个步骤中,您将在销售订单 EIP 和这个新配置的节点之间建立关系。

2. 在 EIP 和节点之间建立关系

该步骤将在 CRM_SALES_ORDER EIP 和新节点之间创建一个链接。将 CRM_SALES_ORDER EIP 发布到集成代理程序时,以上创建的链接将把 CRM_SALES_ORDER 消息作为请求消息发送给上面创建的节点。

  • People Tools > Integration Setup 中选择 Node Definition;搜索 BPEL_CREATEORDER 节点。
  •  



  • 在上面选择的节点中,将 Transaction type 更改为“Outbound Asynchronous”并在 Request Message 中输入“CRM_SALES_ORDER”。
3. 创建转换代码

在该步骤中,您将创建应用程序引擎程序 WSDL_ORDER。(应用程序引擎是 PeopleSoft 高容量应用程序处理器。应用程序引擎是使用 Application Designer 开发的,并可以利用常见的 PeopleTools 对象,如记录、PeopleCode 和 SQL 对象。) WSDL_ORDER 将从 EIP 接收的销售订单消息转换为 BPEL 请求(SOAP 消息)并在节点通道上发布已转换的消息。

将以下代码添加到 transform 并将请求发送给上面创建的节点。将请求提交给节点后,该节点将调用配置给它的 Web 服务。将调用此 Web 服务并向该节点(将 XML 消息发送给 PeopleCode 方法)返回响应。

/* Get the data from the AE Runtime */
Local TransformData &transformData = %TransformData;
 
Local File &logFile = GetFile("TestSyncReqResStep3.log", "W", %FilePath_Absolute);
 
Local string &destNode = &transformData.DestNode;

&logFile.WriteLine("DestNode:" | &destNode);
 
/* Set a temp object to contain the incoming document */
Local XmlDoc &xmlDoc = &transformData.XmlDoc;

Local string &xmlStr = &xmlDoc.GenXmlString();
 
&logFile.WriteLine("Transformed XML :" | &xmlStr);

/* Maps the &xmlDoc  to the BPEL_ORDER_REQ and publish to the BPEL_CREATEORDER node. 
Node will invoke BPEL CreateOrder process. 
Response will be assigned to &response variable. */

Local XmlDoc &response = SyncRequestXmlDoc(&xmlDoc, Message.BPEL_ORDER_REQ, Node.BPEL_CREATEORDER);
 

&logFile.WriteLine("Response XML Data:" | &response.GenXmlString());
 
&logFile.Close();

4. 将 WSDL_ORDER 应用程序引擎与节点链接

在该步骤中,您将把转换代码关联到 CreateOrder 节点。因此,每当调用 BPEL 流程管理器时,将执行该转换节点。

创建一个新的关系 WSDL_ORDER,并将它映射到节点 WSDL_ORDER。为此,执行以下操作:

People Tools > Integration Setup 中选择 Relationships 并选择 Add New Value。

  • 将初始节点映射为 BPEL_CREATEORDER、将请求消息名称映射为 CRM_SALES_ORDER、将事务类型映射为 OA、将结果节点映射为 BPEL_CREATEORDER 并将请求消息名称映射为 CRM_SALES_ORDER,默认情况下将选择它们的版本。然后,单击 Add

 




  • 将转换请求映射为 WSDL_ORDER

 




至此,已完成了销售订单创建步骤。请再次观看设计时 viewlet,了解如何配置所有这些步骤;在运行时 viewlet 中,您实际上将看到一个从 PeopleSoft 中提交并发送给 Oracle 应用程序的销售订单。

结论

由于异类应用程序分布在多个不同业务单元中,因此企业在聚合信息方面面临挑战。集成这些系统需要大量投资。现在,正如本文所演示的,此类企业可以选择使用类似 BPEL 这样的标准集成这些应用程序。

 


Lawrence Pravin Lawrence Pravin 是 Sierra Atlantic Inc. 流程集成包的产品经理。流程集成包在企业应用程序之间提供了端到端的业务流程集成解决方案。他在打包应用程序方面拥有 10 年以上的丰富经验,并在 Oracle、PeopleSoft、Siebel 和 SAP 应用程序方面拥有过硬的集成专业技能。

 

将您的意见发送给我们