activiti工作流Java技术文章Activiti

Activiti进行时——企业工作流生命周期贯通

2014-12-31  本文已影响14713人  天空之诚
图1:一个典型的审批工作流程

最近做了一次对企业/云平台级工作流引擎Activiti的调查:

InfoQ上2012年4月就已有过一篇推荐Activiti的文章,本文则是笔者近2个月实战Activiti的一篇简书&共享。

背景概述

目标 ------------------------------------

  1. 用户能方便地修改流程定义的细节(例如改分歧条件、复制添加已有的类似节点),只要不涉及新的表单/服务/编程、就无需委托开发人员出马。
  2. 能以REST服务方式调用,与现有业务系统衔接。比如这次的业务系统是.Net架构,而Activiti则是Java开源引擎,但因为提供了REST API接口(且易于扩展)、能以JSON/XML方式完成轻便的数据交互。
  3. 支持BPMN 2.0国际标准(具体后述)。标准统一之争虽然往往夹杂着企业各自的便利/利益,但毕竟有其行业合理性与权威性(例如繁杂的医疗/金融/物流领域),在行业出现新的需求而升级标准时、只需升级符合新标准的引擎就能适应需求。

成果 ------------------------------------

<a id="reference" name="reference"></a>资料 ------------------------------------

调研、定制中以下一些资料较为有用,(感谢相关作者&)已有相关基础的读者可据此推断本文的参考价值。

工作流概念+BPMN标准

如果希望直接将Demo跑起来边看边理解的话,可以跳到下一节,否则就先随我把概念部分混个眼熟。

工作流概念

制作了一张工作流在生命周期中不同阶段/环节间切换的关系图:


图2:工作流生命周期

<a id="bpmn2" name="bpmn2"></a>BPMN 2.0标准

先上一张诺贝尔颁奖盛典筹备工作的设计模型图:


图3:The Nobel Prize Process Diagram

基于工业标准的工作流设计,是满足不同领域客户复杂业务需求的有力保障。

BPMN2.0标准工作流的模型编辑与保存,可以在浏览器App形式的Activiti Modeler中进行(并可以嵌入你的业务系统中),在此直接对照着Modeler的图标对主要的BPMN元素做简单介绍:

图4:Activiti Modeler Shape Repository -- BPMN2.0

<a id="env" name="env"></a>开发环境构筑:Eclipse + Maven + Tomcat + Activiti

我所使用的开发环境:


<提醒>

定制补充REST API接口打通生命周天(周期)

经历过之前的准备,便可以导入这1.5个人月调研开发的成果项目了,上图,


图5:测试入口界面(Web客户端)

如果说activiti-explorer和kft-activiti-demo都是界面友好、前端与后台并重的话,这次项目则纯粹集中在后台(封装Activiti的引擎功能),因为前端界面(包括表单编辑器、邮件末班编辑器)将由.Net页面(一个企业内部门户网站)完成,衔接关系可参见图2(生命周期)。

项目的完成可划分为6个步骤:

<a id="deploy_link"
href="${ctx}/service-ext/repository/models/deploy/<%=deploy_model_id%>?starterUser=<%=starter_user_id%>">
流程设计模型部署
</a>
再给出一段部署后、已进入工作流运行时阶段(runtime)时、模拟用户提交某份表单完成某个用户任务的JS代码:
<script type="text/javascript">
function onhandle(taskId){
var request = {
action: "complete",
assignee: "${userId}",
variables: [
{name: "complete_key_001", value: "complete_value_001"},
{name: "complete_key_002", value: "complete_value_002"},
{name: "complete_key_003", value: "complete_value_003"}
]
}
var request_json = JSON.stringify(request);
ajaxRequest("POST", "${ctx}/service-ext/runtime/tasks/complete/" + taskId, request_json, null);
}
function ajaxRequest(method, url, request, callback) {
var xhr = new XMLHttpRequest();
xhr.open(method, url, true);
if(url.indexOf("/service/")>0){
//standard activiti REST api requires 1.Auth(base64) 2.POST 3.JSON header
xhr.setRequestHeader("Authorization", "Basic " + base64.encode("kermit"+":"+""));
if("POST" === method.toUpperCase() ){
xhr.setRequestHeader("Content-Type","application/json");
}
}
else if(url.indexOf("/service-ext/runtime/process-instances")>0)
xhr.setRequestHeader("Content-Type","application/json");
else if(url.indexOf("/service-ext/runtime/tasks")>0)
xhr.setRequestHeader("Accept", "application/json");
xhr.onload = (callback!=null) ? callback : function() {
debugger;
};
xhr.send(request);
}
</script>
```

小结

本文记录了近2个月期间对开源工作流引擎Activiti做调研、贯通整个工作流生命周期(如图2)的过程,重点在于标识出同样没有相关基础的技术人员所可能碰到的陷阱、疑惑,希望能节省你的时间(少加几晚上班陪陪家人~);如有不正确/并非最优解的地方、也请有经验者指正。
因为涉及雇主利益,除了知识点之外、完整源码就不能共享了。同时,因为业务系统中已包含自主开发的“表单编辑器”与“邮件模板编辑器”,这两部分内容(包括与引擎之间的具体衔接)不涵盖在本文范围之内。

上一篇 下一篇

猜你喜欢

热点阅读