西游记同人小说:用于业务流程管理的 Bonita,第 2 部分 : 配置表单和变量

来源:百度文库 编辑:九乡新闻网 时间:2024/10/06 02:29:24

用于业务流程管理的 Bonita,第 2 部分 : 配置表单和变量

实现应用程序的用户界面

Bilal Siddiqui, 顾问Bilal Siddiqui 是一名电子工程师、XML 顾问,以及 WaxSys 公司的联合创始人之一,该公司专注于简化电子商务。自 1995年从巴基斯坦拉合尔工程技术大学毕业获得电子工程学位后,他就开始设计工业控制系统的软件解决方案。后来,他转向 XML 并运用在 C++ 方面的的编程经验构建基于 Web 和 WAP 的 XML 处理工具、服务器端解析方案以及服务应用程序。Bilal 还是一位技术推广者,常撰写技术书籍并出版。

 

简介: Bonita Open Solution,一个基于 Java™ 的开源业务流程管理(BPM)工具,让您可以建模、配置和执行业务流,而不需要编写一行 Java 代码。本文是该系列的最后一篇,这个两部分系列演示了使用 Bonita 设计了一个预订酒店的工作流。接着 第 1 部分 ,您将为工作流配置变量和设计用户交互表单,然后与数据库和报告引擎连接。配置完成后,您将可以看到客房预订流程正在运行。

查看本系列更多内容

标记本文!

发布日期: 2011 年 1 月 30 日
级别: 中级 原创语言: 英文
访问情况 2343 次浏览
建议: 0 (添加评论)

平均分 (共 9 个评分 )

这个两部分文章的 第 1 部分 向您介绍了 Business Process Modeling Notation (BPMN) 和 Bonita Open Solution,一个基于 Java 的、开源的工作流工具。您已经使用 Bonita 设计了一个酒店预订的工作流。现在,在第 2 部分,您将配置变量来保存工作流数据,在客房预订(room-booking)工作流设计用户交互表单。然后,将您的工作流与 PostgreSQL 数据库和 JasperReports 报告引擎连接起来,这样,就可以从数据库阅读预订信息并生成报告。最后,您可以执行工作流来查看客房预订流程的运行状况。

使用 Bonita 设计一个简单表单

在第 1 部分结尾,您已经保存了 Launch Bonita 和开源的 RoomBookingDiagram_1.0.proc 文件。(该文件在本文源代码 下载 部分也有。)工作流包含 EnterRoomInformationCheckRoomAvailabilityBookRoom 活动,如图 1 所示:


图 1. Bonita 中的客房预订工作流

下一步是为 EnterRoomInformation 活动设计一个简单表单,如图 2 所示:


图 2. 一个简单数据输入表单

图 2 中的表单包含一个标题(EnterRoomInformation)、一个带有标签(Type of room required)的下拉列表、以及一个按钮 Check Room Availability,也包含一些其他的元素,比如,Bonita 徽标,这也是标准 Bonita 模板的一部分。(Bonita 允许使用定制模板,但为了简单起见,本文使用标准模本。)

创建一个新模板

要开始为 EnterRoomInformation 活动创建一个新模板,单击活动在细节窗口显示其属性。在细节窗口单击 Forms 选项卡然后单击 Add 按钮,一个 Create a new Form 对话框打开。如图 3 所示:


图 3. 创建一个新表单的对话框

注意,在 图 3 中,Bonita 已经在 Name 字段输入 EnterRoomInformation 作为新对话框的名称。在对话框中您可以看到一个 Description 文本框,可以在其中输入表单描述,比如 A form showing a drop-down list so that the receptionist can choose the type of room required by the customer

在 Description 文本框下方,您可以看到 Add widgets based on... 和两个标签为 Select AllUnselect All 的按钮。按钮下方是一个标签为 isRequiredRoomTypeAvailable 的复选框。这个复选框是默认选中的,表示您在第 1 部分的 添加房间可入住标志到您的工作流 部分选中的 isRequiredRoomTypeAvailable 变量。

