flowable流程实例笔记(1)

2023-11-04

RuntimeService 运行服务类

    

    支持启动的方式

    

    流程定义: 从这里获取资源文件.

    执行实例: 流程实例中执行的每个环节.

    流程实例: 一个流程实例包括所有运行的节点,一个流程中流程实例只有一个.

    启动一个实例:

   public void startProcessInstanceByKey() {
         String processDefinitionKey = "leave";
         ProcessInstance processInstance = 
           runtimeService.startProcessInstanceByKey(processDefinitionKey);
         System.out.println(processInstance.getId() + "," + 
           processInstance.getActivityId());
   }

    查询该受理人的任务:

   public void queryMyTask() {
        String processDefinitionKey = "leave";
        String assignee = "王五";
        List<Task> list = taskService.createTaskQuery()
                .taskAssignee(assignee)
                .processDefinitionKey(processDefinitionKey)
                .list();
    }

    完成任务:

   public void completeMyTask() {
        String taskId = "54502";
        taskService.complete(taskId);
   }

    查找运行实例的状态:

        方式1:

   public void queryProcessInstanceState() {
        ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
                .processInstanceId("59501")
                //.deploymentId()
                .singleResult();
        if (processInstance != null) {
            System.out.println("当前流程实例正在运行");
        } else {
            System.out.println("当前流程实例已经结束");
        }
   }

        方式2:

   public void queryProcessInstanceState2() {
        String processInstanceId = "59501";
        HistoricProcessInstance historicProcessInstance = 
           historyService.createHistoricProcessInstanceQuery()
                .processInstanceId(processInstanceId).singleResult();
        if (historicProcessInstance.getEndTime() == null) {
            System.out.println("当前流程实例正在运行");
        } else {
            System.out.println("当前流程实例已经结束");
        }
    }

    流程实例执行完成,相应的execution表中数据将被删除.

    查询执行实例

   public void createExecutionQuery() {
        List<Execution> executions = runtimeService.createExecutionQuery()
                .list();
        for (Execution execution : executions) {
            System.out.println(execution.getId() + "," + execution.getActivityId());
        }
   }

    查询历史流程实例:

    public void createHistoricProcessInstanceQuery() {
        String processInstanceId = "59501";
        HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()
                .processInstanceId(processInstanceId).
                        singleResult();
        System.out.println("流程定义ID:" + hpi.getProcessDefinitionId());
        System.out.println("流程实例ID:" + hpi.getId());
        System.out.println(hpi.getStartTime());
        System.out.println(hpi.getStartActivityId());
        System.out.println(hpi.getEndTime());
    }

    查询历史活动实例:

    public void createHistoricActivityInstanceQuery() {
        List<HistoricActivityInstance> list = 
            historyService.createHistoricActivityInstanceQuery()
                .list();
        for (HistoricActivityInstance hai : list) {
            System.out.println(hai.getId());
        }
    }

    查询历史任务实例:

    //select distinct RES.* from ACT_HI_TASKINST RES order by RES.ID_ asc
    public void createHistoricTaskInstanceQuery() {
        List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
                .list();
    }

    设置流程发起人:

        方式1 :

   public void setAuthenticatedUserId1() {
        String authenticatedUserId = "朱元璋";
        identityService.setAuthenticatedUserId(authenticatedUserId);
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = 
          runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId() + "," + 
          processInstance.getActivityId());
    }

        方式2:

   public void setAuthenticatedUserId2() {
        String authenticatedUserId = "朱重八";
        Authentication.setAuthenticatedUserId(authenticatedUserId);
        String processDefinitionKey = "leave";
        ProcessInstance processInstance = 
           runtimeService.startProcessInstanceByKey(processDefinitionKey);
        System.out.println(processInstance.getId() + "," + 
           processInstance.getActivityId());
    }

    initiator结合流程实例启动人使用:

        启动一个流程实例后会发现act_ru_variable会多出一条参数数据.

    dataobject的使用:

    部署相关的流程,启动流程后variable表中添加3条数据

    log4j.properties中配置(打印variable的日志信息):  

    log4j.logger.org.flowable.variable.service.impl.persistence.entity=DEBUG

    获取DataObject参数:

        方式1:

