用 WID、WPS和 Adobe Flex 为业务流程应用程序开发富 Web 客户机

Jun Xue, 软件工程师, IBM

简介: 创建可以使用 WebSphere Process Server 的 Business Flow Manager 和 Human Task Manager Web 服务 API 与业务流程和人工任务交互的富 AdobeFlexWeb 客户机。

简介

Process Server 提供两个 Web 服务接口:

  • Business Flow Manager API (BFM API),它让客户机应用程序可以与微型流和长时间运行的过程交互。
  • Human Task Manager API (HTM API),它让客户机应用程序可以创建任务、声明和完成现有的任务等等。
  • 创建业务流程应用程序
  • 研究 BFM 和 HTM Web 服务 API
  • 使用 Flex 创建富 Web 客户机

图 1 说明示例应用程序的架构。

图 1. 示例应用程序的架构

开始之前

  • WebSphere Integration Developer V6.2:这是一个集成开发环境 (IDE),用于构建基于面向服务架构 (SOA) 的应用程序。
  • WebSphere Process Server V6.2:这是一个高性能的业务流程自动运行时引擎。
  • Adobe Flex Builder 3:这是一个基于 Eclipse 的强大的 IDE,用于开发 Flex 应用程序。
  • OrderSampleLibrary.zip 包含预定义的业务对象和接口。
  • OrderSampleProcessModule.zip 包含示例业务流程应用程序项目的源代码文件和可以在 Process Server 中安装的 Enterprise Application Archive (EAR) 文件 OrderSampleProcess.ear。
  • BizFlexClient.zip 包含 Adobe Flex 项目的源代码文件。

下载这些文件,把 OrderSampleProcessModule.zip 和 BizFlexClient.zip 解压到本地目录中。

创建业务流程应用程序

图 2. 示例订购过程

在下面几节中,要导入示例库、创建组件和分配接口以及创建所需的 Java实现。

导入示例库

为了构建这个示例,需要导入 下载 中提供的 OrderSampleLibrary 中的接口和业务对象定义。按以下步骤导入库并在 Integration Developer 中创建 Order Process 应用程序模块:

  1. 选择 File => Import => thers => Project Interchange
  2. 找到并选择 OrderSampleLibrary.zip,单击 Finish,见图 3。

    图 3. 导入 OrderSampleLibrary

  3. 创建模块,选择 File => New => Module
  4. 指定 OrderSampleProcess 作为 Module name,单击 Next
  5. Select Required Libraries 对话框中,确保选择 OrderSampleLibrary 并单击 Finish
  6. 应该会在 Business Integration 视图中看到 OrderSampleProcess 装配图,见图 4。

    图 4. Business Integration 视图中的 OrderSampleProcess

创建组件并分配接口

现在 OrderSampleProcess 应用程序可以使用 OrderSampleLibrary 中的业务对象和接口了,接下来可以创建过程、人工任务和 Java组件,在模块中分配对应的接口。

按以下步骤在装配图中添加组件:

  1. 分配接口,右键单击 OrderProcess,选择 Add => Interface,选择 NewOrderInterface,然后单击 OK
  2. 分配接口,右键单击 ManagerApproval,选择 Add => Interface,选择 OrderApprovalInterface,然后单击 OK
  3. 分配接口,右键单击 ProcessOrderService,选择 Add => Interface,选择 ProcessOrderInterface,然后单击 OK
  4. 在 Add Wire 对话框中单击 OK,在 OrderProcessManagerApproval 之间以及 OrderProcessProcessOrderService 之间创建连接。

现在已经定义了三个组件,下面可以创建每个组件的实现。

创建 ProcessOrderService 的 Java 实现

当经理批准订购请求时,过程通过调用这个 Java 组件来处理订购请求。按以下步骤实现它:

  1. 这时会创建一个 Java 类,其中有一个与 ProcessOrderInterface 中定义的操作同名的方法。在这个方法中添加清单 1 所示的逻辑。

    清单 1. ProcessOrderRequest 方法的实现

  2. 保存装配图。

创建 ManagerApproval 人工任务的实现

按以下步骤创建 ManagerApproval 人工任务的实现:

创建 OrderProcess 的实现

  1. 接收订购请求。
  2. 经理人工地批准请求。
  3. 判断经理是否批准了请求。如果请求被拒绝了,就向用户发送一条消息。如果请求被批准了,就调用 ProcessOrderService 继续处理它。