Bonita 如何在表单设计中使用变量

回顾 第 1 部分isRequiredRoomTypeAvailable 变量实际上是 CheckRoomAvailability 活动设置的一个标志。使用该标志的工作流后面将决定 BookRoom 活动是否可以进行,或者控制是否必须被传送回 EnterRoomInformation 活动。

因为您正在设计的 EnterRoomInformation 表单只有一个字段(Type of room required,是一个下拉列表),那么就可以推断出,设计该表单 isRequiredRoomTypeAvailable 变量(或标记)不是必需的。您可能会觉得奇怪,为什么 EnterRoomInformation 表单的 Create a new Form 对话框以一个复选框显示该变量。

通常情况下,当您使用 Java 语言设计和实现表单时,表单中的每个字段(比如文本框下拉列表)是与一个保存应用程序数据的 Java 对象联系在一起的。通常称为 model beans,这类对象常用在大多数 Java 程序员都很熟悉的 Model-View-Controller (MVC) 基础架构中(见 参考资料)。Bonita 使用同一概念将字段和流程变量联系起来,允许您直接从流程变量快速构建表单。只需要制作一个默认表单,包含您所选择的每个变量相对应的所有字段。这就是快速构建一个可以根据您的需求编辑和调整的表单的方法。

由于 isRequiredRoomTypeAvailable 是一个全局变量,所以它在整个客房预订工作流以及工作流的所有单个活动中都是有效的。迄今为止,您不能为工作流声明任何其他变量。这就是为什么这是 Bonita 用于构建 EnterRoomInformation 表单的惟一一个变量。在您用来设计表单的变量列表中只包括 isRequiredRoomTypeAvailable 全局变量。

现在,如果您在 Create a new Form 对话框底部单击 Finish 按钮,Bonita 将创建一个表单,包含 isRequiredRoomTypeAvailable 变量相对应的一个字段。但是,正如您从您的客房预订工作流的业务逻辑所知道的那样,在设计 EnterRoomInformation 表单时您不需要 isRequiredRoomTypeAvailable 变量。因此,在 Create a new Form 对话框,现在应该取消选中 isRequiredRoomTypeAvailable 旁边的复选框,然后单击 Finish。Bonita 将自动配置一个空 EnterRoomInformation 表单,如图 4 所示:


图 4. 为 EnterRoomInformation 活动最新配置的空表单

现在,您必须为 Type of room required 字段配置一个变量。这个变量将保存所有房间类型,以便于前台可以选择客人需要的类型。我将调用变量 TypesOfRoomsAvailable。EnterRoomInformation 表单中的 Type of room required 字段将使用 TypesOfRoomsAvailable 变量来获取不同的可用房间类型。

配置一个变量来保存选项列表

TypesOfRoomsAvailable 变量是 EnterRoomInformation 表单中惟一需要的。这使得它成为了一个局部变量。

要开始创建 TypesOfRoomsAvailable 变量,在 Bonita 白板(设计视图)上单击 EnterRoomInformation 活动。在细节窗口单击 Data 选项卡,然后单击 Add 按钮。出现一个 Add a new variable 对话框,类似于 第 1 部分图 9(您需要配置 isRequiredRoomTypeAvailable 全局变量) 中的那个。它包括 Name (必须的)、Description、Data type 和 Default value 字段。在 Name 字段输入 TypesOfRoomsAvailable,在 Description 文本框输入 A variable to hold the different types of rooms available in the hotel,如图 5 所示:


图 5. 添加一个新变量的对话框

注意看 图 5 中的 Data type 字段。如果您在 配置 第一部分图 9 中配置了 isRequiredRoomTypeAvailable 变量, 您可以选择 Boolean 作为 Data type 的值,因为 isRequiredRoomTypeAvailable 变量是一个 ture 标志,或者是 false 标志。TypesOfRoomsAvailable 变量应该是一系列选项 — 可用房间类型 — 所以,从 Data type 字段旁边的下拉列表中选择 List of options

