Flowable边界事件-信号边界事件

news2024/11/25 7:41:58

信号边界事件

  • 信号边界事件
  • 一、定义
    • 1. 图形标记
    • 2. 设置信号 选择信号
    • 3. XML标记
  • 二、测试用例
    • 2.1 定时边界事件xml文件
    • 2.2 信号边界事件测试用例
  • 总结


信号边界事件


一、定义

接收到信号触发事件

1. 图形标记

在这里插入图片描述

2. 设置信号 选择信号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. XML标记

定时边界事件的XML

   <signal id="changeContract" name="修改合同" flowable:scope="global" />
    <boundaryEvent id="Event_04efcjz" attachedToRef="Activity_1fdbk68">
      <signalEventDefinition signalRef="changeContract" />
    </boundaryEvent>

二、测试用例

2.1 定时边界事件xml文件

<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://flowable.org/bpmn">
  <signal id="changeContract" name="修改合同" flowable:scope="global" />
  <process id="SignalBoundaryInterrputingEventProcess" name="边界信号事件" isExecutable="true">
    <startEvent id="a9a91088078f04a7ab2e96cd76001227a">
      <extensionElements>
        <flowable:formData />
      </extensionElements>
    </startEvent>
    <userTask id="a67f45b30d9ee4a4fa51a59f03b557650" name="起草合同">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="a8568bad6406b4e08bde552e2b97f5cf0" sourceRef="a9a91088078f04a7ab2e96cd76001227a" targetRef="a67f45b30d9ee4a4fa51a59f03b557650" />
    <userTask id="Activity_1fdbk68" name="确认合同">
      <extensionElements>
        <flowable:assigneeType>static</flowable:assigneeType>
        <flowable:formData />
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_1heyjxs" sourceRef="a67f45b30d9ee4a4fa51a59f03b557650" targetRef="Activity_1fdbk68" />
    <userTask id="Activity_0ju7xew" name="签署合同">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_0ljet4w" sourceRef="Activity_1fdbk68" targetRef="Activity_0ju7xew" />
    <endEvent id="Event_14ronxp" />
    <sequenceFlow id="Flow_15mmbl5" sourceRef="Activity_0ju7xew" targetRef="Event_14ronxp" />
    <boundaryEvent id="Event_04efcjz" attachedToRef="Activity_1fdbk68">
      <signalEventDefinition signalRef="changeContract" />
    </boundaryEvent>
    <userTask id="Activity_18a64dk" name="修改合同">
      <extensionElements>
        <flowable:formData />
        <flowable:assigneeType>static</flowable:assigneeType>
      </extensionElements>
    </userTask>
    <sequenceFlow id="Flow_1jojj00" sourceRef="Event_04efcjz" targetRef="Activity_18a64dk" />
    <sequenceFlow id="Flow_11xl82a" sourceRef="Activity_18a64dk" targetRef="a67f45b30d9ee4a4fa51a59f03b557650" />
  </process>

2.2 信号边界事件测试用例

 ProcessDefinition processDefinition = this.deployByModelKey("SignalBoundaryInterrputingEventProcess");

        //启动两个流程实例
        ProcessInstance processInstance1 = runtimeService.startProcessInstanceById(processDefinition.getId());
        log.info("第1个流程实例的编号为:{}", processInstance1.getId());
        ProcessInstance processInstance2 = runtimeService.startProcessInstanceById(processDefinition.getId());
        log.info("第2个流程实例的编号为:{}", processInstance2.getId());

        //将实例一进行到确认合同
        Task processInstance1Task = taskService.createTaskQuery().processInstanceId(processInstance1.getId()).singleResult();
        taskService.complete(processInstance1Task.getId());
        processInstance1Task = taskService.createTaskQuery().processInstanceId(processInstance1.getId()).singleResult();
        log.info("第1个流程实例当前所在用户任务为:{}", processInstance1Task.getName());

        //将实例二进行到确认合同
        Task processInstance2Task = taskService.createTaskQuery().processInstanceId(processInstance2.getId()).singleResult();
        taskService.complete(processInstance2Task.getId());
        processInstance2Task = taskService.createTaskQuery().processInstanceId(processInstance2.getId()).singleResult();
        log.info("第2个流程实例当前所在用户任务为:{}", processInstance2Task.getName());

        //发送合同变更信号
        runtimeService.signalEventReceived("修改合同");
        log.info("发送合同变更信号完成");

        //根据流程定义查询任务
        List<Task> tasks = taskService.createTaskQuery().processDefinitionId(processDefinition.getId()).list();
        for (Task task : tasks) {
            log.info("编号为{}的流程实例当前所在用户任务为:{}", task.getProcessInstanceId(), task.getName());
        }

