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

news2024/11/18 14:50:48

接上一篇文章: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://www.coloradmin.cn/o/1462267.html

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

相关文章

HUD阳光倒灌实验TFT温升实验太阳光模拟器

随着汽车行业的不断发展&#xff0c;车辆的智能化程度越来越高&#xff0c;而HUD抗干扰太阳光模拟器作为一种新型的解决驾驶员视线问题的方案&#xff0c;引起了人们的广泛关注。它能够有效地解决驾驶员在阳光强烈或者夜间光线不足时的视线问题&#xff0c;提高了驾驶的安全性和…

Java写爱心

突然想用Java写一个爱心&#xff0c;程序运行效果如下&#xff1a; 话不多说&#xff0c;上代码 ! public class LovingHeart {/*** 判断坐标是否在爱心范围内*/private static boolean inHeart(float x,float y){float ax*xy*y-1;return a*a*a-x*x*y*y*y<0.0f;}/*** 爱心…

【Vuforia+Unity】AR05-实物3D模型识别功能实现

对于3D物体的识别&#xff0c;可以是虚拟的也可以是实物的&#xff0c;但是对于虚拟的三维模型意义不大&#xff0c;我们完全可以把三维模型放在屏幕上截一张图&#xff0c;以图片识别的方式召唤数字内容&#xff0c;不过在虚拟现实中或许有用。 因此本文探讨的技术路线主要是…

Gitee教程2(完整流程)

1.配置git git config --global user.name "用户名" git config --global user.email "密码" 如何获取&#xff1f; gitee右上角加号点击新建仓库&#xff0c;仓库名随便起一个就行 找到这条命令&#xff0c;把这两句一个一个复制到vscode终端就行 2.创建g…

【2.3深度学习开发任务实例】(1)神经网络模型的特点【大厂AI课学习笔记】

从本章开始&#xff0c;我把标题的顺序变了一下&#xff0c;大厂AI课笔记&#xff0c;放到后面。因为我发现App上&#xff0c;标题无法显示完全。 从本章开始&#xff0c;要学习深度学习开发任务的全部过程了。 我们将通过小汽车识别赛道上的标志牌&#xff0c;给出检测框&am…

2.21 Qt day2 菜单栏/工具栏/状态栏/浮动窗口、UI界面、信号与槽

思维导图 使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;…

11、内网安全-横向移动NTLM-Relay重放Responder中继攻击LdapEws

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 目录 前提知识&#xff1a; 一、横向移动-NTLM 中继攻击-Relay 重放-SMB 上线 1、CS权限转给MSF: 2、MSF: 3、添加路由&#xff1a; 4、smb_relay重发模块&#xff1a; 5、受控主机输…

良好的 API 安全策略的重要性

根据 Cloudflare 2024 年 API 安全与管理报告&#xff0c;到 2024 年&#xff0c;API 请求占全球动态互联网流量的 57%&#xff0c;这证实 API 是现代软件开发的重要组成部分。但随着多年来它们的采用不断增加&#xff0c;相关的安全挑战也随之增加。 在过去两年中&#xff0c…

备战蓝桥杯---动态规划(应用2(一些十分巧妙的优化dp的手段))

好久不见&#xff0c;甚是想念&#xff0c;最近一直在看过河这道题&#xff08;感觉最近脑子有点宕机QAQ&#xff09;&#xff0c;现在算是有点懂了&#xff0c;打算记录下这道又爱又恨的题。&#xff08;如有错误欢迎大佬帮忙指出&#xff09; 话不多说&#xff0c;直接看题&…

ThreadLocal的一些理解

阅读本篇博客您将了解如下内容&#xff1a; TreadLocal的作用。ThreadLocal的实现原理。ThreadLocal是否会引起内存泄漏&#xff0c;在什么样的条件下引发&#xff0c;如何避免。 1、ThreadLocal的作用 使用线程封闭的指导思想来解决变量共享的并发安全问题&#xff0c;–可以…

跳表是一种什么样的数据结构

跳表是有序集合的底层数据结构&#xff0c;它其实是链表的一种进化体。正常链表是一个接着一个用指针连起来的&#xff0c;但这样查找效率低只有O(n)&#xff0c;为了解决这个问题&#xff0c;提出了跳表&#xff0c;实际上就是增加了高级索引。朴素的跳表指针是单向的并且元素…

FPGA之复选器(2)

8:1 复选器 每个slice具有一个F7AMUX和一个F7BMUX F7AMUX 和 F7BMUX 原语&#xff1a; MUXF7 MUXF7_inst ( .O(O),//Output of MUX to general routing. I0(10), // Input (tie to LUT6 O6 pin) II(II), //Input (tie to LUT6 O6 pin) SS)// Input select to MUX 这两个…

【网站项目】167校园失物招领小程序

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

Linux之用户和用户组的深入了解

目录 一、简介 1.1、用户&#xff1a; 1.2、用户组 1.3、UID和GID 1.3、用户账户分类 查看用户类别 超级用户root(0) 程序用户(1~499) 普通用户(500~65535) 二、用户 2.1、添加新的用户账号&#xff1a;useradd 2.2、删除账号&#xff1a;userdel 有-r与没有-r区别…

人为物累,心为形役

一、人是什么 你是你&#xff0c;他是他&#xff0c;我是我&#xff0c;有什么区别吗&#xff0c;直到自我发现我与你不同时&#xff0c;不同是什么&#xff0c;身体结构&#xff1f;人生经历&#xff1f;所拥有的一切&#xff1f;暂时搁置这些的话&#xff0c;抽离我们的意识…

【关于深度学习的一些资料】

曾梦想执剑走天涯&#xff0c;我是程序猿【AK】 目录 动手学深度学习Awesome Deep LearningTensorFlow Official ModelsPyTorch Image ModelsDeep Reinforcement LearningNeural Style Transfer 动手学深度学习 动手学深度学习 https://zh.d2l.ai/chapter_installation/index.…

4核8G服务器腾讯云和阿里云租用价格对比,2024更新

4核8G云服务器多少钱一年&#xff1f;阿里云ECS服务器u1价格955.58元一年&#xff0c;腾讯云轻量4核8G12M带宽价格是646元15个月&#xff0c;阿腾云atengyun.com整理4核8G云服务器价格表&#xff0c;包括一年费用和1个月收费明细&#xff1a; 云服务器4核8G配置收费价格 阿里…

学习大数据所需的java基础(5)

文章目录 集合框架Collection接口迭代器迭代器基本使用迭代器底层原理并发修改异常 数据结构栈队列数组链表 List接口底层源码分析 LinkList集合LinkedList底层成员解释说明LinkedList中get方法的源码分析LinkedList中add方法的源码分析 增强for增强for的介绍以及基本使用发2.使…

SpringIOC之support模块StaticApplicationContext

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

【Redis】理论进阶篇------浅谈Redis的缓存穿透和雪崩原理

一、缓存穿透 1、概念 缓存穿透&#xff08;查不到数据&#xff09;&#xff0c;是指当用户想要查询数据的时候&#xff0c;会先去Redis中取命中&#xff0c;如果Redis中没有该数据&#xff0c;那么就会向数据库中去查找数据。如果数据库中也没有&#xff0c;则该次查询结果失…