当前位置: 移动技术网 > IT编程>开发语言>Java > 10组任务

10组任务

2019年12月26日  | 移动技术网IT编程  | 我要评论
流程中的某个任务由指定的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(参与者)

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网