Activiti调用式子流程

2023-11-23 01:18
文章标签 流程 调用 activiti 式子

本文主要是介绍Activiti调用式子流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.事物子流程

2.调用式子流程

需要写两个流程定义文件:

其中一个的调用事件和边界事件:

<callActivity id="callActivity" calledElement="my-process-check-order"><extensionElements><activiti:in  source="errorflag" target="errorflag" /><activiti:out source="key1" target="key1" /></extensionElements>
</callActivity><boundaryEvent id="boundary" attachedToRef="callActivity"><errorEventDefinition errorRef="bpmnError"></errorEventDefinition>
</boundaryEvent>

第二个流程定义文件:

<process id="my-process-check-order"><startEvent id="start"/><endEvent id="end"/><parallelGateway id="parallelGateway1" name="并行网关1"/><serviceTask id="pay" name="确认支付" activiti:class="com.syc.activiti.example.MyPayJavaDelegate"/><serviceTask id="take" name="确认收货" activiti:class="com.syc.activiti.example.MyTakeJavaDelegate"/><parallelGateway id="parallelGateway2" name="并行网关2"/><...>
</process>

MyPayJavaDelegate类:

@Override
public void execute(DelegateExecution execution) {LOGGER.info("variables = {}", execution.getVariables());LOGGER.info("run my pay java delegate {}", this);execution.getParent().setVariableLocal("key2", "value2");execution.setVariable("key1", "value1");execution.setVariable("key3", "value3");Object errorflag = execution.getVariable("errorflag");if(Objects.equals(errorflag, true)){throw new BpmnError("bpmnError");}LOGGER.info("pay error");
}

测试:

@Test
@Deployment(resources = {"my-process-subprocess3.bpmn20.xml","my-process-subprocess4.bpmn20.xml"})
public void testSubProcess4(){Map<String, Object> variables = new HashMap<>();variables.put("errorflag", false);variables.put("key0", "value0");ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process", variables);Task task = activitiRule.getTaskService().createTaskQuery().singleResult();LOGGER.info("task.name = {}",task.getName());Map<String, Object> variables1 = activitiRule.getRuntimeService().getVariables(processInstance.getId());LOGGER.info("variables1 = {}", variables1);
}

errorflag为false,正常执行:

errorflag改为true后的异常输出:

好处:将流程的复杂度降低,把流程定义文件拆分成多个小的文件

 

这篇关于Activiti调用式子流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/414275

相关文章

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Vue 调用摄像头扫描条码功能实现代码

《Vue调用摄像头扫描条码功能实现代码》本文介绍了如何使用Vue.js和jsQR库来实现调用摄像头并扫描条码的功能,通过安装依赖、获取摄像头视频流、解析条码等步骤,实现了从开始扫描到停止扫描的完整流... 目录实现步骤:代码实现1. 安装依赖2. vue 页面代码功能说明注意事项以下是一个基于 Vue.js

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音

在VSCode中本地运行DeepSeek的流程步骤

《在VSCode中本地运行DeepSeek的流程步骤》本文详细介绍了如何在本地VSCode中安装和配置Ollama和CodeGPT,以使用DeepSeek进行AI编码辅助,无需依赖云服务,需要的朋友可... 目录步骤 1:在 VSCode 中安装 Ollama 和 CodeGPT安装Ollama下载Olla

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键