核心api实操-Activiti7从入门到专家(5)

背景

上一节已经搭建了,具体的开发环境,数据库,并且找了一个可以用bpmnjs流程设计器,这一些,我们对核心api做个基础的实操,有个感性的认知,另外对数据库和基本数据流动有个理解。

部署

模板部署

为了接口调用,暂时不使用线上的流程设计器,使用安装的可视化流程设计器插件

然后如下目录结构下,构建一个标准的bpmn文件

画的比较急促,usertask中,都没有名字,下面的数据库中也没有名字,当然这节我们是感性认知,主要能能跑一些接口就行

<?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:xsd="http://www.w3.org/2001/XMLSchema" xmlns:activiti="http://activiti.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" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/processdef"><process id="apply" name="apply" isExecutable="true"><startEvent id="sid-93eb9656-e7fa-46db-b867-5bf8c8ccfd28"/><userTask id="sid-f436faf4-75c5-4004-993d-fde4c2efbd15" activiti:assignee="starter"/><userTask id="sid-d78d057a-230f-4d2d-9b73-74907342c644" activiti:assignee="manager"/><userTask id="sid-110669bd-2386-4fd1-a66f-82250f2971b9" activiti:candidateUsers="duster,hrer"/><sequenceFlow id="sid-cf63b67a-6287-4b98-ad3d-3f5a6aab6456" sourceRef="sid-93eb9656-e7fa-46db-b867-5bf8c8ccfd28" targetRef="sid-f436faf4-75c5-4004-993d-fde4c2efbd15"/><sequenceFlow id="sid-dc3e5702-3c9e-4f4f-a5aa-5d12d62e0531" sourceRef="sid-f436faf4-75c5-4004-993d-fde4c2efbd15" targetRef="sid-d78d057a-230f-4d2d-9b73-74907342c644"/><sequenceFlow id="sid-f68d50f0-438c-42e6-b4a8-5441554908c7" sourceRef="sid-d78d057a-230f-4d2d-9b73-74907342c644" targetRef="sid-110669bd-2386-4fd1-a66f-82250f2971b9"/><endEvent id="sid-68257716-77d4-464b-a07d-8a62969df00d"/><sequenceFlow id="sid-b9534685-9617-4e88-9e24-622d58959337" sourceRef="sid-110669bd-2386-4fd1-a66f-82250f2971b9" targetRef="sid-68257716-77d4-464b-a07d-8a62969df00d"/></process><bpmndi:BPMNDiagram id="BPMNDiagram_apply"><bpmndi:BPMNPlane bpmnElement="apply" id="BPMNPlane_apply"><bpmndi:BPMNShape id="shape-b4673c70-2eb5-4096-9631-454c2d4f35f4" bpmnElement="sid-93eb9656-e7fa-46db-b867-5bf8c8ccfd28"><omgdc:Bounds x="-100.0" y="-65.0" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-6cfc9bde-25fa-42f3-82fd-9a681b20e3eb" bpmnElement="sid-f436faf4-75c5-4004-993d-fde4c2efbd15"><omgdc:Bounds x="-35.0" y="-90.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-6d9ee9d0-6a3e-4b3b-82ab-d901adcaac05" bpmnElement="sid-d78d057a-230f-4d2d-9b73-74907342c644"><omgdc:Bounds x="115.0" y="-90.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNShape id="shape-6d716fe2-0c5c-47f5-ab0b-fb5265c9fe58" bpmnElement="sid-110669bd-2386-4fd1-a66f-82250f2971b9"><omgdc:Bounds x="250.0" y="-90.0" width="100.0" height="80.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-edb64b8a-b281-4f74-9d4c-3b41480e7f15" bpmnElement="sid-cf63b67a-6287-4b98-ad3d-3f5a6aab6456"><omgdi:waypoint x="-70.0" y="-50.0"/><omgdi:waypoint x="-35.0" y="-50.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-0a7821f9-6b78-4009-a6cd-70ad14e278cf" bpmnElement="sid-dc3e5702-3c9e-4f4f-a5aa-5d12d62e0531"><omgdi:waypoint x="65.0" y="-50.0"/><omgdi:waypoint x="115.0" y="-50.0"/></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="edge-5e5f8326-5409-417a-85ab-4b455830a086" bpmnElement="sid-f68d50f0-438c-42e6-b4a8-5441554908c7"><omgdi:waypoint x="215.0" y="-50.0"/><omgdi:waypoint x="250.0" y="-50.0"/></bpmndi:BPMNEdge><bpmndi:BPMNShape id="shape-de420915-45e2-4275-9a4a-8096e3f5b152" bpmnElement="sid-68257716-77d4-464b-a07d-8a62969df00d"><omgdc:Bounds x="385.0" y="-65.0" width="30.0" height="30.0"/></bpmndi:BPMNShape><bpmndi:BPMNEdge id="edge-2fe4e62f-ea4a-442c-9842-8b9690acb4f5" bpmnElement="sid-b9534685-9617-4e88-9e24-622d58959337"><omgdi:waypoint x="350.0" y="-50.0"/><omgdi:waypoint x="385.0" y="-50.0"/></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</definitions>