一旦您选择 List of options 作为数据类型,在 Add a new variable 对话框的下部将出现 3 个字段(Name、Description 和 List)和 4 个按钮(AddUpDownRemove)组成的一个新组,如图 6 所示:


图 6. 添加一个新变量的对话框,其中含有 List of options 数据类型的附加字段

Bonita 显示附加字段,因为它需要知道可用房间的具体类型,以便于它能将类型列表和您的 TypesOfRoomsAvailable 变量联系起来。

正如您在 图 6 中所看到的,Name 和 List 字段用星号做标记,表示它们是强制的。这是 Bonita 一个可重用性功能,允许您为一个变量列表给出一个名称。稍后您可能会重用这个列表和其他变量。

在 Name 字段输入 ListOfRoomTypes,输入 These are the types of rooms available 作为描述。然后,要将真实值输入列表,单击 Add 按钮。出现一个 Add an item 对话框,如图 7 所示,允许您逐个输入不同类型的房间:


图 7. 向 List of options 数据类型添加值的对话框

在列表中,您只能输入 2 个值。首先,在 Add an item 对话框的 Item name 字段输入 Single,然后单击 OK。现在,这个值将在 图 6 所示的 Add a new variable 对话框中的 List 文本框中出现。再一次单击 Add 按钮,这次在 Item name 字段出现的类型是 Double,然后单击 OK。您完成了 Add a new variable 对话框。现在单击 OK 按钮,我在图 8 中圈起来的那个:


图 8. TypesOfRoomsAvailable 变量的完整的配置

在已完成的 Add a new variable 对话框单击 Finish 按钮,对话框消失,TypesOfRoomsAvailable 变量出现在 EnterRoomInformation 活动的 Data 选项卡中,如图 9 所示:


图 9. 添加到 EnterRoomInformation 活动的 TypesOfRoomsAvailable 变量

您已经成功地配置了 TypesOfRoomsAvailable 变量,现在您可以使用该变量向您的 EnterRoomInformation 表单添加 Type of room required 下拉列表了。

向一个表单中添加一个新字段

如果,在白板中 EnterRoomInformation 活动仍然被选中,在细节窗口单击 Forms 选项卡。在表单列表单击 EnterRoomInformation,然后单击 Edit 按钮,已在图 10 中圈起来了:


图 10. 编辑一个 Bonita 表单

您在 创建一个新表单 部分开发的空 EnterRoomInformation 表单在表单编辑器窗口出现,这个窗口左边有一个调色板控件,在右边是一个表单的设计视图。表单的设计视图显示矩形网格。在组件调色板单击 Select 组件,并将它拉到表单的最上层网格,如图 11 所示:


图 11. 从调色板拖拉一个组件到您的表单

一个以 Select1 作为标签的新字段被放入表单,如图 12 所示:


图 12. 一个放入表单设计视图的 Select 组件

现在,单击 Select1 字段。细节窗口显示其属性,如图 13 所示:


图 13. 显示一个字段的属性的细节窗口

在 Name 和 Show label 字段分别输入 RequiredRoomTypeType of room required。新字段现在显示 Type of room required 作为其标签,如图 14 所示:


图 14. Type of room required 字段的更新标签

Type of room required 字段的下拉列表显示可用房间的类型,便于前台选择。因而,下一步是将可用房间类型填入到下拉列表,使用您在 配置一个变量来保存选项列表 部分配置的 TypesOfRoomsAvailable 变量。

将 Bonita 变量与表单中的一个字段联系起来

如果 Type of room required 在表单设计者视图中是选中的,在细节窗口单击 Data 选项卡。注意该选项卡包含四个字段:Available Values、Initial value、Expression 和 save to,如图 15 所示。这些表单字段允许您将变量和字段联系起来。


图 15. Data 选项卡显示与字段关联的变量

单击 Available Values 旁边的下拉列表,并选择 typesOfRoomsAvailable 作为其值。这就在 EnterRoomInformation 表单中的 Type of room required 字段旁边填入了房间类型。

