camunda源代码编译运行(三):验证camunda API接口功能

接上一篇文章:camunda源代码编译运行(二):构建并运行camunda源代码工程

4.1、发布流程模型

先通过camunda的流程设计器设计一个流程,命名为:UserTask Flow1,然后发布流程,发布流程的接口是我们通过源代码发布的rest服务接口,地址为:http://localhost:8080/engine-rest

该bpmn流程设计比较简单,就是两个人工处理节点,处理人设置为demo,camunda系统初始化后默认的一个测试用户。UserTask Flow1.bpmn源文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_0lwtj60" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="5.19.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.20.0"><bpmn:process id="Process_15r7d3m" name="UserTask Flow1" isExecutable="true" camunda:historyTimeToLive="180"><bpmn:startEvent id="StartEvent_1"><bpmn:outgoing>Flow_11x673q</bpmn:outgoing></bpmn:startEvent><bpmn:sequenceFlow id="Flow_11x673q" sourceRef="StartEvent_1" targetRef="Activity_10ell5p" /><bpmn:sequenceFlow id="Flow_0foitiz" sourceRef="Activity_10ell5p" targetRef="Activity_09u1so2" /><bpmn:endEvent id="Event_0e68o48"><bpmn:incoming>Flow_01cgzte</bpmn:incoming></bpmn:endEvent><bpmn:sequenceFlow id="Flow_01cgzte" sourceRef="Activity_09u1so2" targetRef="Event_0e68o48" /><bpmn:userTask id="Activity_10ell5p" name="申请" camunda:assignee="demo"><bpmn:incoming>Flow_11x673q</bpmn:incoming><bpmn:outgoing>Flow_0foitiz</bpmn:outgoing></bpmn:userTask><bpmn:userTask id="Activity_09u1so2" name="审批" camunda:assignee="demo"><bpmn:incoming>Flow_0foitiz</bpmn:incoming><bpmn:outgoing>Flow_01cgzte</bpmn:outgoing></bpmn:userTask></bpmn:process><bpmndi:BPMNDiagram id="BPMNDiagram_1"><bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_15r7d3m"><bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"><dc:Bounds x="179" y="99" width="36" height="36" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_1xzvv8s_di" bpmnElement="Activity_10ell5p"><dc:Bounds x="270" y="77" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Activity_1h27nqt_di" bpmnElement="Activity_09u1so2"><dc:Bounds x="460" y="77" width="100" height="80" /></bpmndi:BPMNShape><bpmndi:BPMNShape id="Event_0e68o48_di" bpmnElement="Event_0e68o48"><dc:Bounds x="652" y="99" width="36" height="36" /></bpmndi:BPMNShape><bpmndi:BPMNEdge id="Flow_11x673q_di" bpmnElement="Flow_11x673q"><di:waypoint x="215" y="117" /><di:waypoint x="270" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_01cgzte_di" bpmnElement="Flow_01cgzte"><di:waypoint x="560" y="117" /><di:waypoint x="652" y="117" /></bpmndi:BPMNEdge><bpmndi:BPMNEdge id="Flow_0foitiz_di" bpmnElement="Flow_0foitiz"><di:waypoint x="370" y="117" /><di:waypoint x="460" y="117" /></bpmndi:BPMNEdge></bpmndi:BPMNPlane></bpmndi:BPMNDiagram>
</bpmn:definitions>

点击Deploy流程发布按钮

提示流程发布成功了,流程模型定义ID也显示了出来!

4.2、查询流程定义

接下来我们验证是否流程发布成功了,可以通过camunda流程引擎的服务接口查看。camunda平台提供了详细的rest服务接口,详细见文档:

Camunda Platform REST API

查看流程定义rest接口:http://{host}:{port}/{contextPath}/process-definition

用Postman测试验证:http://localhost:8080/engine-rest/process-definition

返回结果:


