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

四、效果图


相关文章
|
存储 XML Java
Flowable工作流-高级篇
Flowable工作流-高级篇
5489 0
|
移动开发 前端开发
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
基于jeecg-boot的flowable流程审批时增加下一个审批人设置
1102 0
|
前端开发
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程(二)
基于RuoYi-Flowable-Plus的若依ruoyi-nbcio支持自定义业务表单流程(二)
786 2
|
9月前
|
存储 Java API
SpringBoot整合Flowable【02】- 整合初体验
本文介绍了如何基于Flowable 6.8.1版本搭建工作流项目。首先,根据JDK和Spring Boot版本选择合适的Flowable版本(7.0以下)。接着,通过创建Spring Boot项目并配置依赖,包括Flowable核心依赖、数据库连接等。然后,建立数据库并配置数据源,确保Flowable能自动生成所需的表结构。最后,启动项目测试,确认Flowable成功创建了79张表。文中还简要介绍了这些表的分类和常用表的作用,帮助初学者理解Flowable的工作原理。
1619 0
SpringBoot整合Flowable【02】- 整合初体验
|
前端开发
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
基于jeecgboot的flowable流程支持退回到发起人节点表单修改功能
1061 0
|
移动开发 前端开发 Java
基于jeecg-boot的flowable流程提供一种动态设置发起人部门负责人的方式
基于jeecg-boot的flowable流程提供一种动态设置发起人部门负责人的方式
313 0
|
前端开发
基于jeecg-boot的flowable流程增加部门经理审批功能
基于jeecg-boot的flowable流程增加部门经理审批功能
420 0
|
移动开发 前端开发
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
基于jeecg-boot的flowable流程自定义业务退回撤回或驳回到发起人后的再次流程提交
694 0
|
移动开发 前端开发
基于Jeecg-boot的flowable流程支持拒绝同意流程操作(二)
基于Jeecg-boot的flowable流程支持拒绝同意流程操作(二)
306 0
|
前端开发 数据库 JavaScript
基于Flowable的流程挂接自定义业务表单的设计与实践
文章讨论了如何在Flowable流程引擎中挂接自定义业务表单,以及相关设计和实践的步骤。文章中包含了一些前后端代码示例,如Vue组件的模板和脚本部分,这些代码用于实现与Flowable流程引擎交互的界面。例如,有一个按钮组件用于提交申请,点击后会触发applySubmit方法,该方法会与后端API进行交互,处理流程启动、查询关联流程等逻辑。
52797 11