现在,单击 Initial value 字段旁边的下拉列表,然后选择 Single。当 EnterRoomInformation 表单被呈现给用户时,这就将 Single 设置为 Type of room required 字段默认选中的初始值。现在 Data 选项卡看起来像图 16 所示:


图 16. 默认初始值选中后,RequiredRoomType 的 Data 选项卡

Data 选项卡的 Expression 字段允许您编写一个表达式,Bonita 使用它来估计 save to 字段指定的变量值。如果您想要在将用户输入保存为一个变量之前,就对其进行处理,这一特性非常有用。但是,如果您不需要处理用户输入,那么让 Expression 字段保留默认值。

工作流的下一个活动,CheckRoomAvailability,需要了解所需房间的类型,以便于查询客房预订数据库,查询房间是否可用。您需要定义一个工作流级别的文本类型变量来存储用户输入。因此,使用 配置一个变量来保存选项列表 小节描述的步骤,创建一个名为 requiredRoomType 的变量,数据类型设置为 Text。requiredRoomType 变量现在在 save to 旁边的下拉列表中列出,save to 字段左面的复选框也被选中,如图 17 所示。这是因为 Bonita 知道,现在 save to 字段有一个存储用户输入变量名。


图 17. 用于 RequiredRoomType 字段的 Data 选项卡的表达式和 save to 字段

您已经完成了 EnterRoomInformation 表单的字段和变量配置。现在您需要配置一个表单按钮,前台接待员可以单击它来选择所需的房间类型。

在 Bonita 表单中使用按钮

next 按钮和 previous 按钮

图 18 中,Field Type 字段有一个下拉列表,其中 Submit Button 被选中。其他可能值是 Next Button 和 Previous Button。当您需要从用户没有填写的表单中收集数据时,可使用 next 和 previous 这类按钮。既然那样,您可以将您的数据分离成一系列表单,并在每个表单中配置 next 和 previous 按钮。Bonita 在内部管理从一个表单到下一个或上一个表单的导航。

Bonita 提供 3 个类型的按钮:submit、next 和 previous。submit 按钮提交处理的数据表单:当用户单击按钮时,表单数据被提交,且工作流中的下一个活动发生。在 EnterRoomInformation 表单的设计视图,您在表单底部可以看到一个 Submit 按钮。当您创建新表单时,Bonita 自动为您放置此按钮。您只需要将按钮的标签从 Submit 修改到 Check Room Availability。其余的 Bonita 都已经为您配置好了。

在设计视图单击 Submit 按钮。细节窗口显示按钮属性,如图 18 所示:


图 18. 细节窗口显示 Submit 按钮属性

在细节窗口的 Show label 标签字段输入 Check Room Availability。这改变了按钮标签 — 完成了您的 EnterRooomInformation 表单配置。


连接 Bonita 到 PostgreSQL

使用 PostgreSQL

本文源代码 下载 部分的 Readme.txt 文件,提供了建立 PostgreSQL 安装的操作指南,将样例数据输入数据库来使用客房预订工作流。

CheckRoomAvailability 活动将查阅酒店预订数据库,查看所需类型的房间的状态。我将使用 PostgreSQL,一个流行的开源数据库,来保存客房预订数据。Bonita 提供许多连接器,您通过配置它们可以将 Bonita 和外部应用程序连接起来。您将配置 Bonita 的 PostgreSQL 连接器来将您的 CheckRoomAvailability 活动和酒店预订数据库连接起来。

要配置 Bonita 的 PostgreSQL 连接器,您需要:

  1. 添加一个 PostgreSQL 连接器到 CheckRoomAvailability 活动。
  2. 使用 requiredRoomType 变量,编写一个 SQL 查询。
  3. isRequiredRoomTypeAvailable 工作流级别变量中存储 SQL 查询输出,稍后其他 BPM 元素制定决策时使用。

配置 Bonita 的 PostgreSQL 连接器

