动手实现了一下activiti下实现中国特色的逐级审批。
准备工作是写一个人力资源服务类并将它注入到applicationContext;这个服务类就是模拟上下级关系:kermit -> gonzo -> fozzie ->john. 这个类在流程中的作用就是查找用户的直接上级;
public class HumanService {
public String getDirectLeader(String user){
if("kermit".equals(user)){
return "gonzo";
}
else if("gonzo".equals(user)){
return "fozzie";
}
else if("fozzie".equals(user)){
return "john";
}
else{
return null;
}
}
}
<bean id="humanService" class="test.basic.HumanService" />
新建一个流程,有两个人工任务:员工提交一个休假请求,老板逐级审批。
有一个流程变量叫做currentOperator, 用来存放当前操作人;在流程开始节点的表单上我定义了一个field映射到currentOperator(这样做只是为了图省事,没有其他目的)
用户提交请求的任务上定义两个表单字段,分别表示请假天数和原因,当然他们也和同名的流程变量对应;同时我给该节点分配的assignee为kermit以方便测试;
在老板审批节点上,设置assignee为表达式${humanService.getDirectLeader(currentOperator)}。意义不用我多说;
审批节点定义一个field用来接收当前操作人,并映射为流程变量currentOperator.
设置multi instance选项, Sequential=true,因为逐级审批,所以需顺序执行;loop cardinality=10, 为什么设置这个呢?因为如果一个节点需多次运行,则至少要设置运行次数或者遍历对象collection.对于逐级审批来说,这两个都不适合为固定量,因 为人事结构可能随时变化;所以我耍了点小聪明,设置运行次数loop cardinality绝对大于可能的运行次数,同时设置结束条件completion
condition=${humanService.getDirectLeader(currentOperator)==null}, 即当找不到操作人的上级的时候就该结束了。
下面是测试用例:
public class TestMultiInstance extends TestCase {
private static final Logger log = LoggerFactory.getLogger(Test.class);
public void test() throws InterruptedException {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
RuntimeService runtimeService = (RuntimeService) ctx
.getBean("runtimeService");
ProcessEngine processEngine = (ProcessEngine) ctx
.getBean("processEngine");
FormService formService = processEngine.getFormService();
TaskService taskService = (TaskService) ctx.getBean("taskService");
Map map = new HashMap();
map.put("currentOperator", "kermit");
// start a process multiInstanceTest;
runtimeService.startProcessInstanceByKey("multiInstanceTest", map);
// query kermit's tasks;
List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit")
.list();
for (Task task : tasks) {
Map info = new HashMap();
map.put("leaveDays", "12");
map.put("leaveReason", "I will go home");
// complete kermit's task with assigned parameters;
taskService.complete(task.getId(), info);
}
// query gonzo's tasks;
tasks = taskService.createTaskQuery().taskAssignee("gonzo").list();
for (Task task : tasks) {
System.out.println("gonzo has job to do");
Map info = new HashMap();
info.put("currentOperator", task.getAssignee());
// complete gonzo's task;
taskService.complete(task.getId(), info);
}
// query fozzie's tasks;
tasks = taskService.createTaskQuery().taskAssignee("fozzie").list();
for (Task task : tasks) {
System.out.println("fozzie has job to do");
Map info = new HashMap();
info.put("currentOperator", task.getAssignee());
// complete fozzie's task;
taskService.complete(task.getId(), info);
}
// query john's tasks;
tasks = taskService.createTaskQuery().taskAssignee("john").list();
for (Task task : tasks) {
System.out.println("john has job to do");
Map info = new HashMap();
info.put("currentOperator", task.getAssignee());
//complete john's task;
taskService.complete(task.getId(), info);
}
}
}
测试结果:
kermit has job to do
gonzo has job to do
fozzie has job to do
john has job to do
所以综上,在流程系统提供一定的基础设施(如HumanService和表单引擎)的情况下, 可以不编写任何代码而配置一个逐级审批模型出来。
分享到:
相关推荐
伪汇总审批,就是每一条流程都是独立的,这些独立的流程在走到某个节点的时候,这个节点的审批人可以一次性进行多个任务的审批
activiti代码实现审批流程的审批功能,可以正常运行,我已经调试通过
activiti实例,自我开发使用,入门级别
基于activiti的工作流审批,是一个完整的示例,可以直接运行,包含(数据表结构、工具类,代码)注释非常清楚。是一个比较容易上手的完整案例
sharepoint online 工作流审批,多级工作流审批,非常好,需要的朋友可以下载,非常非常好
该系统功能强大,该系统基于Activiti5工作流编写的财务审批系统,该系统可以进行二次开发
Activiti 学习笔记六:流程执行历史记录
activiti 5.22 explorer的war包
在用activiti的时候经常遇到取会签人员的问题,这个文档解决怎么获取会签人员。
Activiti工作流示例ActivitiDemo 本示例带有全部源码,详细使用Canvas动画演示了Activiti工作流引擎的使用。非常实用,非常先进和完整。希望您会喜欢。
时间:2015年6月30日17:19:45 ...我深知刚刚学习activiti的心情,什么都不懂,都不知道如何创建一个activiti项目,所以我写了这个web项目供大家参考,这仅仅只是个demo,大家可以在这上面进行扩展。
activiti的jar包
自己写的体现activiti的扭转的过程的demo。组件用的不是很多,但是基本上常用的都具备。数据库是mysql,spring3.0.activiti5.13的数据库脚本。如何无法执行,将错误贴到回帖,下一次解答
《Activiti实战》 一共四个部分:准备篇(1~2章)介绍了Activiti的概念、特点、应用、体系结构,以及开发环境的搭建和配置;基础篇(3~4章)首先讲解了Activiti Modeler、Activiti Designer两种流程设计工具的详细...
java中Activiti工作流引擎关于- 提交审批和审批一些源码java中Activiti工作流引擎关于- 提交审批和审批一些源码
activiti部署中文乱码解决,亲测有效, 1.activiti-webapp-explorer2\src\main\webapp\editor-app\i18n下en.json 2.activiti-webapp-explorer2\src\main\resources下 activiti-custom-context.xml 3.activiti-webapp-...
构建学生请假审批流程 2.执行对象概念 3.判断流程实例状态 4.历史流程实例查询 5.历史活动查询 04 - Activiti流程变量 1.流程变量的概念 2.使用TaskService设置和获取流程变量 3.局部流程变量 4.使用...
activiti工作流的 PPT 大致讲了一下activiti的常用API
activiti-5.22.0zip下载
Activiti工作流中文开发帮助API文档说明。 Activiti工作流表结构文档说明。