Activiti核心API
本章概述
流程引擎及服务
流程引擎存储服务
RepositoryService
- 管理流程定义文件xml及静态的服务
- 对特定的流程的暂停和激活
- 流程定义启动权限管理
- 部署文件构造器DeploymentBuilder
- 部署文件查询器DeploymentQuery
- 流程定义文件查询对象ProcessDefinitionQuery
- 流程部署文件对象Deployment
- 流程定义文件对象ProcessDefinittion
- 流程定义的Java格式BpmnModel(BpmnModel是纯Java的数据结构List或者Map )
流程存储服务-RepositoryService
RepostoryServiceTestprivate static final Logger LOGGER = LoggerFactory.getLogger(RepostoryServiceTest.class);@Rulepublic ActivitiRule activitiRule = new ActivitiRule();@Testpublic void testRepostory() {RepositoryService repositoryService = activitiRule.getRepositoryService();// 第一次部署DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();deploymentBuilder.name("测试部署资源").addClasspathResource("my-process.bpmn20.xml").addClasspathResource("second_approve.bpmn20.xml");// 第二次部署DeploymentBuilder deployment1 = repositoryService.createDeployment();deployment1.name("测试部署资源").addClasspathResource("my-process.bpmn20.xml").addClasspathResource("second_approve.bpmn20.xml");deployment1.deploy();Deployment deploy = deploymentBuilder.deploy();LOGGER.info(" deploy ={}", deploy);DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();List<Deployment> deployments = deploymentQuery
// .deploymentId(deploy.getId()).orderByDeploymenTime().asc().listPage(0, 100);for (Deployment deployment : deployments) {LOGGER.info("deployment = {}", deployment);}LOGGER.info("deployments.size() = {}", deployments.size());List<ProcessDefinition> definitionList = repositoryService.createProcessDefinitionQuery()
// .deploymentId(deployment.getId()).orderByProcessDefinitionKey().asc().listPage(0, 100);for (ProcessDefinition processDefinition : definitionList) {LOGGER.info("processDefinition= {},version ={}, key = {},id ={}", processDefinition, processDefinition.getVersion(), processDefinition.getKey(), processDefinition.getId());}}
测试结果
6个生成文件部署资料如下图
testSuspend
@Test@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testSuspend() {RepositoryService repositoryService = activitiRule.getRepositoryService();ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();LOGGER.info("processDefinition.id = {}", processDefinition.getId());repositoryService.suspendProcessDefinitionById(processDefinition.getId());try {LOGGER.info("开始启动");activitiRule.getRuntimeService().startProcessInstanceById(processDefinition.getId());LOGGER.info("启动成功");} catch (Exception e) {LOGGER.info("启动失败");LOGGER.info(e.getMessage(), e);}repositoryService.activateProcessDefinitionById(processDefinition.getId());LOGGER.info("开始启动");activitiRule.getRuntimeService().startProcessInstanceById(processDefinition.getId());LOGGER.info("启动成功");}
@Test@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testCandidateStarter() {RepositoryService repositoryService = activitiRule.getRepositoryService();ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().singleResult();LOGGER.info("processDefinition.id = {}", processDefinition.getId());repositoryService.addCandidateStarterUser(processDefinition.getId(), "user");repositoryService.addCandidateStarterGroup(processDefinition.getId(), "groupM");List<IdentityLink> identityLinks = repositoryService.getIdentityLinksForProcessDefinition(processDefinition.getId());for (IdentityLink identityLink : identityLinks) {LOGGER.info("identityLink", identityLink);}repositoryService.deleteCandidateStarterGroup(processDefinition.getId(), "groupM");repositoryService.deleteCandidateStarterUser(processDefinition.getId(), "user");}
流程运行控制服务
RuntimeService
启动流程及对流程数据控制
流程实例(ProcessInstance)与执行流(Execution)查询
触发流程操作,接受消息和信息
RuntimeService 启动流程及变量管理
启动流程的常用方式(id,key,message)
启动流程可选参数(businessKey,varibles,teandId)
businessKey是唯一标致
变量(variables)的设置和获取
代码如下
public class RuntimeServiceTest {private static final Logger LOGGER = LoggerFactory.getLogger(RuntimeServiceTest.class);@Rulepublic ActivitiRule activitiRule = new ActivitiRule();@Test // 根据key去启动@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testStartProcess() {RuntimeService runtimeService = activitiRule.getRuntimeService();HashMap<String, Object> variables = Maps.newHashMap();variables.put("key1", "value1");ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process", variables);LOGGER.info("processInstance = {}", processInstance);}@Test // 根据id去启动@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testStartProcessById() {RuntimeService runtimeService = activitiRule.getRuntimeService();ProcessDefinition processDefinition = activitiRule.getRepositoryService().createProcessDefinitionQuery().singleResult();HashMap<String, Object> variables = Maps.newHashMap();variables.put("key1", "value1");ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinition.getId(), variables);LOGGER.info("processInstance = {}", processInstance);}@Test // 根据流程实例去启动@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testProcessInstanceBuilder() {RuntimeService runtimeService = activitiRule.getRuntimeService();HashMap<String, Object> variables = Maps.newHashMap();variables.put("key1", "value1");ProcessInstanceBuilder processInstanceBuilder = runtimeService.createProcessInstanceBuilder();ProcessInstance processInstance = processInstanceBuilder.businessKey("businessKey001").processDefinitionKey("my-process").variables(variables).start();/*ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process", variables);*/LOGGER.info("processInstance = {}", processInstance);}@Test@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testVariables() {RuntimeService runtimeService = activitiRule.getRuntimeService();HashMap<String, Object> variables = Maps.newHashMap();variables.put("key1", "value1");variables.put("key2", "value2");ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process", variables);runtimeService.setVariable(processInstance.getId(), "key3", "values3");runtimeService.setVariable(processInstance.getId(), "key2", "values2_1");Map<String, Object> variables1 = runtimeService.getVariables(processInstance.getId());LOGGER.info("variables1 = {}", variables1);}@Test@org.activiti.engine.test.Deployment(resources = {"my-process.bpmn20.xml"})public void testProcessInstanceQuery() {RuntimeService runtimeService = activitiRule.getRuntimeService();HashMap<String, Object> variables = Maps.newHashMap();variables.put("key1", "value1");variables.put("key2", "value2");ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process", variables);LOGGER.info("processInstance = {}", processInstance);ProcessInstance processInstance1 = runtimeService.createProcessInstanceQuery().processInstanceId(processInstance.getId()).singleResult();List<Execution> executions = runtimeService.createExecutionQuery().listPage(0, 100);for (Execution execution : executions) {LOGGER.info("execution = {}", execution);}}
}
流程实例与执行流
流程实例(ProcessInstance)表示一次工作流业务的数据实体
执行流(Execution)表示流程实例中具体执行路径
流程实例接口继承执行流
流程触发
- 使用trigger触发ReceiveTask节点
- 触发信号捕获事件signalEventReceived
- 触发消息捕获事件messageEventReceived
流程触发Trigger
Java代码
@Test@org.activiti.engine.test.Deployment(resources = {"my-process-trigger.bpmn20.xml"})public void testTrigger() {RuntimeService runtimeService = activitiRule.getRuntimeService();// 开启流程ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("my-process");Execution execution = runtimeService.createExecutionQuery().activityId("someTask").singleResult();LOGGER.info("execution = {}", execution);runtimeService.trigger(execution.getId());execution = runtimeService.createExecutionQuery().activityId("someTask").singleResult();LOGGER.info("execution = {}", execution);}
my-process-trigger.bpmn20.xml
<process id="my-process"><startEvent id="start"/><sequenceFlow id="flow1" sourceRef="start" targetRef="someTask"/><!-- <userTask id="someTask" name="Activiti is awesome!" />--><receiveTask id="someTask"/><sequenceFlow id="flow2" sourceRef="someTask" targetRef="end"/><endEvent id="end"/></process>
流程触发signalEventRecvied
my-process-signal-received.bpmn20.xml
<signal id="messageStart" name="my-message"></signal><process id="my-process"><startEvent id="start"/><sequenceFlow id="flow1" sourceRef="start" targetRef="message-received"/><intermediateCatchEvent id="message-received"><signalEventDefinition signalRef="messageStart"/></intermediateCatchEvent><!-- <userTask id="someTask" name="Activiti is awesome!"/>--><sequenceFlow id="flow2" sourceRef="message-received" targetRef="end"/><endEvent id="end"/></process>
任务管理服务(TaskService)
- 对用户任务(UserTask)管理和流程控制
- 设置用户任务(UserTask)的权限信息(拥有者,候选人,办理人)
- 针对用户任务添加任务附件,任务评论和事件评论
TaskService对Task管理和流程控制
Task对象创建,删除
查询Task,并驱动Task节点完成执行
Task相关参数 变量(variable)设置
Java代码
@Test@Deployment(resources = {"my-process-task.bpmn20.xml"})public void testTaskService() {HashMap<String, Object> variables = Maps.newHashMap();variables.put("message", "my test message!!!");ProcessInstance processInstance = activitiRule.getRuntimeService().startProcessInstanceByKey("my-process", variables);TaskService taskService = activitiRule.getTaskService();Task task = taskService.createTaskQuery().singleResult();LOGGER.info("task = {}", ToStringBuilder.reflectionToString(task, ToStringStyle.JSON_STYLE));LOGGER.info("task.description = {}", task.getDescription());}
my-process-task.bpmn20.xml
<process id="my-process"><startEvent id="start"/><sequenceFlow id="flow1" sourceRef="start" targetRef="someTask"/><userTask id="someTask" name="Activiti is awesome!"activiti:candidateUsers="jimmy,user1,user2"><documentation>some Task ${message}</documentation></userTask><sequenceFlow id="flow2" sourceRef="someTask" targetRef="end"/><endEvent id="end"/></process>
最新2021整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,SpringBoot、Spring Cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君羊:826021115
Activiti核心API相关推荐
- JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成
管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...
- JAVAWEB开发之工作流详解(一)——Activiti的环境搭建、插件安装、核心API
工作流的概念 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任 ...
- Activiti6.0 (三)核心API
核心API RepositoryService: 负责对流程定义文件的管理,操作一些静态文件(流程xml.流程图片),获取部署对象和资源对象 RunTimeService: 对流程进行控制,可用于启动 ...
- Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)
文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...
- hibernate教程--常用配置和核心API详解
一.Hibernate的常用的配置及核心API. 1.1 Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置: 1)属性文件的配置: * hibernate.prop ...
- hibernate教程--常用配置和核心API
一.Hibernate的常用的配置及核心API. 1.1Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置: 1)属性文件的配置: * hibernate.proper ...
- hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等...
核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...
- EXT核心API详解(二)-Array/Date/Function/Number/String
EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o ) Number object是否在数组中,找不到返 ...
- 核心API最佳实践——JDK日志分级
核心API最佳实践--JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小] 日志(Log)是什么?字典对其的解释是"对某种机器工作 ...
最新文章
- AI检测制造“零缺陷”
- nullable java_java-持久性@Column nullable = false可以插入null
- OpenCV仿射变换 SURF特征点描述合辑
- [转]符号和运算符参考 (F#)
- win7如何打开防火墙某个端口的tcp连接
- 设计模式理解:中介者模式(Mediator)
- 高阶前端开发人员必备工具-Node.JS知识讲解
- 查看linux显示文件大小,Linux下查看占用最大的文件和文件夹大小
- Tensorflow载入模型详解,方法一(基础版):针对测试模型性能 和 使用模型。
- 无表头单链表的总结----删除节点
- 软件——机器学习与Python,Python3的输出与输入
- 十年再出发!阿里云智能总裁张建锋演讲全记录
- 【数据结构和算法笔记】:数据结构概述
- 【转】android 常用theme
- visio安装报错 1:1935 2:{XXXXXXXX...
- gets和puts基本用法。
- 微信公众号推文各标签含义
- 给邮箱和手机号码打码
- java jpanel边框_JPanel设置边框
- IDEA鼠标悬停显示注释
热门文章
- QQ盗号软件后门分析与反击
- 汤臣倍健创业25周年,宣布公司未来3年四个战略重点
- 计算机网络-常用英文简写大全
- 莽莽昆仑开鸿蒙,中国科技人,那些“芳心纵火犯”
- Functionlan通过星际文件系统免费使用云应用程序
- Android android_id, deviceId, oaid的区别
- 一步一步实战HTML音乐播放器
- Cannot resolve reference to bean sqlSessionFactory while setting bean property sqlSessionFactory
- 回归本心QwQ背包问题luogu1776
- Apache入门 篇(二)之apache 2.2.x常用配置解析