/**
     * select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and NAME_= ? and TASK_ID_ is null
     * - ==> Parameters: 77001(String), day(String)
     */
    @Test
    public void getDataObject() {
        String executionId = "77001";
        String dataObject = "天数";
        DataObject dataObject1 = runtimeService.getDataObject(executionId, dataObject);
        if (dataObject1 != null) {
            System.out.println(dataObject1.getDataObjectDefinitionKey());
            System.out.println(dataObject1.getDescription());
            System.out.println(dataObject1.getExecutionId());
            System.out.println(dataObject1.getName());
            System.out.println(dataObject1.getValue());
            System.out.println(dataObject1.getType());
        }
    }

        方式2:

/**
     * select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and TASK_ID_ is null
     */
    @Test
    public void getDataObject2() {
        String executionId = "77001";
        Map<String, DataObject> dataObject1 = runtimeService.getDataObjects(executionId);
        Set<Map.Entry<String, DataObject>> entries = dataObject1.entrySet();
        for (Map.Entry<String, DataObject> dataObjectEntry : entries) {
            DataObject dataObject = dataObjectEntry.getValue();
            if (dataObject != null) {
                System.out.println(dataObject.getDataObjectDefinitionKey());
                System.out.println(dataObject.getDescription());
                System.out.println(dataObject.getExecutionId());
                System.out.println(dataObject.getName());
                System.out.println(dataObject.getValue());
                System.out.println(dataObject.getType());
            }
        }
    }

    流程实例的删除以及级联删除:

    @Test
    public void deleteProcessInstance() {
        String processInstanceId = "72001";
        String deleteReason = "我想删除";
        runtimeService.deleteProcessInstance(processInstanceId, deleteReason);
    }

    //级联删除
    @Test
    public void deleteProcessInstanceCascade() {
        String processInstanceId = "69501";
        String deleteReason = "我想删除";
        //processEngineConfiguration方式
        // ProcessEngineConfigurationImpl processEngineConfiguration = 
        //(ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();        
        //processEngineConfiguration.getExecutionEntityManager()
        //.deleteProcessInstance(processInstanceId,deleteReason,true);

        //DeleteProcessInstanceCaCadeCmd方式删除
        managementService.executeCommand(
         new DeleteProcessInstanceCaCadeCmd(processInstanceId, deleteReason));
    }

    获取流程实例运行节点:

public void getActiveActivityIds() {
        String executionId = "77005";
        List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
}

    租户方式部署以及启动:

//根据流程定义的id启动
public void startProcessInstanceById() {
        String processDefinitionId = "dataobject:1:74504";
        ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId);
}
//根据流程定义的key和租户id
public void startProcessInstanceByKeyAndTenantId() {
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId("leave", "001");
}

        部署是必须定义租户id

    public void deploy() {
        DeploymentBuilder deploymentBuilder = repositoryService
            .createDeployment()
            .category("leave")
            .name("请假流程")
            .addClasspathResource("leave.bpmn")
            .tenantId("001");
        Deployment deploy = deploymentBuilder.deploy();
        System.out.println(deploy.getId());
    }

    自定义流程实例助手类:

    首先,重写里面的方法

//重写MyProcessInstanceHelper集成ProcessInstanceHelper ,并重写里面的方法
public class MyProcessInstanceHelper extends ProcessInstanceHelper {

    @Override
    public ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, Map<String, Object> variables, Map<String, Object> transientVariables) {
        return super.createProcessInstance(processDefinition, businessKey, processInstanceName, variables, transientVariables);
    }

    @Override
    public ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, String overrideDefinitionTenantId, Map<String, Object> variables, Map<String, Object> transientVariables, String callbackId, String callbackType, boolean startProcessInstance) {
        System.out.println("MyProcessInstanceHelper:createProcessInstance");
        return super.createProcessInstance(processDefinition, businessKey, processInstanceName, overrideDefinitionTenantId, variables, transientVariables, callbackId, callbackType, startProcessInstance);
    }
}

    然后,通过配置文件注入进来

