欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

10组任务

程序员文章站 2022-08-11 19:29:14
流程中的某个任务由指定的group来完成,其中group由多个user组成。 一、直接指定办理组 1、流程图 2、部署和启动流程 //部署流程 @Test public void bushu() { InputStream inputStream = this.getClass().getResou ......
流程中的某个任务由指定的group来完成,其中group由多个user组成。

一、直接指定办理组

1、流程图

 10组任务

 

 

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());
    }
流程启动之后,任务表中的办理人为空,存放流程办理人的信息表中有八条数据,每个人既是参与者,又是申请者:
 10组任务

 

 

 

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("######################");
        }
    }
10组任务

 

 

二、使用流程变量指定办理组

1、流程图

 10组任务

 

 

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(参与者)