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

09给任务指定办理人的方式

程序员文章站 2022-08-11 19:10:28
一、流程图 二、分配个人任务的方式 1、直接指定办理人 说明:这样分配办理人不够灵活,因为项目开发中任务的办理人不要放置在XML当中实际开发中办理人是不固定的。 2、使用流程变量指定办理人 2.1 流程图中的设置 说明:在Activiti中#{username}和${username}的意义是一样的 ......

一、流程图

 
 09给任务指定办理人的方式

 

 

二、分配个人任务的方式

1、直接指定办理人

 09给任务指定办理人的方式

 

 

说明:这样分配办理人不够灵活,因为项目开发中任务的办理人不要放置在xml当中实际开发中办理人是不固定的。

2、使用流程变量指定办理人

2.1 流程图中的设置

 09给任务指定办理人的方式

 

 

说明:在activiti中#{username}和${username}的意义是一样的。

2.2 流程运行

//部署流程
    @test
    public void bushu() {
        inputstream inputstream = this.getclass().getresourceasstream("taskman.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();
        map<string,object> vars = new hashmap<string,object>();
        vars.put("username", "张三");
        processinstance processinstance = runtimeservice.startprocessinstancebykey("myprocess",vars);
        system.out.println("流程启动成功,流程实例id为:"+processinstance.getid());
    }
    
    //任务查询
    @test
    public void findtask() {
        taskservice taskservice = processengine.gettaskservice();
        task task = taskservice.createtaskquery().taskassignee("张三").singleresult();
        system.out.println("张三的任务id:"+task.getid());//张三的任务id:2505
    }
    
    //完成任务,并制定下一任务办理人
    @test
    public void dotask() {
        taskservice taskservice = processengine.gettaskservice();
        map<string,object> vars = new hashmap<string,object>();
        vars.put("username", "李四");
        taskservice.complete("2505",vars);

    }

3、使用类指定办理人(使用监听器指定办理人)

作用:当任务到达相应的节点时,会触发监听,让监听器去指定下个任务的办理人。

3.1 创建监听器类(实现tasklistener接口)

//监听器
public class tasklistenerimpl implements tasklistener {

    @override
    public void notify(delegatetask delegatetask) {
        system.out.println("流程到了指定节点");
        delegatetask.setassignee("李四");
    }
}

3.2 流程图的变化

设置第二个节点的办理人为空:
09给任务指定办理人的方式

 

 

 
为第二个节点添加监听器:
 09给任务指定办理人的方式

 

 

流程运行到此节点之后,会触发监听器,为此节点设置办理人。

4、总结

个人任务及三种分配方式:

    1,在taskprocess.bpmn中直接写 assignee=“张三丰"

    2,在taskprocess.bpmn中写 assignee=“#{userid}”,变量的值要是string的。

         使用流程变量指定办理人

    3,使用tasklistener接口,要使类实现该接口,在类中定义,

         delegatetask.setassignee(assignee);// 指定个人任务的办理人

     使用任务id和办理人重新指定办理人:

     processengine.gettaskservice().setassignee(taskid, userid);