Activiti委托与解决委托
原创文章:转载请备注:原创文章地址
前言:
我觉得代码能看的懂得也就没必要看下面的的,所以先上代码:
/** * 将指定任务进行委托处理 * * @param taskId * @param assignee */ public static void delegateTask(String taskId, String assignee) { taskService.delegateTask(taskId, assignee); }
/** * 根据taskId解决被委托的任务,动态传值设置变量 */ public static void resolveTask(String taskId, Map<String, Object> variables) { //根据taskId提取任务 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task.getOwner() != null && !task.getOwner().equals("null")) { DelegationState delegationState = task.getDelegationState(); if (delegationState.toString().equals("RESOLVED")) { System.out.println("此委托任务已是完结状态"); } else if (delegationState.toString().equals("PENDING")) { //如果是委托任务需要做处理 taskService.resolveTask(taskId, variables); } else { System.out.println("此任务不是委托任务"); } } }
/** * 根据taskId解决被委托的任务并进行到下一个节点,动态传值设置变量 */ public static void resolveTask(String taskId, Map<String, Object> variables) { //根据taskId提取任务 Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); if (task.getOwner() != null && !task.getOwner().equals("null")) { DelegationState delegationState = task.getDelegationState(); if (delegationState.toString().equals("RESOLVED")) { System.out.println("此委托任务已是完结状态"); } else if (delegationState.toString().equals("PENDING")) { //如果是委托任务需要做处理 taskService.resolveTask(taskId); taskService.complete(taskId, variables); } else { System.out.println("此任务不是委托任务"); } } }
正文:
第一次写博客,不怎么会描述,所以由简单的功能开始写,请见谅。。。
我们常常在业务场景中会有这样的需求,我需要将自己的任务委托给另外一个人,同时需要获取委托人和被委托人的信息,也需要知道此任务是正在被委托,还是委托人已完成此时,我们就需要用到Activiti中的委托功能:
这是一条普通的任务,我们现在看数据库中:
我们取出当前我们所需要的数据:
对比任务的id我们看到第一条是当前我们需要观测的数据:
接下来开始功能
此时再次查看信息:
对比委托之前的数据我们发现发生了一些变化:
DELEGATION_字段的值变化为PENDING,表示此任务为正在执行的委托任务;
OWNER_字段表示委托人;
ASSIGNEE_表示当前任务处理人;
接下来
此时的DELEGATION_字段的值变化为RESOLVED,表示此任务为被解决的委托任务;
ps:1.有一点需要注意一下,Activiti是歪果仁写的,歪果仁与我们想法不太一样,他们认为委托任务必须有解决委托这一步骤,当解决委托后,流程并不是进行到下一个节点,而是需要被委托人有完成任务操作时方可进行到下一步,而中国式需求中大多都是解决委托就是完成任务,需要解决这个问题的话可以在调用解决委托后执行一个完成任务代码操作
2.委托任务如果不解决委托将无法进行到下一个节点,完成任务时将直接抛出异常:
所以完成任务要判断是否为委托任务。