概述
IBM BPM 的前身是 Lombardi,是由 IBM 于 2009 年收购的产品,之后产品更名为 IBM WebSphere Lombardi Edition,目前最新版本称为 IBM BPM V7.5。IBM BPM 提供了强大的业务流程管理(BPM)功能,而且通过 IBM BPM 所支持的 Portal 和可定制的 Coach,使得客户可以直接通过 Web 的方式与 BPM 的业务流程进行交互。但是由于用户需求的的多样性以及 Coach 所提供的功能的局限性,加上 JSP 与 JS 结合的灵活性,使得通过广泛的 Web 技术以充分利用 IBM BPM 的业务流程管理功能成为一种需要。 本文针对目前 BPM 市场主流的一款重磅产品 IBM Business Process Management, 首先从 IBM BPM 的一些背景、基础框架和产品使用基础知识进行了介绍,然后结合一个具体的业务实例来分析采用 IBM BPM 实现 Business Process 应用的一些优势和技术 / 产品选型策略,同时给出如何使用 IBM BPM 来开发一个具体的业务流程的案例实践,能够帮助 IBM BPM 的初学者快速的入门,并快速构建一个功能简单但是相对完整的 BPM 项目。
IBM Business Process Management 介绍
商业流程,或者称为业务流程,其高可用性已经成为市场的一个共同的目标。越来越多的公司将通过业务流程有效的增加客户价值定为自己的商业目 标。大部分公司已经意识到传统的“以代码功能为核心”的软件开发工具和开发方式已经不能满足“以人为中心”的商业目标,而日渐重要的流程管理,如工作流、 任务管理和流程模拟等,使得流程带来了越来越多的商业价值。而目前市场上并没有一个完整的包含了流程开发、测试、分析、模拟、统计及部署应用的一体化工 具。
IBM BPM 正是为了解决这一问题而产生,它使用基于 Java,J2EE 和 XML 等工业标准技术,开发出各种各样的用户应用程序,包括 Process Modeler、Service Modeler 、Process Inspector 、Process Optimizer、Process Portal、Process Coaches、Console 等,它们通过共享同一个模型来满足不同背景的人参与到流程的生命周期中。
IBM BPM 的总体架构包含了服务器和客户端两部分,其中客户端包括了以 Eclipse 为基础的 Process Designer ( 旧版本中称为 Lombardi Authoring Environment),以及基于 Web 的 Process Center Console,Performance Admin Console、 Process Admin Console 和 Process Portal,而服务端包括 Process Center、Process Server 及 Performance Data Warehouse。它们在 IBM Business Process Manager 中的作用如表 1 所示:
表 1. IBM BPM 组件介绍
组件功能
Process Center
为 Process Designer 和 Process Center 控制台提供一个集成式的开发环境和共享存储库,它包括了 Process Center Server 和 Performance Data Warehouse 两个组件。
Process Server
用于执行流程和服务,它内置于 Process Designer 中,存储在 Process Center Repository 中。
Performance Data Warehouse
收集和分类流程执行的数据。
Process Center Console
管理和维护 IBM BPM 的存储库,包括管理流程应用、工作空间和快照以及将流程应用安装到运行时环境。
Process Designer
包括了一系列的图形用户界面使用户可以方便的建模、实现、模拟以及查看商业流程。
Integration Designer
集成式的设计、开发环境。
Process Portal
提供了一个集成的界面使得流程的参与者可以方便的执行被分配的任务、查看历史任务以及团队的工作效率等。通过 Process Portal,用户可以方便的连上 Process Center Server 或者 Process Server
Process Admin Console 及 Performance Admin Console
配置及维护 Process Center 和 Performance Data Warehouse
各种客户端通过服务端与各种实际环境相关联,他们也可以直接与实际的环境联系起来。关系如图 1 所示:
图 1. 客户端、服务端及运行环境关系
回页首
实例背景
本文实例来自于 RAPID Process 解决方案。The Remote Access and Processing of
Image Documents (RAPID) 是一个用来接收、处理、审批和存储用户电子文档的工作流平台,
主要是用来提高电子文档的审批和归档效率。本文采用了其中一个最典型的实例(发票审核流程)来作为本文流程建模和应用开发的实例。流程的用户场景如图 2
所示:
如上图所示,“COCE_GIW_ALL_Index”节点对应了录入员录入发票基本信息的动
作,“COCE_GIW_ROBF_DuplicateCheck”节点对应了重复性检查的动作,“Approve”节点对应了各级发票审核的动
作,“SendMail”节点用于给各级审核者发送邮件,审核者通过邮件中的链接登录系统并审核对应的发票。整个流程类似于图 2 中所示用户场景。
回页首
构建一个业务流程定义
本文使用 Process Designer(文中简称 PD)作为流程开发环境,其过程中所涉及的操作流程与旧版本的 Authoring
Environment 相同,如果本机环境中没有,可从 http://[your-ibm-bpm-server]:[port
number]/ProcessCenter/ 上进行下载。
双击 PD 图标链接在对应的用户名、密码位置输入合法用户名 / 密码,点击“登录”按钮即可登录开发工具。默认的页面为 Process Center 页面的 Process App 标签页,如果没有选中该标签页,点击即可选中。页面中会显示已经存在的 Process App。确保选中“Process App”选项卡,点击右边的“新建 Process App”按钮在弹出的窗口中填入 Process App 的名称,它的缩写名以及 Process App 的描述,“首字母缩写”中信息为“RAPSIM2”,该信息将用于在 Web 系统中确定需要交互的 Process App。填写完成后点击“创建”按钮,完成 Process App 的创建并回到 Process Center 页面,此时,将会看见你所创建的 Process App,点击对应的流程应用右边的“在 Designer 中打开”,将会打开 Designer 页面,AE 会默认切换到“设计器”页面。点击“流程”右边的“+”号,会弹出“新建”对话框,选择其中的“业务流程定义”,会弹出“新建业务流程定义”对话框,填写业务流程名称 SimpleRapidBPD,并点击“完成”按钮。完成后,AE 会回到设计器页面,并默认打开刚创建的流程定义的“概述”选项卡,如图 4 所示:
图 4. 查看 BPD 概述
如上图所示,在“概述”选项卡下可以看见“系统标识”,此为该业务流程定义的系统标识。该系统标识将用于在 Web
系统中用于确定需要交互的业务流程定义(Business Process Definition,简称
BPD)。选择旁边的“图”选项卡,查看所生成的流程图,我们会看到在不做任何流程定义的情况下,工具已经定义好了两个泳道
------“参与者”泳道和“系统”泳道,以及“开始”和“结束”节点。此时不必做任何修改。分别点击“参与者”泳道和“系统”泳道,可以看出“系统”
泳道的属性标签页下的“是系统泳道”复选框是默认勾选的,而“参与者”泳道没有勾选。
在设计器的右边选择“Activity”图标,然后点击“开始”和“结束”节点的空白区域,选择下方的“属性”标签,在“名称”字段中填入“COCE_GIW_ALL_Index”。按照以上的步骤,完成流程中所有节点的定义,节点信息如表 2:
表 2. BPD 节点信息
节点类型节点名称所在泳道
Activity
COCE_GIW_ALL_Index
参与者
Activity
COCE_GIW_ROBF_DuplicateCheck
系统
DecisionGateway
LoopDecision
参与者
EndExceptionEvent
EndException
系统
Activity
SendMail
系统
Activity
Approve
参与者
完成后如图 5 所示:
图 5. 完成 BPD 节点定义
XML error:
The image is not displayed because the width is greater than the maximum
of 580 pixels. Please decrease the image width.
双击业务流程定义中“COCE_GIW_ROBF_DuplicateCheck”的节点,详细编辑节点的子步骤。选择 Common
区域中的“Nested
Service”,在其“Properties”选项卡下的“Implementation”中的“AttachedService”区域中,点击右边的
“Select”按钮,在弹出的页面中选择“Read From HTTP”服务,最后用“序列流”将整个子步骤连接起来,完成后如图 12 所示:
WwebAPI = WebAPIUtil.getWebAPIConnection(username, password,webAPIProperty);
// execute query to get the process instance list
SearchResultRow[] rrs = getActiveInstanceList();
// generate XML data
String xmloutput = getXMLDataFromSearch(rrs);
其中第一行代码展示了通过先前创建的辅助工具类获取 WebAPI 的实例,第三个参数为配置文件所在的路径。第二行代码通过调用一个方法获取查询的结果了数组,最后通过该数组生成需要返回的 XML 字符串,其中获取查询结果的代码如下:
清单 4. 获取查询结果的代码片段
Search se = new Search();
se.setOrganizedByType("ProcessInstance");
SearchResults sr = null;
// set search column for the search and search result
SearchColumn searchColumn1 = new SearchColumn();
searchColumn1.setType("ProcessInstance");
searchColumn1.setName(SearchableProcessInstanceColumn._Id);
SearchColumn searchColumn2 = new SearchColumn();
searchColumn2.setType("ProcessInstance");
searchColumn2.setName(SearchableProcessInstanceColumn._Name);
// set the condition
SearchColumn searchColumn3 = new SearchColumn();
searchColumn3.setType("ProcessInstance");
searchColumn3.setName(SearchableProcessInstanceColumn._Status);
SearchCondition searchCondition1 = new SearchCondition();
searchCondition1.setColumn(searchColumn3);
searchCondition1.setOperator("EQUALS");
searchCondition1.setValue("Active");
// create data
SearchColumn[] scs = new SearchColumn[2];
scs[0] = searchColumn1;
scs[1] = searchColumn2;
SearchCondition[] sCond = new SearchCondition[1];
sCond[0] = searchCondition1;
// do the search
se.setColumns(scs);
se.setConditions(sCond);
try {
sr = webAPI.executeSearch(se, null, null);
} catch (RemoteException e) {
e.printStackTrace();
}
return sr.getRows();
// get process instance by its ID
ProcessInstance proIn = webAPI.getProcessInstance(instanceID);
logger.info("Process Instance : " + proIn.getName()+ " start to be disposed");
if (null != proIn) {
Task[] tasks = proIn.getTasks();
if (null != tasks && tasks.length > 0) {
// get the index task
currentTask = tasks[0];
if (!checkTaskAttribute(currentTask)) {
// just the the return result
retResult = false;
} else {
// forward the task
retResult = webAPI.completeTask(currentTask.getId(), vars);
}
}
}
while (alive) {
if (null == dirPath || "".equals(dirPath)) {
if (null != properties) {
String contextpath = properties.get("contextPath");
String dir = properties.get("base_dir");
// make dirPath from context path and base dir
dirPath = contextpath + dir;
} // if inner
} // if outer
File fileDir = new File(dirPath);
if (!dirValidation(fileDir)) {
break;
}
File[] files = fileDir.listFiles();
if (null != files && files.length > 0 && isFileModified(fileDir)) {
for (File f : files) {
if (f.isDirectory()) {
continue;
}
startProcessInstance(f.getPath());
} // for loop
} // if outer
} // while loop
// get Process instance
Process pro;
try {
pro = webAPI.getProcessBySystemId(appAcronym, systemID);
// launch the ProcessInstance instance
proInst = webAPI.startProcess(pro, vars);
logger.info(proInst.getName() + "has been launched");
} catch (RemoteException e) {
e.printStackTrace();
}
首先通过 WebAPI 的 getProcessBySystemId 方法获取对应的流程定义,该方法需要两个参数,第一个为
Process App 的简短名称,即前述创建 Process App 时填写的首字母缩写,此处为“RAPSIM2”。第二个参数为该
Process 的系统 ID。获取 Process 对象之后,通过 startProcess 即可启动一个流程实例,其中第一个参数为
Process 对象,第二个参数为需要传递的参数,是一个 Variable 数组类型的数据对象。
所有模块构建完毕之后,即可运行该 BPM 应用程序。首先启动所使用的 Web 服务器。如果 IBM BPM
的服务器没有启动,需要先等待 IBM BPM 服务器启动,并通过 Authoring Environment
查看流程运行情况。此时,在控制台视图中,可以查看到如图 15 所示的信息:
此时不再有新的活动产生,流程实例状态更新为“已完成”,即流程结束。此时点击“执行状态”中的“SimpleRapidBPD”,选择“变
量”选项卡,点击“currentApprovalStatus”变量,可查看到其值为
false,表明当前由于某一级审核被“拒绝”使得流程提前结束,否则其值为 true。自此整个 BPM 应用程序构建完成,流程运行结束。
回页首
结束语
本文中使用了 IBM BPM 的 Web API 作为 J2EE 系统和 BPM 系统交互的方式,在最新版的 IBM BPM
系统中提供了基于 REST 的 API,在使用方式和技术上有了很大的提升,感兴趣的读者可以根据本文章做适当的修改。文章着重于 IBM BPM
系统和 J2EE 系统的集成,在设计方面完全使用纯 J2EE 技术,即 JSP 加上 Servlet 的传统方式。如果考虑使用 IBM BPM
自带的 Coach 作为展示层,可查看相关资料。由于时间所限,本文中 BPM 对外部系统的调用使用的是最简单的 HTTP
的方式,有兴趣的读者可以使用 BPM 中的内置服务调用外部系统所暴露出的 Web Service 来完成交互。文中没有使用复杂的 JS
作为服务端脚本完成复杂的后台逻辑,在本文后续版本中可能会有相关实现。
回页首
致谢
感谢 IBM CDL 上海的周镇焕(zhouzhenhuan@cn.ibm.com)在各方面的大力支持。
参考资料 学习
在
“developerWorks BPM 专区”获取 IBM BPM 解决方案的最新技术资源,其中包括教程、技术文章、下载、网络广播等等。
IBM Business Process Manager 信息中心 : 这里是 BPM 资源最全的站点,包括了相关的安装、配置、开发方面的内容,您可以了解更多关于 IBM BPM 的配置,开发,使用手册以及常见问题解决的建议。
工作流模式 : 向您介绍了各种工作流设计模式。
IBM Business Process Management 期刊 ,
致力于为业务人员和 IT 专业人员提供关于 IBM 业务流程管理(BPM,Business Process Management
)工具与技术的最新信息。该期刊分为特色文章、问与答、专家访谈等栏目,内容上涵盖了 IBM
业务流程管理核心产品的功能介绍,最佳实践,常见问题的解答集锦等方面的内容。