按以下步骤生成 OrderProcess 组件的实现:

  1. 因为经理可能无法马上处理请求,应该把这个过程设置为长时间运行的过程。确保选中 Process is long-running,见图 7。
  2. 我们希望用户能够看到响应,所以不希望过程实例被自动删除。对于 Automatically delete the process after completion 选择 No

    图 7. OrderProcess 详细信息

  3. 接下来,添加一个全局变量以保存经理批准消息。在 Variables 下面,单击加 。把这个变量命名为 approvalMsg,选择 ApprovalResponseBO 作为数据类型,然后单击 OK。这个变量会添加到变量列表中。
  4. Basic Actions 类别中的 Invoke 拖放到 Generalized Flow 结构中,把它的名称设置为 InvokeTask
  5. 选择 InvokeTask 活动,然后进入 Properties 视图并选择 Details
  6. 在 Details 视图中(见图 8),选择 OrderApprovalInterfacePartner 作为 Partner,选择 approveOrder 作为 Operation
  7. 在表格中,对于 Input(s),在 approvalMsg 行(最后一列名为 Read From Variable)中选择 (none)。从下拉列表中选择 orderRequest 变量。
  8. 对于 Output(s),在 response 行(最后一列名为 Store Into Variable)中选择 (none)。从下拉列表中选择 approveMsg 变量。

    图 8. InvokeTask 活动详细信息

  9. Structures 类别中的 Choice 拖放到 GeneralizedFlow 结构中,把它的名称设置为 Choice。把默认 case 改名为 Approve
  10. 在 Properties 视图中,选择 Approve case,然后选择 Details。对于 Expression Language 选择 XPath 1.0,把条件设置为 $approveMsg/isApproval=true(),见图 9。

    图 9. Approve case 详细信息

  11. Choice 活动创建第二个 case:右键单击 Choice,然后选择 Add a case,把它改名为 Reject
  12. 在 Properties 视图中,选择 Reject case,然后选择 Details。对于 Expression Language 选择 XPath 1.0,把条件设置为 $approveMsg/isApproval=false(),见图 10:

    图 10. Reject case 详细信息

  13. 现在已经在 Choice 活动中创建了两个 case。对于每个 case,需要创建一个后续活动。把 Basic Actions 类别中的 Invoke 拖放到 Choice 结构中,放在 Approve case 后面,把它的名称设置为 ProcessOrder
  14. Assign 拖放到 Choice 结构中,放在 Reject case 后面,把它的名称设置为 RejectedMsg
  15. 在 Properties 视图中选择 RejectedMsg 并指定详细信息,见图 11:

    图 11. RejectedMsg 详细信息

  16. 在 Properties 视图中指定 ProcessOrder 活动的详细信息,见图 12:

    图 12. ProcessOrder 详细信息

  17. 现在,过程的实现已经完成了。保存它之后,这个过程应该像图 13 这样。

    图 13. OrderProcess 实现

OrderSampleProcess 应用程序现在完成了。部署这个应用程序之后,它就可以接收来自 Web 服务客户机的请求以创建过程并声明和完成人工任务。在 下载 中可以找到完整的示例。

了解 Business Flow Manager 和 Human Task Manager Web 服务 API

  • 查询过程模板
  • 创建和启动过程实例
  • 查询任务集合
  • 声明现有的任务
  • 完成任务
  • 传输工作项

从 WebSphere Process Server 导出 WSDL 文件

为了研究 BFM 和 HTM Web 服务 API,可以从 Process Server 导出 Web Service Description Language (WSDL) 文件,稍后将通过它调用 Web 服务接口。

