分配任务的三种方式

分配任务的几种方式

第一种:直接在bpmn文件中配置好某一个任务由谁来完成

<process id="demo" isExecutable="true">
        <startEvent id="start" name="startPoint"></startEvent>
        <userTask id="usertask" name="测试节点名称" activiti:assignee="0001"></userTask>
        <endEvent id="end" name="endPoint"></endEvent>
        <sequenceFlow id="flow1" sourceRef="start" targetRef="usertask"></sequenceFlow>
        <sequenceFlow id="flow2" sourceRef="usertask" targetRef="end"></sequenceFlow>
</process>

如上图所示,在启动任务的之前就已经设置好了只能由用户ID为“0001”的用户来办理该任务,但是这样分配任务的办理人不够灵活,因为项目开发中任务的办理人不要放置XML文件中

第二种:在启动流程的同时设置流程变量Map<String, Object> variables

<process id="demo" isExecutable="true">
        <startEvent id="start" name="startPoint"></startEvent>
        <userTask id="usertask" name="测试节点名称" activiti:assignee="#{userID}"></userTask>
        <endEvent id="end" name="endPoint"></endEvent>
        <sequenceFlow id="flow1" sourceRef="start" targetRef="usertask"></sequenceFlow>
        <sequenceFlow id="flow2" sourceRef="usertask" targetRef="end"></sequenceFlow>
</process>

 必须先在bpmn文件中将该该任务的办理人设置成变量userID后才能使用下面的Java代码

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("userID", "0001");
//启动流程实例的同时,设置流程变量
ProcessInstance pi=processEngine.getRuntimeService().startProcessInstanceByKey("demo",variables);

 在开发中,可以在页面中指定提前预先备好的审批人(即下一个任务的办理人),通过流程变量设置下一个任务的办理人

第三种:通过任务监听类,动态设置当前所创建任务的办理人

  通过实现org.activiti.engine.delegate.TaskListener类的方式来创建任务监听类TaskListenerImpl

package com.demo;
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener;

public class TaskListenerImpl implements TaskListener {
    @Override
    public void notify(DelegateTask delegateTask) {
        /**
         * 在该部分可通过个人定义的审批规则,动态获取并设置所创建任务的办理人
         */
        String assignee = "0001";
        //指定当前任务的办理人
        delegateTask.setAssignee(assignee);
    }
}

 在bpmn文件中引入对该类的使用

<process id="demo" isExecutable="true">
        <startEvent id="start" name="startPoint"></startEvent>
        <userTask id="usertask" name="测试节点名称">
            <extensionElements>
                <activiti:taskListener event="create" class="com.demo.TaskListenerImpl">
                </activiti:taskListener>
            </extensionElements>
        </userTask>
        <endEvent id="end" name="endPoint"></endEvent>
        <sequenceFlow id="flow1" sourceRef="start" targetRef="usertask"></sequenceFlow>
        <sequenceFlow id="flow2" sourceRef="usertask" targetRef="end"></sequenceFlow>
</process>

 在开发中,可以提前预置于好审批规则,例如0001的领导是0002,李四的领导是0003,这样0001提交任务,就可以查询出 0001的领导是0002,依此类推,通过监听类的方式动态设置下一个任务的办理人

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值