Flowable主要子流程介绍
1. 内嵌子流程
(1)说明
内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定义在另一个流程(父流程)的内部,子流程作为父流程的一部分。子流程是主流程中的一部分流程片段,并非独立的流程定义,一般作为局部通用逻辑处理,或者因为特定业务需要,使比较复杂的单个主流程设计清晰直观。
主流程执行到子流程时启动子流程,当子流程结束后继续执行主流程。
(2)示例
<process id="demo" name="demo" isExecutable="true"><startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/><endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/><userTask id="sid-2b45eebc-75fa-465c-b870-4159a15df689" name="业务1" flowable:assignee="zj1"/><subProcess id="sid-b8b56b6f-35ae-4367-8c40-628321034b15" flowable:exclusive="true" name="子流程"><startEvent id="sid-fa9462e7-e72f-4489-a0d8-6d4aef4a8709"/><userTask id="sid-4774809a-d1b2-4c1b-96d5-86b9faf8c0f6" name="业务2" flowable:assignee="zj2"/><endEvent id="sid-39a81a5f-b2ae-4a3a-aea4-750eead4229b"/><sequenceFlow id="sid-1cf422bf-075b-49d0-8480-bc26859431cf" sourceRef="sid-fa9462e7-e72f-4489-a0d8-6d4aef4a8709" targetRef="sid-4774809a-d1b2-4c1b-96d5-86b9faf8c0f6"/><sequenceFlow id="sid-10847d4f-0f3f-4032-9116-9c14bbcef60e" sourceRef="sid-4774809a-d1b2-4c1b-96d5-86b9faf8c0f6" targetRef="sid-39a81a5f-b2ae-4a3a-aea4-750eead4229b"/></subProcess><sequenceFlow id="sid-c0064993-d7bc-4b80-97cd-18a3aef704c5" sourceRef="sid-2b45eebc-75fa-465c-b870-4159a15df689" targetRef="sid-b8b56b6f-35ae-4367-8c40-628321034b15"/><sequenceFlow id="sid-5a6e8042-f8d6-4df5-a9e1-8d2ebdb782a0" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-2b45eebc-75fa-465c-b870-4159a15df689"/><sequenceFlow id="sid-38d41002-c4d5-4e24-94dd-f783a76eafac" sourceRef="sid-b8b56b6f-35ae-4367-8c40-628321034b15" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/></process>
2. 事件子流程
(1)说明
和内嵌子流程类似,把一系列的活动归结到一起处理,不同之处在于事件子流程不能直接启动,要被动地由其它的事件触发启动。事件子流程可以通过消息事件、错误事件、信号事件、定时器事件或补偿事件等触发。不能在事件子流程中使用空启动事件。
(2)示例
<error id="errorName" errorCode="500"/><process id="demo" name="demo" isExecutable="true"><startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/><userTask id="sid-2b45eebc-75fa-465c-b870-4159a15df689" name="业务1" flowable:assignee="zj1"/><sequenceFlow id="sid-5a6e8042-f8d6-4df5-a9e1-8d2ebdb782a0" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-2b45eebc-75fa-465c-b870-4159a15df689"/><sequenceFlow id="sid-6f4a2116-6f18-4bd6-b65c-c8fe7206e0ed" sourceRef="sid-2b45eebc-75fa-465c-b870-4159a15df689" targetRef="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"/><endEvent id="sid-312fd1bd-1a79-46f1-956c-b89aab8a03af"><errorEventDefinition errorRef="errorName"/></endEvent><subProcess triggeredByEvent="true" id="sid-45854983-401e-4b42-a19b-c7b1b329fea7" flowable:exclusive="true"><startEvent id="sid-9e7d64f5-69d6-4a3a-a91f-c0fadd2f85d4"><errorEventDefinition errorRef="errorName"/></startEvent><userTask id="sid-272840fa-915e-4fc6-a118-9d5b3357f438" name="业务2" flowable:assignee="zj2"/><endEvent id="sid-7cb94afc-5c74-4195-ba9f-6782b0797c8f"/><sequenceFlow id="sid-98cedd4b-0da3-493e-9645-97ec51404bde" sourceRef="sid-9e7d64f5-69d6-4a3a-a91f-c0fadd2f85d4" targetRef="sid-272840fa-915e-4fc6-a118-9d5b3357f438"/><sequenceFlow id="sid-926b5b9c-ea1d-4000-a3fe-2af432a2021e" sourceRef="sid-272840fa-915e-4fc6-a118-9d5b3357f438" targetRef="sid-7cb94afc-5c74-4195-ba9f-6782b0797c8f"/></subProcess></process>
3. 调用活动
(1)说明
调用活动可以引用流程定义外部的流程,当执行到调用活动时启动引用的外部流程,当外部流程执行完后转到当前流程下一节点。
(2)示例
<process id="demo" name="demo" isExecutable="true"><startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/><userTask id="sid-2b45eebc-75fa-465c-b870-4159a15df689" name="业务1" flowable:assignee="zj1"/><sequenceFlow id="sid-5a6e8042-f8d6-4df5-a9e1-8d2ebdb782a0" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-2b45eebc-75fa-465c-b870-4159a15df689"/><callActivity id="sid-bb4cd254-3b40-4c57-a27d-a7f855001cd7" name="调用活动" calledElement="processId"/><sequenceFlow id="sid-31dc97ee-52a5-4d1d-b62a-cb4609102abf" sourceRef="sid-2b45eebc-75fa-465c-b870-4159a15df689" targetRef="sid-bb4cd254-3b40-4c57-a27d-a7f855001cd7"/><userTask id="sid-b4291f3a-0b40-46e3-9048-480904d956bc"/><endEvent id="sid-91b8b5a7-e377-426b-9380-6557d2199343"/><sequenceFlow id="sid-246011bc-4109-4857-9f91-bdfefec621f7" sourceRef="sid-b4291f3a-0b40-46e3-9048-480904d956bc" targetRef="sid-91b8b5a7-e377-426b-9380-6557d2199343"/><sequenceFlow id="sid-a52c08d4-99e0-4925-9ed5-3b6b5f482f7a" sourceRef="sid-bb4cd254-3b40-4c57-a27d-a7f855001cd7" targetRef="sid-b4291f3a-0b40-46e3-9048-480904d956bc"/></process>
4. 自组织子流程
(1)说明
自组织子流程是子流程的一种,其内部包含一组无需定义先后顺序和依赖的活动。在流程中事先定义好一组活动,但活动的执行顺序是活动的执行者确定。
completionCondition标签需要在内部任务的最后面,可在代码中指定要实现的任务,该表达式成立时退出子流程流转到主流程下一节点。
(2)示例
<process id="demo" name="demo" isExecutable="true"><startEvent id="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30"/><userTask id="sid-2b45eebc-75fa-465c-b870-4159a15df689" name="业务1" flowable:assignee="zj1"/><sequenceFlow id="sid-5a6e8042-f8d6-4df5-a9e1-8d2ebdb782a0" sourceRef="sid-507da2f8-ca68-4e25-a256-c9e4e98a8e30" targetRef="sid-2b45eebc-75fa-465c-b870-4159a15df689"/><endEvent id="sid-91b8b5a7-e377-426b-9380-6557d2199343"/><adHocSubProcess id="sid-4d483bad-7247-49ca-bea6-75d0d0c6ee04"><userTask id="sid-1c48808c-00c4-45bb-96c2-db7e3db810b7"/><serviceTask id="sid-45246be8-bdc2-4951-979e-cece074d5f1a" flowable:exclusive="true"/><completionCondition>${flag}</completionCondition></adHocSubProcess><sequenceFlow id="sid-7fa29c4a-91d0-4104-9454-09f48c38267c" sourceRef="sid-2b45eebc-75fa-465c-b870-4159a15df689" targetRef="sid-4d483bad-7247-49ca-bea6-75d0d0c6ee04"/><sequenceFlow id="sid-d08ed212-288a-4c17-b228-6691774bd2cc" sourceRef="sid-4d483bad-7247-49ca-bea6-75d0d0c6ee04" targetRef="sid-91b8b5a7-e377-426b-9380-6557d2199343"/></process>
// 查询子流程的执行流 Execution exe = runtimeService.createExecutionQuery().processInstanceId(String instanceId).activityId(String activityId).singleResult(); // 让执行流到指定任务 runtimeService.executeActivityInAdhocSubProcess(String executionId,String activityId);
相关文章:
Flowable主要子流程介绍
1. 内嵌子流程 (1)说明 内嵌子流程又叫嵌入式子流程,它是一个可以包含其它活动、分支、事件,等的活动。我们通常意义上说的子流程通常就是指的内嵌子流程,它表现为将一个流程(子流程)定…...
通过插件去除Kotlin混淆去除 @Metadata标记
在Kotlin中,Metadata是指描述Kotlin类的元数据。它包含了关于类的属性、函数、注解和其他信息的描述。Metadata的作用主要有以下几个方面: 反射:Metadata可以用于在运行时获取类的信息,包括类的名称、属性、函数等。通过反射&…...
【docker】容器跟宿主机、其他容器通信
说明 容器跟宿主机、其他容器通信的关键在于它们要在同一个网络,或者通过修改路由信息来可以让它们互相之间能够找得到对方的 IP。本文主要介绍让它们在同一个网络的方法。 Docker 自定义网络模式介绍 Docker容器可以通过自定义网络来与宿主机或其他容器进行通信…...
nginx重要配置参数
1、https配置证书 nginx配置https访问_LMD菜鸟先飞的博客-CSDN博客 2、同一个端口代理多个页面 nginx同一个地址端口代理多个页面_同一ip,端口,访问不同页面 nginx_LMD菜鸟先飞的博客-CSDN博客 3、nginx访问压缩数据,加快访问速度 #gzip模块设置gzip on; #开启g…...
Docker 部署 PostgreSQL 服务
拉取最新版本的 PostgreSQL 镜像: $ sudo docker pull postgres:latest在本地预先创建好 data 目录, 用于映射 PostgreSQL 容器内的 /var/lib/postgresql/data 目录。 使用以下命令来运行 PostgreSQL 容器: $ sudo docker run -itd --name postgres -e POSTGRES_…...
【通信误码】python实现-附ChatGPT解析
1.题目 通信误码 时间限制: 1s 空间限制: 32MB 限定语言: 不限 题目描述: 信号传播过程中会出现一些误码,不同的数字表示不同的误码ID, 取值范围为1~65535,用一个数组“记录误码出现的情况。 每个误码出现的次数代表误码频度, 请找出记录中包含频度最高误码的最小子数组长度…...
人与机器只能感知到可以分类的事物?
众所周知,人与机器都能够感知和分类事物。人类拥有感官系统,如视觉、听觉、嗅觉、触觉和味觉,可以通过感知事物的外部特征和属性来进行分类。机器可以通过传感器和算法来感知和分类事物,比如计算机视觉技术可以通过图像和视频数据…...
2023华为杯数学建模竞赛E题
一、前言 颅内出血(ICH)是由多种原因引起的颅腔内出血性疾病,既包括自发性出血,又包括创伤导致的继发性出血,诊断与治疗涉及神经外科、神经内科、重症医学科、康复科等多个学科,是临床医师面临的重要挑战。…...
AIX360-CEMExplainer: MNIST Example
CEMExplainer: MNIST Example 这一部分屁话有点多,导包没问题的话可以跳过加载MNIST数据集加载经过训练的MNIST模型加载经过训练的卷积自动编码器模型(可选)初始化CEM解释程序以解释模型预测解释输入实例获得相关否定(Pertinent N…...
TouchGFX之自定义控件
在创建应用时,您可能需要TouchGFX中没有包含的控件。在创建应用时,您可能需要TouchGFX中没有包含的控件。但有时此法并不够用,当您需要全面控制帧缓冲时,您需要使用自定义控件法。 TouchGFX Designer目前不支持自定义控件的创建。…...
Python中match...case的用法
在C语言中有switch...case语句,Pthon3.10之前应该是没有类似语法,从Python3.10开始引入match...case与switch分支语句用法类似,但有细微差别,总结如下: 1.语法 肉眼可见的是关键词从switch变成了match,同…...
深度学习自学笔记二:逻辑回归和梯度下降法
目录 一、逻辑回归 二、逻辑回归的代价函数 三、梯度下降法 一、逻辑回归 逻辑回归是一种常用的二分类算法,用于将输入数据映射到一个概率输出,表示为属于某个类别的概率。它基于线性回归模型,并使用了sigmoid函数作为激活函数。 假设我们…...
【Element】通知 Notification
ElementUI 弹出通知 created() {const h this.$createElementconst that thisthis.$notify({onClose: function () {that.do()},type: warning,duration: 5000, // 5秒后隐藏offset: 0, // 距离顶部dangerouslyUseHTMLString: false, showClose: false,customClass: notify-…...
vue+express、gitee pm2部署轻量服务器(20230923)
一、代码配置 前后端接口都保持 127.0.0.1:3000 vue 项目 创建文件 pm2.config.cjs module.exports {apps: [{name: xin-web, // 应用程序的名称script: npm, // 启动脚本args: run dev, // 启动脚本的参数cwd: /home/vue/xin_web, // Vite 项目的根目录interpreter: none,…...
前端教程-H5游戏开发
Egret EGRETIA RC 版本正式发布 从端到云一站式区块链游戏开发工作流 官网 Laya Air 在渲染模式上,LayaAir 支持 Canvas 和 WebGL 两种方式;在工具流的支持程度上,主要是提供了 LayaAir IDE。LayaAir IDE 包括代码模式与设计模式ÿ…...
Nginx 关闭/屏蔽 PUT、DELETE、OPTIONS 请求
1、修改 nginx 配置 在 nginx 配置文件中,增加如下配置内容: if ($request_method !~* GET|POST|HEAD) {return 403; }修改效果如下: 2、重启 nginx 服务 systemctl restart nginx或者 service nginx restart3、功能验证 使用如下方式…...
【React】React概念、特点和Jsx基础语法
React是什么? React 是一个用于构建用户界面的 JavaScript 库。 是一个将数据渲染为 HTML 视图的开源 JS 库它遵循基于组件的方法,有助于构建可重用的 UI 组件它用于开发复杂的交互式的 web 和移动 UI React有什么特点 使用虚拟 DOM 而不是真正的 DO…...
大数据的崭露头角:数据湖与数据仓库的融合之道
文章目录 数据湖与数据仓库的基本概念数据湖(Data Lake)数据仓库(Data Warehouse) 数据湖和数据仓库的优势和劣势数据湖的优势数据湖的劣势数据仓库的优势数据仓库的劣势 数据湖与数据仓库的融合之道1. 数据分类和标记2. 元数据管…...
用go实现cors中间件
目录 一、概述 二、简单请求和预检请求 简单请求 预检请求 三、使用go的gin框架实现cors配置 1、安装 2、函数 一、概述 CORS(Cross-Origin Resource Sharing)是一种浏览器安全机制,用于控制在Web应用程序中不同源(Origin&a…...
Linux 链表示例 LIST_INIT LIST_INSERT_HEAD
list(3) — Linux manual page 用Visual Studio 2022创建CMake项目 * CmakeLists.txt # CMakeList.txt : Top-level CMake project file, do global configuration # and include sub-projects here. # cmake_minimum_required (VERSION 3.12)project ("llist")# I…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...