[{"id": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","key": "Process_15r7d3m","category": "http://bpmn.io/schema/bpmn","description": null,"name": "UserTask Flow1","version": 1,"resource": "UserTask Flow1.bpmn","deploymentId": "80719ba1-cfc5-11ee-a32c-32f6efb33b52","diagram": null,"suspended": false,"tenantId": null,"versionTag": null,"historyTimeToLive": 180,"startableInTasklist": true}]

4.3、发起一个流程

通过服务接口发起流程,去官方网站查找发起流程的rest接口:

流程发起的rest接口为:http://{host}:{port}/{contextPath}/process-definition/key/{key}/start

详细接口描述见官方文档:Camunda Platform REST API

打开postman工具进行测试验证:http://localhost:8080/engine-rest/process-definition/key/Process_15r7d3m/start

输入JSON

{"variables": {"variable1": {"value": "hello","type": "String"},"variable2": {"value": true,"type": "Boolean"}},"businessKey": "myBusinessKey-test1"}

返回结果:

{"links": [{"method": "GET","href": "http://localhost:8080/engine-rest/process-instance/2881747c-cfca-11ee-a32c-32f6efb33b52","rel": "self"}],"id": "2881747c-cfca-11ee-a32c-32f6efb33b52","definitionId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","businessKey": "myBusinessKey-test1","caseInstanceId": null,"ended": false,"suspended": false,"tenantId": null}

4.4、查询流程状态

查看流程实例的rest接口为:http://{host}:{port}/{contextPath}/process-instance/{id}

 用postman发起请求:http://localhost:8080/engine-rest/process-instance/2881747c-cfca-11ee-a32c-32f6efb33b52

返回:

{"links": [],"id": "2881747c-cfca-11ee-a32c-32f6efb33b52","definitionId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","businessKey": "myBusinessKey-test1","caseInstanceId": null,"ended": false,"suspended": false,"tenantId": null}

这时需要知道流程流转到了哪个步骤上,查看流程活动实例的rest接口:http://{host}:{port}/{contextPath}/process-instance/{id}/activity-instances

用Postman测试:

http://localhost:8080/engine-rest/process-instance/2881747c-cfca-11ee-a32c-32f6efb33b52/activity-instances

这个信息返回是比较全的,可以看出来流程当前流转到了“申请”节点,即流程刚刚启动的第一个节点。

{"id": "2881747c-cfca-11ee-a32c-32f6efb33b52","parentActivityInstanceId": null,"activityId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","activityType": "processDefinition","processInstanceId": "2881747c-cfca-11ee-a32c-32f6efb33b52","processDefinitionId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","childActivityInstances": [{"id": "Activity_10ell5p:28b18532-cfca-11ee-a32c-32f6efb33b52","parentActivityInstanceId": "2881747c-cfca-11ee-a32c-32f6efb33b52","activityId": "Activity_10ell5p","activityType": "userTask","processInstanceId": "2881747c-cfca-11ee-a32c-32f6efb33b52","processDefinitionId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","childActivityInstances": [],"childTransitionInstances": [],"executionIds": ["2881747c-cfca-11ee-a32c-32f6efb33b52"],"activityName": "申请","incidentIds": [],"incidents": [],"name": "申请"}],"childTransitionInstances": [],"executionIds": ["2881747c-cfca-11ee-a32c-32f6efb33b52"],"activityName": "UserTask Flow1","incidentIds": [],"incidents": [],"name": "UserTask Flow1"}

4.5、查询待办任务

通过上面接口得知,流程当前流转到了人工节点上,那么需要查询待办任务:

查询待办任务的rest接口:http://{host}:{port}/{contextPath}/task

用Postman测试:http://localhost:8080/engine-rest/task

返回所有的流程待办任务列表:

[{"id": "28b1d353-cfca-11ee-a32c-32f6efb33b52","name": "申请","assignee": "demo","created": "2024-02-20T16:29:26.815+0800","due": null,"followUp": null,"lastUpdated": null,"delegationState": null,"description": null,"executionId": "2881747c-cfca-11ee-a32c-32f6efb33b52","owner": null,"parentTaskId": null,"priority": 50,"processDefinitionId": "Process_15r7d3m:1:80b53453-cfc5-11ee-a32c-32f6efb33b52","processInstanceId": "2881747c-cfca-11ee-a32c-32f6efb33b52","taskDefinitionKey": "Activity_10ell5p","caseExecutionId": null,"caseInstanceId": null,"caseDefinitionId": null,"suspended": false,"formKey": null,"camundaFormRef": null,"tenantId": null}]

4.6、完成待办提交流程

完成待办任务,提交流程往下走,提交流程的rest服务接口为:

http://{host}:{port}/{contextPath}/task/{id}/complete

用Postman测试:http://localhost:8080/engine-rest/task/28b1d353-cfca-11ee-a32c-32f6efb33b52/complete

参数:

{"variables": {"variable": {"value": "china"},"variable2": {"value": false}},"withVariablesInReturn": true}

这时,我们再查询流程的的活动实例:

http://{host}:{port}/{contextPath}/process-instance/{id}/activity-instances

用Postman测试:http://localhost:8080/engine-rest/process-instance/2881747c-cfca-11ee-a32c-32f6efb33b52/activity-instances

查询流程的待办任务:

http://{host}:{port}/{contextPath}/task

用Postman测试:http://localhost:8080/engine-rest/task

可以看到,流程提交到下一个”审批”节点,待办任务也流转到了下一步骤。

4.7、查询流程变量

可以通过接口查询该流程执行实例的流程变量,查询流程变量的rest接口为:

http://{host}:{port}/{contextPath}/execution/{id}/localVariables

用Postman测试:http://localhost:8080/engine-rest/execution/2881747c-cfca-11ee-a32c-32f6efb33b52/localVariables

5、小结

本文章介绍了通过camunda7.19的源代码编译运行方式,构建自己的springboot工程,并通过RESTful接口方式,验证camunda源代码编译和运行效果。

以上仅仅是验证了camunda流程引擎和rest接口是好用的,还没有人机交互界面,camunda开源版本也提供了基于angular语言开发的web界面,但该界面功能有限(好多高级有用的功能都在camunda企业版本里),而且不太适合中国人操作习惯,所以UI界面部分建议大家选择自己熟悉的语言vue\react\angular,进行定制化开发。

流程门户界面:以下是通过vue开发的流程门户界面,包括流程中心、我的待办、我的已办、我的流程、常用流程等重要的流程操作界面,用户也可以通过可视化拖拉拽方式配置自己的门户界面。

发起流程界面:把用户有权限发起的流程,按照业务分类聚合到一个界面上,方便用户快速发起流程和审批流程。

在线体验系统:http://www.yunchengxc.com

camunda源代码:GitHub - camunda/camunda-bpm-platform: Flexible framework for workflow and decision automation with BPMN and DMN. Integration with Quarkus, Spring, Spring Boot, CDI.

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

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

相关文章

C语言第二十九弹---浮点数在内存中的存储

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 目录 1、浮点数在内存中的存储 1.1、练习 1.2、浮点数怎么转化为二进制 1.3、浮点数的存储 1.3.1、浮点数存的过程 1.3.2、浮点数取的过程 1.3、题目解析…

jquery 简介与解析

jQuery是一个快速、小巧且功能丰富的JavaScript库。它简化了诸如HTML文档遍历和操作、事件处理、动画以及Ajax操作等任务。jQuery的设计理念是“写得更少&#xff0c;做得更多”&#xff0c;这意味着通过jQuery&#xff0c;可以用更少的代码完成更多的工作。 主要特点&#xff…

Druid无法登录监控页面

问题表现&#xff1a;在配置和依赖都正确的情况下&#xff0c;无法通过配置的用户名密码登录Druid的监控页面 检查配置发现 配置的用户名和密码和请求中参数是一致的&#x1f914; Debug发现 ResourceServlet 是Druid的登录实现&#xff0c; 且调试发现usernameParam是null&am…

java集合解析-Collection 类型

Java 集合概览 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a; 一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b; 另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#xff0c;下面又有三个…

骨传导什么牌子好?六大专业选购的黄金规则与避坑指导

谈论到运动时佩戴的耳机&#xff0c;骨传导耳机必须是话题中的热点。与传统耳机或入耳式耳机不同&#xff0c;骨传导耳机解放了你的耳道&#xff0c;让你在挥洒汗水的同时&#xff0c;也能享受音乐的魅力。更重要的是&#xff0c;它不会阻碍你听到周围的声音&#xff0c;这对于…

盘点自动化汽车生产线设备 数据采集分析联合各设备

1.机器人自动装配线 机器人自动装配线已成为汽车制造业中的常见场景。这些机器人在汽车组装的各个环节发挥关键作用&#xff0c;从焊接和铆接到零部件组装。它们不仅提高了装配速度&#xff0c;还确保了产品的一致性&#xff0c;降低了废品率。 2.3D打印技术 3D打印技术正在汽车…

医院信息系统(HIS):一文扫盲,算是所有信息系统里面复杂的

大家好&#xff0c;我是贝格前端工场&#xff0c;本期继续分享常见的B端管理系统&#xff0c;欢迎大家关注&#xff0c;如有B端写系统界面的设计和前端需求&#xff0c;可以联络我们。 一、什么是HIS系统 HIS系统&#xff08;Hospital Information System&#xff09;是医院信…

【操作系统】磁盘存储空间的管理

实验5 磁盘存储空间的管理 一、实验目的 磁盘是用户存放程序和数据的存储设备&#xff0c;磁盘管理的主要目的是充分有效地利用磁盘空间。本实验模拟实现磁盘空间的分配与回收&#xff0c;使学生对磁盘空间的管理有一个较深入的理解。 二、实验内容 实验任务&#xff1a;用位…

Canal + Kafka 同步 MySQL 数据到 Redis

解决缓存和数据库一致性问题 一般来说&#xff0c;缓存中的数据没什么问题&#xff0c;但是数据库更新后&#xff0c;就容易出现缓存&#xff08;Redis&#xff09;和数据库&#xff08;MySQL&#xff09;间的数据一致性问题。由于写和读是并发的&#xff0c;没法保证顺序&…

运营抖店为什么不能多选类目?什么类目适合新手来玩?

大家好&#xff0c;我是电商小布。 想要入驻抖音小店&#xff0c;必备的资质材料就是营业执照。 而执照上的范围&#xff0c;就是我们开店所能选择的经营类目。 有的小伙伴在开店的时候&#xff0c;并没有想明白自己是想要做什么&#xff0c;小店未来的发展方向是什么。 结…

Docker基础篇(四) 容器数据卷 容器间传递共享(--volumes-from)

容器间传递共享 当前没有运行的容器 两个数据卷&#xff1a; containVolum-01 containVolum-02 docker run -it --name zenA zen/centos 上面生成了容器 zenA ctrl P Q docker run -it --name zenB1 --volumes-from zenA zen/centos ctrl P Q docker run -it --name zen…

全球游戏市场回暖,Flat Ads推动海外获客增长

摘要:热门游戏品类分析,解读新兴市场与赛道 近日,中国音数协游戏工委发布了《2023年中国游戏出海研究报告》,据报告数据显示,2023年,全球游戏市场规模11773.79亿元,同比增长6.00%,呈现增长回暖趋势。 图源:伽马数据 1.SLG和RPG游戏热度居高不下,休闲游戏增长势头强劲 目前,S…

java 时间格式 YYYY 于yyyy的区别

java formatDate 时间时&#xff0c;经常需要输入格式比如 YYYYMMDD,yyyyMMdd 这两个是有区别的 具体每个参数可以看下面

左手“兑抵接”,右手债务逾期,华夏幸福离“上岸”还有多远?

撰稿|行星 来源|贝多财经 进入2024年&#xff0c;华夏幸福仍不太“幸福”。 近日&#xff0c;华夏幸福基业股份有限公司&#xff08;SH: 600340&#xff0c;下称“华夏幸福”&#xff09;发布了关于债务逾期、债务重组进展等事项的公告。内容显示&#xff0c;华夏幸福截至1月…

MybatisPlus--03--IService、ServiceImpl

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. IService接口1.1 IService、ServiceImpl 接口的使用第一步&#xff1a;实现basemapper接口第二步&#xff1a;编写service类第三步&#xff1a;编写serviceImpl第…

白令海峡的题解

原题描述&#xff1a; 时间限制: 1000ms 空间限制: 524288kB 题目描述 很久很久以前&#xff0c;一座大陆桥横跨西伯利亚东端与美洲大陆西端。 处于进化早期的人类&#xff0c;正以部落的形式在大陆上游荡、捕猎&#xff0c;四海为家。在饥饿与寒冷折磨下&#xff0c;人…

开源软件:塑造软件行业未来的协作与创新之力

随着信息技术的迅猛发展&#xff0c;开源软件已经逐渐成为软件开发的潮流&#xff0c;以其独特的低成本、可协作性和透明度等特性&#xff0c;在全球范围内引起了广泛的关注和应用。越来越多的企业和个人选择使用开源软件&#xff0c;这不仅推动了软件行业的繁荣&#xff0c;还…

电路设计(27)——交通信号灯的multisim仿真

1.功能要求 使用数字芯片设计一款交通信号灯&#xff0c;使得&#xff1a; 主干道的绿灯时间为60S&#xff0c;红灯时间为45S 次干道的红灯时间为60S&#xff0c;绿灯时间为45S 主、次干道&#xff0c;绿灯的最后5S内&#xff0c;黄灯闪烁 使用数码管显示各自的倒计时时间。 按…

: ) 万字项目实践指南——贪吃蛇 手把手教你写出自己的小游戏!

目录 前言 1. 游戏背景 2. 游戏效果演示 3. 目标 4. 项目定位 5. 技术要点 6. Win 32 API 介绍 6.1 Win32 API 6.2 控制台程序&#xff08;Console) 6.3 控制台屏幕上的坐标COORD​ 6.4 GetStdHandle 6.5 GetConsoleCursorInfo 6.5.1 CONSOLE_CURSOR_INFO ​ 6.6 SetConsoleCur…