流程中的某个任务由指定的group来完成,其中group由多个user组成。 一、直接指定办理组 1、流程图 2、部署和启动流程 //部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResou ......
流程中的某个任务由指定的group来完成,其中group由多个user组成。
一、直接指定办理组
1、流程图
2、部署和启动流程
//部署流程
@test
public void bushu() {
inputstream inputstream = this.getclass().getresourceasstream("grouptask.zip");
zipinputstream zipinputstream = new zipinputstream(inputstream);
repositoryservice repositoryservice = processengine.getrepositoryservice();
deployment deploy = repositoryservice.createdeployment().name("请假流程")
.addzipinputstream(zipinputstream).deploy();
system.out.println("部署成功:部署id"+deploy.getid());
}
//启动流程
@test
public void startprocess() {
runtimeservice runtimeservice = processengine.getruntimeservice();
processinstance processinstance = runtimeservice.startprocessinstancebykey("myprocess");
system.out.println("流程启动成功,流程实例id为:"+processinstance.getid());
}
流程启动之后,任务表中的办理人为空,存放流程办理人的信息表中有八条数据,每个人既是参与者,又是申请者:
3、查询组任务
此处的张三,可以是李四,王五或者赵六,得到的结果一样,每个人都可以看到此任务。
//查询组任务
@test
public void findgrouptask() {
taskservice taskservice = this.processengine.gettaskservice();
list<task> list = taskservice.createtaskquery().taskcandidateuser("张三").list();
if (null != list && list.size() > 0) {
for (task task : list) {
system.out.println("任务id:" + task.getid());
}
}
}
4、任务拾取
任务拾取后组任务变成个人任务。
//任务拾取
@test
public void claim() {
string taskid="2504";
taskservice taskservice = this.processengine.gettaskservice();
taskservice.claim(taskid, "张三");
system.out.println("任务拾取成功");
}
5、任务回退(设置办理人为空)
// 任务回退
@test
public void claimback() {
string taskid="2504";
taskservice taskservice = this.processengine.gettaskservice();
taskservice.setassignee(taskid, null);
system.out.println("任务回退成功");
}
在实际开发中:由主任务办理人去设置组任务的办理人,设置时应将组任务办理人查出进行选择。目的就是让组任务变成个人任务。
6、查询组任务成员列表
// 查询组任务成员列表
@test
public void findgroupuser(){
string taskid = "2504";
list<identitylink> list = processengine.gettaskservice()//
.getidentitylinksfortask(taskid);
//list<identitylink> list = processengine.getruntimeservice()//
// .getidentitylinksforprocessinstance(instanceid);
for(identitylink identitylink:list ){
system.out.println("userid="+identitylink.getuserid());
system.out.println("taskid="+identitylink.gettaskid());
system.out.println("piid="+identitylink.getprocessinstanceid());
system.out.println("type="+identitylink.gettype());
system.out.println("######################");
}
}
二、使用流程变量指定办理组
1、流程图
2、在启动时设置办理人
//启动流程
@test
public void startprocess() {
runtimeservice runtimeservice = this.processengine.getruntimeservice();
string processdefinitionkey = "myprocess";
map<string,object> variables=new hashmap<>();
variables.put("usernames", "张三,李四,王五,赵六");
runtimeservice.startprocessinstancebykey(processdefinitionkey,variables);
system.out.println("流程启动成功");
}
三、使用监听器指定办理组
指定步骤与个人任务指定一致。
四、总结
组任务及三种分配方式,
1,在taskprocess.bpmn中直接写 candidate-users=“小a,小b,小c,小d"
2,在taskprocess.bpmn中写 candidate-users =“#{userids}”,变量的值要是string的。
使用流程变量指定办理人
map<string, object> variables = new hashmap<string, object>();
variables.put("userids", "大大,小小,中中");
3,使用tasklistener接口,使用类实现该接口,在类中定义,
//添加组任务的用户
delegatetask.addcandidateuser(userid1);
delegatetask.addcandidateuser(userid2);
组任务分配给个人任务(认领任务),
processengine.gettaskservice().claim(taskid, userid);
个人任务分配给组任务,
processengine.gettaskservice(). setassignee(taskid, null);
向组任务添加人员,
processengine.gettaskservice().addcandidateuser(taskid, userid);
向组任务删除人员,
processengine.gettaskservice().deletecandidateuser(taskid, userid);
个人任务和组任务存放办理人对应的表,
act_ru_identitylink表存放任务的办理人,包括个人任务和组任务,表示正在执行的任务
act_hi_identitylink表存放任务的办理人,包括个人任务和组任务,表示历史任务
区别在于,如果是个人任务type的类型表示participant(参与者)
如果是组任务type的类型表示candidate(候选者)和participant(参与者)