1. 在画流程图的时候可以对流程的连线设置表达式,然后在执行的时候设置流程变量值,然后activiti会根据对应的值走对应的节点
新设计流程 如下图
如果部门经理同意 提交总经理审核 不同意直接结束任务
在流程线中
启动一个流程后 数据如下:
String taskId="20008";
Map varb = new HashMap();
varb.put("message", "同意");
this.processEngineCfg.getTaskService().complete(taskId,varb);
运行后task 表中数据如下:
继续完成任务:
this.processEngineCfg.getTaskService().complete("22503");
任务结束 task表中不在有此任务流程的数据
记录表中的数据 act_hi_actinst
同意的意见位于表act_hi_varinst
2 排他网关
以下流程中 金额大于1000的总经理审批 500-1000区级 为一般审批 小于500 为一类
完成任务方式:
String taskId="27508";
Map varb = new HashMap();
varb.put("money", 860);
this.processEngineCfg.getTaskService().complete(taskId,varb);
task表中变化的数据如下:
3 并行网关:
并行网关不需要指定连线的表达式,当流程流转到并行任务时会出发多个任务,当多个任务完成后在会将流程流转到下一个节点
流程图如下:
4 个人任务的指定方式
方式一:在Assignee中指定任务具体的处理人
方式二:在Assignee中指定任务的处理人或角色变量,需要在代码中设置对应的处理人
RuntimeService rts = this.processEngineCfg.getRuntimeService();
Map<String,Object> map = new HashMap<String,Object>();
map.put("userids", "曹操");
ProcessInstance pinstance = rts.startProcessInstanceByKey("TsetPms",map);
方式三 为任务节点设置一个监听类来设置当前节点的处理人,这样就不用在assign中设定值了
创建一个监听器类,需要实现TaskListener接口
5 组任务的指定方式:
方式1 在任务的Main Config 中的Candidate user做如下配置
多人用逗号隔开,当任务到达该节点后,设置的候选人其中任何一个人都可以处理当前待办,处理完成后待办结束
方式2 在任务的Main Config 中的Candidate user设置一个变量作为处理人
然后通过启动或者执行流程向下传递的时候设置该流程变量值
RuntimeService rts = this.processEngineCfg.getRuntimeService();
Map<String,Object> map = new HashMap<String,Object>();
map.put("manyUsers", "曹操,刘备,张飞,阿斗");
ProcessInstance pinstance = rts.startProcessInstanceByKey("TsetPmsGroup",map);
方式三 个人任务的监听类一样实现TaskListener接口,然后设置CandidateUser的值为多数据