基于jeecgboot的flowabale流程节点动态设置审批人的实现

简介: 基于jeecgboot的flowabale流程节点动态设置审批人的实现

  有些网友希望通过表单的内容来动态决定流程审批人,因为比较个性化,所以需要一个相对通用的方法来实现,想到的是任务监听器,一般都是发起的时候来确定下一个流程审批人,所以可以在第一个发起人这里进行任务监听。

   一、SetAssigneeTaskListener 监听器例子如下:

package com.nbcio.modules.flowable.listener;
import org.flowable.engine.TaskService;
import org.flowable.engine.delegate.TaskListener;
import org.flowable.task.service.delegate.DelegateTask;
import org.jeecg.common.util.SpringContextUtils;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
/**
 * 根据表单内容动态设置审批人
 * @author nbacheng
 * @date 2023-3-02
*/
public class SetAssigneeTaskListener implements TaskListener{
  private static final long serialVersionUID = 1L;
  private TaskService taskService = SpringContextUtils.getBean(TaskService.class);
  
  @Override
  public void notify(DelegateTask delegateTask) {
    
    String processInstanceId = delegateTask.getProcessInstanceId();
    String processDefinitionId = delegateTask.getProcessDefinitionId();
    String taskId = delegateTask.getId();
    String newAssignee;
    
    //表单里面的值,相关逻辑可以根据自己需要进行处理   
    String formvalue = delegateTask.getVariable("assigneeId").toString().trim();
    
    if (StringUtils.equals(formvalue, "admin")) {
      newAssignee = "admin";
    }
    else if (StringUtils.equals(formvalue, "zhangsan")) {
      newAssignee = "zhangsan";
    }
    else {
      newAssignee = "jeecg";
    }
    Map<String, Object> map = taskService.getVariables(taskId);
    map.put("SetAssigneeTaskListener", newAssignee);
    taskService.setVariables(taskId, map);
  }
}

二、设置流程图如下:

三、表单设置如下:

 

四、在启动流程的setNextAssignee里增加下面的代码,就是判断是否通过动态设置审批人的任务监听器进行流程人员的动态设置

// 获取下一个节点数据及设置数据
      FlowNextDto nextFlowNode = flowTaskService.getNextFlowNode(task.getId(), variables);
      if(Objects.nonNull(nextFlowNode)) {
        Map<String, Object> nVariablesMap = taskService.getVariables(task.getId());
        if (Objects.nonNull(task)) {
          if(nVariablesMap.containsKey("SetAssigneeTaskListener")) {//是否通过动态设置审批人的任务监听器
            taskService.complete(task.getId(), variables);
            Task nexttask = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).active().singleResult();
            taskService.setAssignee(nexttask.getId(), nVariablesMap.get("SetAssigneeTaskListener").toString());
            return Result.OK("通过动态设置审批人的任务监听器流程启动成功.");
            }
        }

四、效果图


相关文章
22activiti - 流程管理定义(查询流程状态)
22activiti - 流程管理定义(查询流程状态)
146 0
|
7月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
642 0
|
7月前
|
前端开发
基于jeecgboot的flowable流程增加节点自动跳过功能
基于jeecgboot的flowable流程增加节点自动跳过功能
511 2
|
7月前
基于jeecgboot的flowable流程增加节点表单的支持(三)
基于jeecgboot的flowable流程增加节点表单的支持(三)
155 1
|
7月前
|
前端开发
基于jeecgboot的flowable流程增加节点表单的支持(四)
基于jeecgboot的flowable流程增加节点表单的支持(四)
84 1
|
7月前
|
前端开发
基于jeecgboot的flowable增加流程节点抄送功能
基于jeecgboot的flowable增加流程节点抄送功能
561 0
|
7月前
Flowable流程中自定义业务表单并行审批的bug修复
Flowable流程中自定义业务表单并行审批的bug修复
149 0
|
7月前
基于jeecgboot的flowable流程增加节点表单的支持(二)
基于jeecgboot的flowable流程增加节点表单的支持(二)
92 0
|
7月前
基于jeecgboot的flowable流程增加节点表单的支持(一)
基于jeecgboot的flowable流程增加节点表单的支持(一)
91 0
|
7月前
宜搭的系统中如何在申请流程的时候,增加一个预览的界面
宜搭的系统中如何在申请流程的时候,增加一个预览的界面