以下是流程发布代码

  @Test
public void GetDeployInfos() {// 流程模板部署,发布
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();Deployment deployment = repositoryService.createDeployment().addClasspathResource("apply.bpmn20.xml").addClasspathResource("apply.png").name("申请示例").key("apply").deploy();System.out.println(deployment.getId());

这是print的内容:

2024-04-12 18:07:26.602 INFO 21652 --- [ main] o.a.e.impl.bpmn.deployer.BpmnDeployer : Process deployed: {id: apply:1:76ccd0ba-f8b4-11ee-a0f0-8c8caa7a4f9c, key: apply, name: apply }

76b996d7-f8b4-11ee-a0f0-8c8caa7a4f9c

这是相关的数据库:

发布查询

// 部署后,查询流程模板
//  查询流程部署
Deployment deployment = repositoryService.createDeploymentQuery().deploymentKey("apply").singleResult();
//  查询流程定义
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
//  流程定义是否被挂起/暂停
boolean suspended = processDefinition.isSuspended();
System.out.println(deployment.getId() + "当前流程状态:"+suspended);
//  删除部署       repositoryService.deleteDeployment(deployment.getId());//  挂起/暂停流程定义
repositoryService.suspendProcessDefinitionById(processDefinition.getId());
processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
//  流程定义是否被挂起/暂停
suspended = processDefinition.isSuspended();
System.out.println(deployment.getId() + "当前流程状态:"+suspended);
//  激活流程定义
repositoryService.activateProcessDefinitionById(processDefinition.getId());
processDefinition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult();
//  流程定义是否被挂起/暂停
suspended = processDefinition.isSuspended();
System.out.println(deployment.getId() + "当前流程状态:"+suspended);

启动流程实例

// 启动实例
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RuntimeService runtimeService= processEngine.getRuntimeService();
Map<String, Object> userVariables = new HashMap<>();
//小兵申请,经理审批  user
userVariables.put("starter", "xiaobing");
userVariables.put("manager", "jingli");ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("apply", userVariables);
// runtimeService.startProcessInstanceByKey("apply");System.out.println(processInstance.getProcessInstanceId());
System.out.println(processInstance.getProcessDefinitionId());

用户任务

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
//  查询待办任务
List<Task> taskList = taskService.createTaskQuery().taskAssignee("starter").list();for (Task task : taskList) {System.out.println("taskID:"+task.getId());//  完成任务taskService.complete(task.getId());

taskID:73cd61cd-f8b6-11ee-b5e3-8c8caa7a4f9c

接着是到了经理的任务

我们继续执行

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
TaskService taskService = processEngine.getTaskService();
//  查询待办任务
List<Task> taskList = taskService.createTaskQuery().taskAssignee("manager").list();for (Task task : taskList) {System.out.println("taskID:"+task.getId());//  完成任务taskService.complete(task.getId());
}

taskID:82209be4-f8b8-11ee-9d92-8c8caa7a4f9c

历史记录

ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();HistoryService historyService = processEngine.getHistoryService();//  历史查询List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().processInstanceId("73cb8d05-f8b6-11ee-b5e3-8c8caa7a4f9c").orderByHistoricActivityInstanceStartTime().asc().list();
for (HistoricActivityInstance historicActivityInstance : list) {System.out.println(historicActivityInstance.getActivityName() + ":" + historicActivityInstance.getAssignee());}

由于是为了清楚使用接口,并没有构建复杂场景,我们会一个个的完成基础学习,分开解构各个小细节。

总结

  1. 基本的接口会用了,知道如何调用了
  2. 表结构并没有很细的解构
  3. 各个方法细节没有解构
  4. 业务逻辑,还有一些特殊的指令用法,网关,参数,等具体用法,当我们把各个bpmn概念理一遍以后,这些内容随着场景案例就会一一呈现在我们面前

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习pytorch实战第P2周:CIFAR10彩色图片识别

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/0dvHCaOoFnW8SCp3JpzKxg) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 零、引言&#xff08;温故而知新&#xff…

智能合约平台开发指南

随着区块链技术的普及&#xff0c;智能合约平台已经成为了这个领域的一个重要趋势。智能合约可以自动化执行合同条款&#xff0c;大大减少了执行和监督合同条款所需的成本和时间。那么&#xff0c;如何开发一个智能合约平台呢&#xff1f;以下是一些关键步骤。 一、选择合适的区…

MySQL学习笔记2——基础操作

基础操作 一、增删改查1、添加数据2、删除数据3、修改数据4、查询语句 二、主键三、外键和连接1、外键2、连接 一、增删改查 1、添加数据 INSERT INTO 表名[(字段名[,字段名]…)] VALUES (值的列表); --[]表示里面的内容可选添加数据分为插入数据记录和插入查询结果 插入数据…

AI+BI,欢迎数据分析进入大模型时代

过去一年大模型应用集中爆发&#xff0c;中关村科金作为领先的对话式AI技术解决方案提供商&#xff0c;基于各个行业真实的业务痛点&#xff0c;围绕营销、服务与运营场景&#xff0c;创新打造和升级了知识助手、投顾助手、智能陪练等大模型应用&#xff0c;全面赋能客户经理展…

【INNODB引擎篇】深奥探究Innodb存储引擎

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1.InnoDB引擎 1.1 逻辑存储结构 1.2 架构 1.2.1 概述 1.2.2 内存结构 1.2.3 磁盘结构 1.2.4 后台线程 1.3 事务原理 1.3.1 事务基础 1.3.2 redo log 1.…

鸿蒙TypeScript学习第12天【Map对象】

1、TypeScript Map 对象 Map 对象保存键值对&#xff0c;并且能够记住键的原始插入顺序。 任何值(对象或者原始值) 都可以作为一个键或一个值。 Map 是 ES6 中引入的一种新的数据结构&#xff0c;可以参考gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md 2、创…

【架构-九】数据库反规范化设计

什么是反规范化设计&#xff1f; 反规范化是指为了提高数据库的性能或满足特定需求而向数据库中增加冗余数据的过程。与数据库规范化设计正好相反&#xff0c;反规范化的目的是减少查询的复杂度&#xff0c;加快数据检索的速度。主要的反规范化手段如下&#xff1a; 优点&am…

YOLOv8打印模型结构配置信息并查看网络模型详细参数:参数量、计算量(GFLOPS)

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Python3.7编程之病毒

基础篇 什么是病毒 病毒&#xff0c;指的是一些通过非法手段获取系统的一些权限&#xff0c;然后进行破坏或者盗取。 病毒分为两类&#xff1a; 1、破坏型 这类病毒往往会将系统弄的乱七八糟&#xff0c;比如把你的U盘删光&#xff0c;把你的系统背景调成黑客图片&#xff0c…

python 的join函数

join函数是一个对字符串处理的函数 字符串.join(str)的含义是把字符串加入到str的每一个间隙里面 如 str1234 ,.join(str) #打印的结果为 1,2,3,4

类和对象【一】类和对象简介

文章目录 C的类与C语言结构体的区别【引入类】类的定义类体中的成员函数的实现类中的访问限定符C中class和struct的区别 类的作用域类的实例化类中成员的存储位置类的大小 C的类与C语言结构体的区别【引入类】 类里面不仅可以定义变量还可以定义函数 例 类具有封装性【将在该…

abap 字符超过255的显示

大家都知道SAP ALV的一个单元格最大显示的长度就是255 意思就是你的这个字段在内表里面即使是超过255位&#xff0c;也无法只能显示255 如果客户的需求是需要看到完整的消息内容&#xff0c; 最简单的就是将整个程序的数据右键导出到excle中去查看 如果客户执意需要在ALV中…

python+django教师业绩考评考核评分系统flask

在设计过程中&#xff0c;将参照一下国内外的一些同类网站&#xff0c;借鉴下他们的一些布局框架&#xff0c;将课题要求的基本功能合理地组织起来&#xff0c;形成友好、高效的交互过程。开发的具体步骤为&#xff1a;   第一步&#xff0c;进行系统的可行性分析&#xff0c…

佛山市人工智能产业生态交流会:实在智能Agent引领“智造浪潮”

制造业&#xff0c;实体经济的核心&#xff0c;技术创新的先锋&#xff0c;供给侧结构性改革的关键。在新一轮产业竞争中&#xff0c;数字化转型成为制造业升级的必由之路&#xff0c;是引领未来的重要抓手。 为促进数字经济赋能实体经济&#xff0c;加快人工智能技术的推广应用…

汇编入门--基础知识(1)

1.汇编语言的概念 汇编语言是一种低级编程语言&#xff0c;它与计算机的机器语言非常接近&#xff0c;但比机器语言更易于人类阅读和理解。汇编语言是用一系列的助记符来表示机器语言的操作码和操作数。每种计算机体系结构&#xff08;如x86、ARM等&#xff09;都有自己的汇编语…

CCD机器视觉在工业生产中起到什么作用?

CCD机器视觉尺寸测量是基于相对测量方法&#xff0c;通过可追溯性、放大校准、自动边缘提升和屏幕图像测量来计算实际尺寸。在精密测量中&#xff0c;放大倍数必须达到35倍或更高&#xff0c;才能达到微米级的精度。此时&#xff0c;视线宽度小于5mm。对于大于5mm的物体&#x…

小型时间继电器ST3PA-C DC24V 带插座PF085A 导轨安装 JOSEF约瑟

ST3P系列时间继电器 系列型号 ST3PF-2Z(JSZ3F-2Z) 5s AC110V ST3PF(JSZ3F) 10s AC48V ST3PC-1(AH3-3) 5s DC24V ST3PC-1(AH3-3) 2h AC220V ST3PC-F(JSZ3C-F) AC380V ST3PA-E(JSZ3A-E) DC24V ST3PA-F(JSZ3A-F) DC24V ST3PF(JSZ3F) 10s AC36V ST3PC-1(AH3-3) 10s AC24V ST3PC-1…

Linux使用C语言实现Socket编程

Socket编程 这一个课程的笔记 相关文章 协议 Socket编程 高并发服务器实现 线程池 网络套接字 socket: &#xff08;电源&#xff09;插座&#xff08;电器上的&#xff09;插口&#xff0c;插孔&#xff0c;管座 在通信过程中, 套接字是成对存在的, 一个客户端的套接字, 一个…

【算法】求{1,2,3}序列的全排列,邻里交换法(Java)

【算法】求{1&#xff0c;2&#xff0c;3}序列的全排列&#xff0c;邻里交换法&#xff08;Java&#xff09; 代码如下&#xff1a; public class Main{static int count;static int a[] {1,2,3};public static void main(String[] args) {f(a,0);System.out.println(count);}p…

MAC苹果电脑如何使用Homebrew安装iperf3

一、打开mac终端 找到这个终端打开 二、终端输入安装Homebrew命令 Homebrew官网地址&#xff1a;https://brew.sh/ 复制这个命令粘贴到mac的终端窗口&#xff0c;然后按回车键 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/in…