按以下步骤导出 WSDL 文件:

  1. 确认 Process Server 已经启动。
  2. 在浏览器中登录管理控制台(默认 URL http://localhost:9060/admin)。
  3. 为了导出 BFM API WSDL 文件,在左边的导航条中选择 Applications => Enterprise Applications(见图 14),单击 BPEContainer_{your_nodename}_server1

    图 14. BPEContainer 应用程序

  4. 在应用程序的配置页面中,单击 Web Services Properties 部分中的 Publish WSDL files,见图 15。

    图 15. 应用程序的配置页面

  5. 选择 zip 文件(见图 16),把它保存到本地目录中。

    图 16. 下载页面

  6. 解压文件,会看到 WSDL 文件 BFMWS.wsdl。
  7. 为了导出 HTM API WSDL 文件,选择 Applications => Enterprise Applications 并单击 TaskContainer_{your_nodename}_server1
  8. 重复以上步骤下载并解压文件,会看到 WSDL 文件 HTMWS.wsdl。

使用 Flex 构建富 Web 客户机

后端的业务流程应用程序已经完成了,现在可以使用 Flex 构建一个富 Web 客户机,让它与刚才构建的过程和人工任务交互。BizFlexClient.zip 中包含完整的 Adobe Flex 项目源代码文件。如果您还没有下载并解压这个文件,现在就执行这个步骤。

用 Flex 调用 BFM 和 HTM Web 服务

在本节中,讨论如何用 Flex 调用 BFM 和 HTM Web 服务 API。Business Process Choreographer 提供的 Web 服务 API 由 Web 服务安全机制保护。这意味着对 Web 服务接口的所有请求必须包含一个安全令牌,安全令牌代表有效的用户凭证。

有几种安全令牌。在我们的示例中,使用 Username 令牌。WSS-SOAP 消息安全文档中引入了 元素作为一种提供用户名的方法。清单 2 说明 元素的 XML 语法:

清单 2. 的 XML 语法

按以下步骤用 Flex 调用 BFM 和 HTM Web 服务 API:

  1. 创建一个名为 BizFlexClient 的 Flex 项目。
  2. 为了创建一个 Web 服务代理并让它向远程 Web 服务服务器发送请求,定义一个名为 WSBase.as 的 ActionScript 类,它扩展超类 mx.rpc.soap.AbstractWebService。这个类编码 SOAP 请求消息、把消息发送出去并处理结果,还要装载和解析 WSDL 文件。
  3. 为了创建 Username 令牌,在 WSBase.as 类中定义一个名为 createWSSEHeader 的函数。
  4. 首先需要设置用户名和密码。在这里,已经生成了 元素,密码以明文形式发送。最后,createWSSEHeader()(见清单 3)将返回一个 SOAP 头 XML 消息,它代表用户凭证。

    清单 3. 在 WSBase.as 中创建 Username 令牌

  5. 为了在 WSBase.as 中编码 SOAP 消息,定义一个名为 encodeSOAPMessage 的函数,它把 SOAP Header 元素和 SOAP Body 元素编码为 SOAP Envelope 元素,见清单 4。这个元素是 SOAP 消息的根元素。

    清单 4. 在 WSBase.as 中编码 SOAP 消息

  6. 为了对远程 Web 服务服务器执行调用,在 WSBase.as 中定义一个名为 call 的函数。这个函数使用 AsyncRequest 类发送异步请求,实现远程过程调用。当远程请求完成时,回调请求中指定的响应器。还需要定义 processResult 函数(处理结果数据)和 faultResult 函数(处理错误),见清单 5。

    清单 5. 在 WSBase.as 中调用服务器

  7. 在向远程 Web 服务发送请求之前,必须装载并解析服务的 WSDL 文件。为此,在 WSBase.as 中定义一个名为 parseWSDL 的函数(见清单 6),它通过 HTTP 请求获取 WSDL 文件,当成功地装载文件时发送 Web 服务请求。

    清单 6. WSBase.as 中的 WSDL 装载器

  8. 现在已经创建了一个简单的 Web 服务代理,下面可以创建 BFMWebService.as 和 HTMWebService.as 类来实现所需的 BFM 和 HTM API。这两个类都以 WSBase 作为超类。
  9. 在 BFMWebService.as 中,定义 queryProcessTemplates 和 startProcess 函数,它们与过程交互,见清单 7。

    清单 7. BFMWebService.as 中的 BFMWebService 类

  10. 在 HTMWebService.as 中定义以下函数来操作人工任务:getTODOTasks、claim、completeWithOutput 和 transferWorkItem,见清单 8。

    清单 8. HTMWebService.as 中的 HTMWebService 类

用 Flex 创建用户界面

现在已经创建了调用 BFM 和 HTM Web 服务 API 的类,下面创建一个简单的用户界面,它使用这些 API 与过程和人工任务交互。

在我们的示例中(见图 17),您会看到:

  • 顶部有一个表单,它用于配置 Web 服务的参数。
  • 左边有一个用于操作过程的面板,可以在其中查看过程模板并创建新的订购请求过程。
  • 右边有一个用于操作人工任务的面板,可以在其中查看人工任务、声明、完成并传输工作项。

图 17. 示例应用程序的简单 UI

解压 BizFlexClient.zip 的 Flex 项目源代码目录中的 BizFlexClient.mxml 文件包含用户界面的完整源代码。可以把这个文件复制到 Flex 项目 BizFlexClient 中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2010年8月18日
下一篇 2010年8月18日

相关推荐