在白板上选择 CheckRoomAvailability 活动,在细节窗口显示其属性。在细节窗口单击 Connectors 选项卡,如图 19 所示:


图 19. CheckRoomAvailability 活动的连接器选项卡

Connectors 选项卡目前还没有用于 CheckRoomAvailability 活动的连接器,要为 PostgreSQL 添加一个连接器,单击 Add 按钮来打开 Select a connector 对话框,如图 20 所示:


图 20. 向一个活动添加 PostgreSQL 连接器

您将在连接器列表中的 Database 项之下找到 PostgreSQL 连接器。双击 Database 项,然后选择 PostgreSQL - Execute a query on a PostgreSQL DB 选项并单击 Next,如图 21 所示:


图 21. 从 Bonita 的数据库连接器中选中的 PostgreSQL 数据库连接器

接下里,您将看到一个 Name the connector 对话框,如图 22 所示,要求您输入一个名称、描述和连接器将要激活的事件:


图 22. 酒店数据库的 PostgreSQL 连接器属性

在 Name 和 Description 分别输入 HotelDBPostgreSQL connector for the CheckRoomAvailability activity

Select 字段允许您选择是在 CheckRoomAvailability 活动的开始时激活连接器还是在末尾激活。因为您客房预订工作流中的 CheckRoomAvailability 活动只是一个数据库查询,连接器在活动开始还是结尾激活都没关系。因此保留 Select event 字段的默认值。

对话框的最后一个字段是 If connector fails...。如果在同数据库连接过程中出现问题,从它旁边的下拉列表中,选择两个选项中的一个:报告错误或忽略错误。为了简单起见,也让 If connector fails...字段保留默认值,如果和数据库连接的连接器不能运行,这就将报告一个错误。

单击 Next 按钮,下一个对话框将要求您输入数据库连接信息,包括数据库名称、用户名、密码和运行数据库的服务器名称和端口。这些值根据您构建的数据库而定。图 23 显示了我所使用的值:


图 23. PostgreSQL database connection 对话框

输入数据库连接信息之后,单击 Next 按钮。

提供一个 SQL 查询来从数据库读取数据

现在您已经有一个查询对话框了,如图 24 所示,您可以在其中输入一个 SQL 查询语句来检查房间使用情况:


图 24. 输入一个 SQL 查询

您知道 requiredRoomType 变量存储用户的选择。因此,SQL 查询必须检查那类房间是否可用,使用 requiredRoomType 变量。在 Query 文本框输入以下查询:

Select "Availability" from "RoomInfo" WHERE "RoomType" = '${requiredRoomType}' AND            "Availability" = TRUE

这个查询语句从 PostgreSQL 的 RoomInfo 表中挑选出了可用性字段为 true 的所有记录。

在执行这个查询之前,Bonita 将使用 requiredRoomType 变量的值替换 ${requiredRoomType}。因此,如果前台接待员在表单中选择 Single 作为所需房间类型,那么实际被执行的 SQL 查询语句是:

Select "Availability" from "RoomInfo" where "RoomType" = 'Single' AND "Availability"            = TRUE

这就是为什么 Bonita 允许您编写在运行时声明的动态 SQL 查询。

在工作流级变量中捕获 SQL 查询的输出

您需要在 isRequiredRoomTypeAvailable 变量中存储 SQL 查询输出,这是您在 第 1 部分 中配置的一个全局变量。单击 Next 按钮,您将看到 Execute a query on a PostgreSQL DB 对话框,它允许您将 SQL 查询输出映射到一个 Bonita 变量。在 Connector output combo 对话框输入 rowSet.getValues().asBoolean(),然后从 Destination 变量下拉列表中选择 isRequiredRoomTypeAvailable,如图 25 所示:


图 25. 将 SQL 查询映射到一个 Bonita 变量

如果有预订类型的房间,rowSet.getValues().asBoolean() 方法将插入 true 作为 isRequiredRoomTypeAvailable 变量的值。