总结

信号边界事件分全局的和局部的 属性设置为flowable:scope="global"为全局的,默认不写也是全局的;flowable:scope="processInstance"为当前流程实例有效,这个不是bpmn2.0规范,是flowable的规范,但是非常有用

欢迎加入QQ群学习交流:582010059

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/746892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JMeter进行WebSocket压力测试

背景 之前两篇内容介绍了一下 WebSocket 和 SocketIO 的基础内容。之后用 Netty-SocketIO 开发了一个简单的服务端&#xff0c;支持服务端主动向客户端发送消息&#xff0c;同时也支持客户端请求&#xff0c;服务端响应方式。本文主要想了解一下服务端的性能怎么样&#xff0c;…

驱动开发-day9

驱动代码&#xff1a; #include <linux/cdev.h> #include <linux/device.h> #include <linux/fs.h> #include <linux/gpio.h> #include <linux/init.h> #include <linux/interrupt.h> #include <linux/module.h> #include <linu…

Hystrix熔断器

雪崩 当山坡积雪内部的内聚力抗拒不了它所受到的重力拉引时&#xff0c;积雪便向下滑动&#xff0c;引起⼤量雪体崩塌&#xff0c;人们把这种自然现象称作雪崩 微服务中&#xff0c;一个请求可能需要多个微服务接口才能实现&#xff0c;会形成复杂的调用链路 …

在Linux下通过MySQL二进制包安装MySQL5.7

在Linux下通过通用压缩包安装MySQL5.7 卸载MySQL 如果是第一次安装MySQL&#xff0c;在安装MySQL前&#xff0c;知道如何卸载MySQL是很有必要的。因为在安装过程中可能会 遇到各种各样的问题&#xff0c;自己玩的话 卸载重装即可。 1. find / -name mysql 查看MySQL相关包…

Layui之动态树 左侧树形菜单栏 详细全面

⭐ฅʕ•̫͡•ʔฅ本期看点&#xff1a;该篇是运用Layui框架来编写后台树形菜单栏&#xff0c;并且结合MySql来编写完成 目录 一.效果图 二.具体步骤 2.1 数据库 2.2 树形导航栏 第一个类&#xff1a;Treevo 第二个类&#xff1a;BuildTree&#xff1a; 2.3 Dao方法 2.3.…

【自我提升】Spring Data JPA之Specification动态查询详解

写在前面&#xff1a;刷完Spring Data JPA的课后&#xff0c;发现Specification动态查询还挺有意思的&#xff0c;还应用到了规约设计模式&#xff0c;在此记录下学习过程和见解。 目录 一、应用场景 二、源码解析 三、规约模式 四、实际应用 一、应用场景 1. 简介 有时我…

Linux中安装Tomcat

前提条件&#xff1a; 虚拟机中已经提前安装好jdk1.8。 安装步骤&#xff1a; 1.下载安装包 首先去Apache官网下载&#xff08;Apache Tomcat - Apache Tomcat 9 Software Downloads&#xff09; 2.上传到 linux 中&#xff0c;我这里上传的目录是&#xff1a; /opt 3. 解压…

element-plus坑总结

reactive和ref对比 // 定义变量 import { reactive } from vue; const person reactive({name: "John",age: 25, });// 赋值修改 person.name "Tom"; person.age 26;// 使用变量 <div>{{ person.name }}</div> <button click"perso…

layui介绍以及登录功能的实现

一. layui简介 1.1 layui介绍 Layui 是一套开源免费的 Web UI 组件库&#xff0c;采用自身轻量级模块化规范&#xff0c;遵循原生态的 HTML/CSS/JavaScript 开发模式&#xff0c;非常适合网页界面的快速构建。Layui 区别于一众主流的前端框架&#xff0c;它更多是面向于后端开…

3、Linux-进程管理类

