
工作流之Camunda开发记录(一)----常用API与流程
发布日期:2021-05-06 19:33:10
浏览次数:21
分类:技术文章
本文共 3036 字,大约阅读时间需要 10 分钟。
它是什么
一种工作流引擎,是Activiti的变种,他怎么来的其他很多地方有介绍 我不怎么关心
做什么
我本次记录的是作为工作流引擎使用 进行二次封装开发 只用他的一个壳子 具体流程是: 1、前端传他自己的Json结构。当然必要时需要添加后端定制化的东西 2、后端解析为Camunda识别的Json结构 3、解析中需要通过camunda 的 用户任务与服务任务调用自己业务的逻辑 4、发布流程定义 5、启动流程实例
日常API使用与名词介绍
准备工作
1、首先我使用的是Springboot+Camunda 启动时加上注解即可使用 在主类 + @EnableProcessApplication 当然依赖也不能少 我使用的是Gradle开发依赖是最新版的 compile group: 'org.camunda.bpm.springboot', name: 'camunda-bpm-spring-boot-starter-webapp', version: '7.14.0' 使用maven的同学可以自己再找哈 这个没啥难度 2、想要后端自己测试 可以下载一个官方画图插件 Camunda-modeler 地址为: https://github.com/camunda/camunda-modeler/releases 3、画图插件使用很简单啦 简单的画图随便看看就会了
API介绍
流程定义发布
1、上面的准备工作做完了 启动boot工程 第一次比较慢 会自动生成47张表 这个我几乎不关心 因为我用我自己的业务流程 只是用它的壳子而已 2、我们先拿到一个简单的XML结构:
// 之前我们已经在主类加了注解的话 这里直接通过Spring注入RepositoryService对象就可以使用 之后关于camunda的所有的Service 同理// 字符串发布 s1则为xml格式字符串Deployment deploy = repositoryService.createDeployment().addString("demo1.bpmn20.xml", s1).deploy();// 文件发布 其中param 是文件的路径信息Deployment deploy = repositoryService.createDeployment().addInputStream("bpmnProcessId",new FileInputStream(param)).deploy();
通过以上两种方式 我们都可以成功进行发布 这里发布失败会有提示
在我的使用过程中 我总结了几点会遇到的错误 1、bpmn文件中的id 必须以字母开头 不能以数字开始 2、若为文件发布 则文件名称必须以bpmn20.xml结尾,否则即使发布成功也不会生成流程定义,在启动实例时会报错说找不到定义 3、end是必要的但不是必须的、若没有end 我经历过启动无限循环跳不出的情况 找不到结束了嘛
这里我们还需要拿到一个发布后的id
ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().deploymentId(deploy.getId()); Listlist = processDefinitionQuery.list(); ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); System.out.println("=========1" + processDefinition.getId()); String name = deploy.getName();
这样就可以拿到流程定义id 了 如果 到这里还没有报错 就基本是发布成功了
启动流程实例
Mapparams = new HashMap<>(); DemoParam demoParam1 = new DemoParam(); DemoParam demoParam2 = new DemoParam(); DemoParam demoParam3 = new DemoParam(); params.put("s1", demoParam1); params.put("s2", demoParam2); params.put("s3", 2); ProcessInstance processInstance = runtimeService.startProcessInstanceById(param, params); String id = processInstance.getId();
启动流程是可以加入全局参数的 具体参数的使用 请看我关于服务任务的介绍。
这里的param是上面的流程定义id 这步还没有报错的话 就启动成功并且拿到了实例id 所谓的流程实例就是流程定义启动后的东西 注意一个定义可以发布多个实例 这里要提到任务种类、所谓的任务就是一个正方形 可以执行任务的种类、服务任务是自动执行的,用户任务是需要审批执行的,所以如果遇到的用户任务 任务是中止 需要审批才会继续执行
审批方法
Mapparams = new HashMap<>(); params.put("x", 1); List list = taskService.createTaskQuery().processInstanceId(param).active().list(); list.forEach(s-> { taskService.complete(s.getId()); });
当然审批过程中也可以继续在全局变量中添加参数
全局参数很重要 关系到我们以后的业务流程怎么添加参数 怎么使用参数 因为工作流是自动执行的 所以参数是在启动任务流程之前就设置好的东西
到此为止 一个基本的流程就执行成功了
至于什么查询历史等 具体业务再具体查询API即可下面简单介绍一下其他名词
任务节点:包括用户任务、服务任务、子任务等 序列流:即为线 网关:即为分叉 网关本身没有什么业务意义,只作为条件判断的一个标识、网关后的序列流可以添加条件表达式用作判断依据如果还想知道什么Camunda其他的知识、可以留言与我分享讨论
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年03月29日 13时13分40秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
系统架构
2019-03-04
网关程序的开发
2019-03-04
SpringBoot(Spring IOC 和 Spring MVC)(待补充)
2019-03-04
变量命名的通用规则
2019-03-04
程序员职业划分
2019-03-04
MFC使用opencv在picture控件上面播放摄像头视频
2019-03-04
浪潮服务器电脑BOOST界面设置开机启动
2019-03-04
六祎-Photoshop快捷键
2019-03-04
【六袆-Java】哈希算法内存图;set集合低层采用哈希表存储元素;哈希算法的流程
2019-03-04
转---原码,反码,补码的深入理解与原理。
2019-03-04
浅谈C++ 标准库中的异常 —— stdexcept类
2019-03-04
【浅谈】main函数的三个参数
2019-03-04
函数指针
2019-03-04
Ubuntu安装软件以及查看已安装软件的几种方式
2019-03-04
ubuntu18.04利用fdisk找到磁盘空闲区,新建分区,挂载
2019-03-04
STL教程:C++ STL快速入门(非常详细)
2019-03-04
MySQL中索引与视图的用法与区别详解
2019-03-04
【论文泛读03】卷积LSTM网络:一种短时降雨量预测的机器学习方法
2019-03-04
中科大-凸优化 笔记(lec45)-强凸性等价不等式
2019-03-04