您已经将您的工作流连接到数据库了。现在,您可以执行最后一个工作流配置步骤:设计客房预订表单,收集客户信息和预订信息。在这一步,定义 CustomerNamePhoneNumberBookingDate 局部变量来保存客户信息。然后使用 Create a new form 界面(见 图 3)来设计新表单。最后,配置连接器,编写一个 SQL 查询语句来将客房预订信息提交给数据库。我已经讲解了所有步骤,那么我将这个表单留给您做一个练习。本文 源代码中的 RoomBookingDiagram_2.0.proc 文件包含客房预订工作流的最终交互。


集成 JasperReports 和 Bonita

现在,您已经配置了完整的客房预订工作流。在我说明如何执行工作流之前,我将向您展示如何集成 JasperReports 和 EnterRoomInformation 活动。Bonita-JasperReports 集成在 BPM 应用程序中非常有用,因为报告功能在真实场景中是经常需要的,比如酒店预订流程。另外 JasperReports 也是最流行的开源报告引擎。

您需要先安装 JasperReports,然后再使用它和 Bonita。跳转到 JasperReports 网站,获取下载和安装操作说明(见 参考资料)。

使用 EnterRoomInformation 活动配置 JasperReports 的过程类似于您在 连接 Bonita 到 PostgreSQL 小节中执行的步骤。在白板中选择 EnterRoomInformation 活动,然后单击它的 Connectors 选项卡,并单击 Add。您将看到 Name the connector 对话框。然后在 Select a connector 对话框中从 Jasper 项选择 Create report - Create a Jasper Report from a database 选项。在 Name the connector 对话框,输入 BookingSummaryReport 作为连接器的名称。

之后,您将看到 Database access information 对话框,如图 26 所示,要求您输入连接您的数据库所需的信息:


图 26. 输入 JasperReports 的数据库访问信息

在 Database driver 字段输入 org.postgresql.Driverorg.postgresql.Driver 是 JDBC 驱动器,您使用 PostgreSQL 数据库时需要它。图 26 中其他字段值是我输入的配置:JDBC URL 字段的 jdbc:postgresql://localhost:5432/hotelDB, User name 和 Password 字段的 postgres

关于连接 JasperReports 和关系数据库(比如,PostgreSQL)的详细信息,见 参考资料

单击 Next 按钮,Report Settings 对话框打开,如图 27 所示:


图 27. JasperReports 的报告设置

这个对话框要求您输入 JasperReports XML (JRXML) 文件的路径。JasperReports 报告被设计为 JRXML 文件。本文的源代码 下载 部分提供了一个简单客房预订汇总报告的 CurrentBookingSummaryReport.jrxml 文件。将这个文件复制到您所选择的位置,然后在 JRXML 文件路径字段中提供文件路径。

在 Output 文件路径字段,指定您想要 Bonita 保存客房预订汇总报告 PDF 版本的位置。在 Output 格式字段,选择 PDF。单击 Finish,您的客房预订汇总报告现在完全集成到 Bonita 了。


执行客房预订工作流

Bonita 与 Jetty 捆绑在一起,一个流行的开源 web 服务器。这使得用户在 Bonita 中较为容易地测试 BPM 应用程序。

在您尝试客房预订工作流之前,您需要建立 PostgreSQL 数据库,然后填充样例数据,如果还没有这样做。在源代码 下载 部分,参考 Readme.txt 文件,获取构建和填充样例代码(我过去试验的应用程序)的操作指南。

下载部分也包含 RoomBookingDiagram_2.0.proc,其中包含拥有所有表单和变量的完整客房预订工作流。从 Bonita 文件菜单打开该文件,然后在 Bonita 工具栏单击 Run 来执行工作流,如图 28 所示:


图 28. Bonita 工具栏

单击 Run 按钮时,Bonita 自动将客房预订工作流绑定到一个 web 归档文件(WAR),WAR 部署和运行在 Jetty 上。Bonita 然后在 web 浏览器打开 EnterRoomInformation 表单,如图 29 所示:


图 29. EnterRoomInformation 表单

您可以看到,在 Type of room required 下拉列表中 Single 是默认选中的。选择 Double 然后单击 Check Room Availability 按钮。您再一次得到相同的 EnterRoomInformation 表单,因为在样例数据中没有双人间可以预订。

现在重新选择 Single,然后单击 Check Room Availability 按钮。由于客房预订数据库中的样例数据表明只有单人间可以预订,现在 BookRoom 表单出现,如图 3 所示:


图 30. BookRoom 表单

您也可以观察到,EnterRoomInformation 活动已经在您之前指定的位置保存了客房预订汇总 JasperReports 报告的一个 PDF 版本。


结束语

在这个 两部分系列 文章中,您使用 Bonita 配置和执行了一个简单的酒店客房预订工作流作为一个 BPM 应用程序,也将您的工作流和两个外部应用程序连接起来。在这个配置中您所要做的就是使用 Bonita 的图形化工作流和表单编辑器,而不用编写任何 Java 代码。

与外部应用程序连接几乎在所有 BPM 应用程序中都是必须的。大多数实际 BPM 应用程序需要超过多个 BPM 引擎和许多其他非 BPM 外部应用程序共同工作。目前,没有标准 Java API 可用来描述一个 BPM 工具如何连接外部应用程序,以及不同 BPM 工具如何彼此相互连接。为此,每个 BPM 工具必须设计某种接口机制,比如 Bonita 的连接器机制。如果开发一个标准 Java BPM API — 定义一个 BPM 工具或其他应用程序如何公开其功能来集成到工作流 — 此接口机制可以实现无缝连接。



下载

描述 名字 大小 下载方法 本文的 BPMN、JRXML 和 Readme.txt 文件 j-bpm2.zip 11KB HTTP

关于下载方法的信息


参考资料

学习

  • Object Management Group/Business Process Management Initiative:查看 BPMN 规范和其他 BPMN 资源。

  • Bonita Open Solution:访问 Bonita web 网站。

  • Building your BPM applications with Bonita Runtime - Part 1Building your BPM applications with Bonita Runtime - Part 2:在 Bonita 网站的这些教程,进一步了解关于使用 Bonita 运行时引擎。

  • BPMN 2.0 新功能:观看此视频,了解 Bonita 中部分可用的 BPMN 2.0 的新功能。

  • BPMN Modeling and Reference Guide:Understanding and Using BPMN(Stephen A. White 和 Derek Miers,Future Strategies,2008 年):该指南的纸质版和电子版均可购买。

  • JasperReports 3.6: Using Multiple Relational Databases to Generate a Report”(Bilal Siddiqui,Packt Publishing,2010 年 6 月):学习如何使用 JasperReports 和 PostgreSQL 这类关系数据库。此外,JasperReports 3.6 Development Cookbook免费样例章 介绍了 JRXML 设计。

  • Struts,MVC 的一种开放源码实现 ”(Malcolm Davis, developerWorks,2001 年 2 月):在您的 web 应用程序中学习实现 MVC 设计模式。

  • developerWorks Java 技术专区:查找数百篇关于 Java 编程各方面的文章。

获得产品和技术

  • Bonita Open Solution:下载 Bonita,本文使用版本 5.2.2。

  • PostgreSQL:下载 PostgreSQL。

  • JasperReports:下载 JasperReports。

讨论

  • 加入 My developerWorks 中文社区

关于作者

Bilal Siddiqui 是一名电子工程师、XML 顾问,以及 WaxSys 公司的联合创始人之一,该公司专注于简化电子商务。自 1995年从巴基斯坦拉合尔工程技术大学毕业获得电子工程学位后,他就开始设计工业控制系统的软件解决方案。后来,他转向 XML 并运用在 C++ 方面的的编程经验构建基于 Web 和 WAP 的 XML 处理工具、服务器端解析方案以及服务应用程序。Bilal 还是一位技术推广者,常撰写技术书籍并出版。