进程管理类 进程是正在执行的一个程序或命令&#xff0c;每一个进程都是一个运行的实体&#xff0c;都有自己的地址空间&#xff0c;并占用一定的系统资源。 7.10.1 ps 查看当前系统进程状态 ps:process status 进程状态 1&#xff09;基本语法 ps aux | grep xxx &#xff08…

Python 导入引用其他文件的函数(持续更新)

文章目录 构造初始化文件结构&#xff0c;以此为例。【1】导入同目录且同级下其他文件的函数&#xff08;c.py文件导入d.py文件的函数&#xff09;&#xff08;1&#xff09;只引入d.py文件&#xff08;2&#xff09;直接引入函数&#xff08;3&#xff09;引入全部函数 【2】导…

docker服务启动过程分析

How docker.service start&#xff1f; just by ref 我们先了解docker的各个核心组件的介绍 runc&#xff1a;runc实现了容器的底层功能&#xff0c;例如创建、运行等。runc通过调用内核接口为容器创建和管理cgroup、namespace等Linux内核功能&#xff0c;来实现容器的核心特…

Spring5学习笔记--详细一文通

Spring5学习笔记--详细一文通 1 Spring 框架概述1.1 Spring 5 简述1.2 Spring5入门案例1.2.1 Spring5下载1.1.2 打开 idea 工具&#xff0c;创建普通 Java 工程1.2.3 导入 Spring5 相关 jar 包1.2.4 创建普通类&#xff0c;在这个类创建普通方法1.2.5 创建 Spring 配置文件&…

同时多项目多个node版本-比nvm好用的volta

一、node版本问题场景&#xff1a; 1、服务器上跑的多个node项目需要不同的node版本&#xff0c;且没条件上docker。 2、开发环境中多个项目需要node版本不同&#xff0c;且同时不止是一个项目在开发中&#xff0c;用了nvm进行node版本管理和切换&#xff0c;但是太麻烦。 二…

如何开发一款软件?

创建软件的步骤 1. 头脑风暴 创意生成是制作应用程序的第一步。考虑这个问题的最好方法是将你的应用想象成解决问题。 你自己的经历可以成为灵感的重要来源。试着想想你面临的问题&#xff0c;无论是软件和计算机&#xff0c;还是你的一般生活。很有可能&#xff0c;你面临的…

3DVR全景乡村振兴创新展示,助力数字化乡村建设

导语&#xff1a; 随着社会进步和科技发展&#xff0c;3D虚拟现实&#xff08;VR&#xff09;全景技术在乡村振兴领域展现出巨大的潜力和创新空间。通过结合3DVR全景技术和乡村振兴理念&#xff0c;我们可以为乡村带来全新的展示方式和体验&#xff0c;推动乡村振兴的进程。本…

MiniGPT4 在RTX-3090 Ubuntu服务器部署步骤详解

主要参考知乎帖子&#xff1a; MiniGPT-4 本地部署 RTX 3090 - 知乎 MiniGPT-4部署比麻烦&#xff0c;首先需要获取LLaMA权重&#xff0c;并结合Vicuna的bitwise XOR增量文件完成Vicuna模型权重生成&#xff0c;最后准备好预训练的MiniGPT-4进行模型部署。为了便于理解&#…

Photoshop简单案例(10)——利用PS修改证件照尺寸为1寸(或其他)

目录 一、项目介绍二、基本流程三、效果演示 一、项目介绍 本文介绍一下利用Photoshop修改证件照尺寸为1寸的方法。 二、基本流程 首先打开新建一个空白画布&#xff0c;设置画布宽度和高度分别为25mm和35mm&#xff0c;分辨率为300&#xff0c;背景颜色与证件照背景相同&am…

基于GPT4All的大型语言模型设计生态系统

GPT4All 一套专为强大、定制的大型语言模型设计的生态系统,能够在消费级CPU上本地运行。在GPT4All中,所使用的模型是一个3GB至8GB的文件,读者可以自行下载该文件,并将其插入到GPT4All的开源生态系统软件中。这一软件生态系统由Nomic AI提供支持并进行维护,其目的是确保系统…

04-树 (数据结构和算法)

4.1 树的基本概念 树&#xff08;Tree&#xff09;是n&#xff08;n>0&#xff09;个结点的有限集&#xff0c;它或为空树&#xff08;n 0&#xff09;&#xff1b;或为非空树&#xff0c;对于非空树 T&#xff1a; 有且只有一个称之为根的结点 除根节点以外的其他结点可…