<property name="processInstanceHelper" >
            <bean class="com.heima.bpmn.MyProcessInstanceHelper"></bean>
</property>

    流程定义的挂起与激活:

    判断流程定义是否被挂起

public void isProcessDefinitionSuspended() {
        String processDefinitionId = "leave:2:67004";
        boolean processDefinitionSuspended = repositoryService.isProcessDefinitionSuspended(processDefinitionId);
        System.out.println(processDefinitionSuspended);
}

    挂起一个流程实例

public void suspendProcessDefinitionById() {
        String processDefinitionId = "leave:2:67004";
      repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
}

    释放流程实例

public void activateProcessDefinitionById() {
        String processDefinitionId = "leave:2:67004";
        repositoryService.activateProcessDefinitionById(processDefinitionId);
'}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

flowable流程实例笔记(1) 的相关文章

  • 【Java】java | springboot集成flowable报错解决 | 从若依迁移flowable报错 

    一 先说解决方案 开启表自动创建 flowable相关表 flowable true 会对数据库中所有表进行更新操作 如果表不存在 xff0c 则自动创建 建议开发时使用 database schema update true 关闭定时任务
  • docker 挂载 no such file or directory问题

    现象 docker run d p8080 8080 name flowable v data flowable opt tomcat flowable all in one 就报 Error response from daemon OC
  • 工作流程引擎之flowable(集成springboot)

    0 背景 现状 公司各部门业务系统有各自的工作流引擎 也有cross function的业务在不同系统或OA系统流转 没有统一的去规划布局统一的BPM解决方案 近期由于一个项目引发朝着整合统一的BPM方案 特了解一下市面上比较主流的开源和收
  • Flowable 之事件和网关

    文章目录 一 网关 1 1 排他网关 1 2 并行网关 1 3 包容网关 1 4 事件网关 二 事件 2 1 定时器事件 2 1 1 定时器启动事件 2 1 2 中间计时器捕获事件 2 1 3 边界计时器事件 2 2 消息事件 2 2 1
  • flowable(五) - 使用flowable-admin-ui 流程部署到数据库

    前言 看完别人集成boot项目的demo 他的部署方式是通过和moderer项目里面的代码进行部署的 flowable流程资源部署方式 这里提到了Model方式部署 设计器中的发布就是用的此方法这里就是上篇作者的代码 所以说 设计器的发布
  • Waiting for changelog lock....

    Could not acquire change log lock Currently locked by XXXXXX 在本地启动 的时候 一直停在Waiting for changelog lock 然后最后的异常是Could not
  • 《Flowable基础二 Flowable是什么》

    2 1 Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎 Flowable流程引擎让你可以部署BPMN 2 0流程定义 用于定义流程的行业XML标准 创建这些流程定义的流程实例 进行查询 访问运行中或历史的
  • MybatisPlus整合Flowable出现的坑

    MybatisPlus整合Flowable出现的坑 摘要 现在在项目中使用的MybatisPlus 最近研究了一下流程框架Flowable 看了很多技术文档博客 打算直接整合进去 先记录一下遇到的问题 问题 Description file
  • Flowable基本使用介绍和Flowable数据库表解释

    1 Flowable是什么 Flowable是一个使用Java编写的轻量级业务流程引擎 Flowable流程引擎可用于部署BPMN 2 0流程定义 用于定义流程的行业XML标准 创建这些流程定义的流程实例 进行查询 访问运行中或历史的流程实
  • flowable流程实例笔记(1)

    RuntimeService 运行服务类 支持启动的方式 流程定义 从这里获取资源文件 执行实例 流程实例中执行的每个环节 流程实例 一个流程实例包括所有运行的节点 一个流程中流程实例只有一个 启动一个实例 public void star
  • flowable(四) - 使用flowable-modeler-ui 定义流程

    步骤 地址 Flowable Modeler http localhost 8080 flowable modeler Flowable Task http localhost 8080 flowable task Flowable Adm
  • Flowable 用户问题

    Flowable用户和系统用户问题 springboot集成flowable modeler 实现免登 权限管理 Flowable引擎使用统一权限管理
  • flowable 多数据源

    目录 前言 一 多数据源 二 测试 1 测试接口 1 不带事务 2 加上事务 三 解决方法 1 开启新事物 2 重写事务 总结 前言 在springboot中使用flowable 此时flowable默认使用spring中的数据源 我这里f
  • flowable(九) 通过ui部署流程图

    下载xml模型 登陆到flowable modeler后台 上传部署 登陆flowable admin地址 ok
  • Could not acquire change log lock. Currently locked by XXXXXX

    最近公司项目使用到了flowable 为了方便业务开发人员使用流程设计器画流程图 使用了flowable的原生流程设计器modeler 用docker部署非常方便 参考flowable流程设计器部署官网文档 用docker部署flowabl
  • Flowable BPMN 用户手册 (v 6.3.0)

    小编本来想学习 activity但是被同事强烈推荐学习Flowable 百度了一下发现Flowable是activity的一个升级 第一步找学习资料 找到一个分享给大家 https tkjohn github io flowable use
  • Springboot +Flowable,DataObject的使用方式

    一 简介 在 Flowable 流程图的绘制过程中 可以编写一个名为 dataObject 数据对象 的元素 这个元素可以指定变量的 id 名称以及数据类型等各种属性 并且在流程实例启动的时候 会自动将 dataObject 元素的信息转换
  • flowable实战(四):构建命令行程序

    实际上前面那些都是前置知识 真正上手的话其实还是一脸懵的情况 这里我也是按照文档生成一个最简单的demo 这个demo就是一个简单的Maven工程 你只要启动main方法就可以看到效果 github实例代码地址 这里如果直接下载代码 如果不
  • Flowable入门系列文章113 - 进程实例 02

    1 激活或暂停流程实例 PUT运行时 process instances processInstanceId 表1 激活或暂停流程实例 URL参数 参数 需要 值 描述 processInstanceId 是 串 激活 挂起的流程实例的ID
  • JDK21和 Flowable 7.0.0

    JDK21和 Flowable 7 0 0 一 Flowable 二 项目搭建 1 依赖包 2 数据库 3 资源文件 1 YML配置文件 2 Drools kbase

随机推荐

  • [masmplus]初次使用报external symbol _start 是配置问题

    初次使用masmplus 其中在 codesg segment 使用了 start 标记 并在end处标明了 end start 但是默认的masmplus 会提示 start 为 不认识的 external symbol 如下图 那怎么办
  • 计算机系统的多级层次结构

  • Flutter的路由router-页面跳转

    文章目录 概念介绍 基本路由 Basic Routing 跳转到某个页面 弹出页面 命名路由 Named Routing 第三方路由管理库 Third Party Routing Libraries Android原生的路由 Intent
  • 两条线段是否相交原理及C++实现

    step 1 快速排斥 如上图1 2所示 AB的最大X坐标 如果小于PQ的最小X坐标 则不相交 CD和UV判断同理 换成 坐标即可 step 2 利用向量叉乘判断 亦称跨立方法 2D 叉乘可把 2D 点看作 3D 的点 z 轴的值为 0 套
  • Spring 如何使用注解实现事务管理呢?

    转自 Spring 如何使用注解实现事务管理呢 下文讲述Spring使用注解使用事务管理的方法分享 实现思路 使用 Annotation 需进行以下设置 1 在 Spring 容器中注册驱动
  • 正交矩阵

    正交矩阵是实数特殊化的酉矩阵 因此总是正规矩阵 尽管我们在这里只考虑实数矩阵 这个定义可用于其元素来自任何域的矩阵 正交矩阵毕竟是从内积自然引出的 对于复数的矩阵这导致了归一要求 定义 定义 1 如果 AA E E为单位矩阵 A 表示 矩阵
  • switch-case流程图

    第一种情况 每一个case后面都有break switch p case 1 process 1 break case 2 process 2 break case n process n break default process n 1
  • 02-蘑菇街爬虫mw-sign参数破解

    02 蘑菇街爬虫mw sign参数破解 目录 01 蘑菇街爬虫准备工作1 02 蘑菇街爬虫mw sign参数破解 03 蘑菇街爬虫概述 04 蘑菇街爬虫 店铺搜索页面 mw sign参数分析 经过网友断点测试 我们发现mw sign是经过两
  • 运维重点小知识点总结

    1 可以使用lsblk命令树形方式显示所有可用块设备情况 lsblk NAME MAJ MIN rm SIZE RO type mountpoint sda 8 0 0 232 9G 0 disk sda1 8 1 0 46 6G 0 pa
  • 使用Python批量提取TRMM降水数据均值

    今天给大家分享一个数据平均值的吧 好像从来没有分享过这个内容 以问题为导向利用Python帮助我们解决在科研中遇到的问题 最近有同学在处理TRMM降水数据的时候 说是要提取每个月的均 值出来 数据格式是tif栅格 目的也是非常明确的 提取多
  • Linux文件管理(文件/目录的创建、更改、删除)

    一 Linux文件命名规则 1 严格区分大小写 2 文件命名不能使用字符 3 目录或文件名的长度不能超过255个字符 建议 1 文件名由两个或两个以上单词组成时 尽量使用 来代替space键 2 尽量不用字母的大小写来区分文件或者目录 4
  • curl

    什么是curl命令 curl是利用URL语法在命令行方式下工作的开源文件传输工具 它被广泛应用在Unix 多种Linux发行版中 并且有DOS和Win32 Win64下的移植版本 如何在windows下使用curl命令 第一步 进入curl
  • 在 AIX 5.3 和 6.1 中使用 Veritas Volume Manager (VxVM) V5 管理逻辑卷

    引言 在 UNIX 存储管理市场上 有两家主要的领先厂商 IBM 和 Veritas 现在的 Symantec 两家公司都提供帮助 UNIX 系统管理员以非常灵活的方法管理存储设备的产品 Veritas 提供了 Veritas Volume
  • feign接口自动生成工具

    Feign Generator 介绍 最近发现开发spring cloud时 编写feign接口是一件痛苦的事 不仅要编写feign接口 还有fallback 请求参数和返回值等 大量重复工作 很浪费时间 于是便想到可以编写工具自动生成fe
  • Mysql触发器

    本文主针对小白 如何在数据库有数据变动得时候及时得到内容 MySQL触发器 Triggers 是一种数据库对象 它在指定的事件 例如插入 更新或删除数据 发生时自动执行一系列预定义的操作 触发器通常用于实施业务规则 数据完整性约束和自动化任
  • CentOS-7 RHEL-8 yum源的配置(本地yum源 + 互联网yum源)

    CentOS 7 RHEL 8 yum源的配置 本地yum源 互联网yum源 yum 全称为 Yellow dog Updater Modified 是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器 基于RP
  • 11款在线视频编辑和分享网站

    这是之前介绍的一些视频编辑相关工具 16个免费开源的视频编辑软件下载 VCASMO 在线创建混合多媒体演示 12款制作视频教程的屏幕录像工具 下面是现在要介绍的11款在线视频编辑和分享网站 收集的不够完全 各取所需 Jumpcut Jump
  • 【LaTeX】两张并排图片垂直对齐

    figure中插入两张并排图片 但是垂直无法居中 解决方法 通过 raisebox 2 height 抬高图片 例如 begin figure htbp centering subfigure ReLU begin minipage t 0
  • Linux 系统 less命令详解

    Linux中的less命令是一个非常常用的文本查看工具 它可以用于查看任意大小的文本文件 支持滚动翻页 搜索 标记等功能 在本文中 我们将详细介绍less命令的用法 参数和实例 并对其背后的原理和相关技术进行简要讲解 一 less命令的基本
  • flowable流程实例笔记(1)

    RuntimeService 运行服务类 支持启动的方式 流程定义 从这里获取资源文件 执行实例 流程实例中执行的每个环节 流程实例 一个流程实例包括所有运行的节点 一个流程中流程实例只有一个 启动一个实例 public void star