基于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("通过动态设置审批人的任务监听器流程启动成功.");
            }
        }

四、效果图


相关文章
|
5月前
|
DataWorks 安全 API
DataWorks产品使用合集之用API创建的补数据工作流,怎样才能获知工作流的运行状态
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
150 0
|
6月前
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
606 0
|
4月前
|
数据采集 DataWorks 安全
DataWorks产品使用合集之如何通过接口单独触发业务流程里面的某些节点运行
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
6月前
|
前端开发
基于jeecgboot的flowable增加流程节点抄送功能
基于jeecgboot的flowable增加流程节点抄送功能
511 0
|
6月前
Flowable流程中自定义业务表单并行审批的bug修复
Flowable流程中自定义业务表单并行审批的bug修复
136 0
|
存储 安全 搜索推荐
宜搭版本调整通知(更新)
宜搭一直致力于为用户提供更优质的使用体验。为了更好地满足广大用户需求,宜搭将于2023年7月3日进行版本调整。
11793 3
宜搭版本调整通知(更新)
|
XML 数据格式
如何使用流程 中的 DataObject 并为流程设置租户
如何使用流程 中的 DataObject 并为流程设置租户
jira学习案例98-跨组件状态管理
jira学习案例98-跨组件状态管理
101 0
jira学习案例98-跨组件状态管理
|
前端开发 测试技术 项目管理
【测试开花】二、项目管理-后端-实现新增接口
【测试开花】二、项目管理-后端-实现新增接口
【测试开花】二、项目管理-后端-实现新增接口
|
XML 数据格式
工作流 自定义表单 挂靠流程 模块设计方案
工作流 自定义表单 挂靠流程 模块设计方案
302 0
工作流 自定义表单 挂靠流程 模块设计方案