本章概述

流程引擎及服务

流程引擎存储服务

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相关推荐

  1. JAVAWEB开发之工作流详解(二)——Activiti核心API的使用(流程定义和流程实例的管理、流程变量、监听器...)以及与Spring的集成

    管理流程定义 设计流程定义文档 bpmn文件 设置方式可以直接使用插件图形化界面进行设置 为某任务节点指定任务执行者 保存后的BPMN文件可以使用XML编辑器打开 BPMN 2.0根节点是defini ...

  2. JAVAWEB开发之工作流详解(一)——Activiti的环境搭建、插件安装、核心API

    工作流的概念 工作流(Workflow),就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任 ...

  3. Activiti6.0 (三)核心API

    核心API RepositoryService: 负责对流程定义文件的管理,操作一些静态文件(流程xml.流程图片),获取部署对象和资源对象 RunTimeService: 对流程进行控制,可用于启动 ...

  4. Activiti工作流从入门到入土:完整Hello World大比拼(Activiti工作流 API结合实例讲解)

    文章源码托管:https://github.com/OUYANGSIHAI/Activiti-learninig 欢迎 star !!! 本来想着闲来无事,前面在项目中刚刚用到了工作流 Activit ...

  5. hibernate教程--常用配置和核心API详解

    一.Hibernate的常用的配置及核心API. 1.1 Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置:  1)属性文件的配置: * hibernate.prop ...

  6. hibernate教程--常用配置和核心API

    一.Hibernate的常用的配置及核心API. 1.1Hibernate的常见配置: 1.1.1.核心配置: 核心配置有两种方式进行配置: 1)属性文件的配置: * hibernate.proper ...

  7. hibernate框架学习第二天:核心API、工具类、事务、查询、方言、主键生成策略等...

    核心API Configuration 描述的是一个封装所有配置信息的对象 1.加载hibernate.properties(非主流,早期) Configuration conf = new Conf ...

  8. EXT核心API详解(二)-Array/Date/Function/Number/String

    EXT核心API详解(二)-Array/Date/Function/Number/String Array类 indexOf( Object o )  Number object是否在数组中,找不到返 ...

  9. 核心API最佳实践——JDK日志分级

    核心API最佳实践--JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小] 日志(Log)是什么?字典对其的解释是"对某种机器工作 ...

最新文章

  1. AI检测制造“零缺陷”
  2. nullable java_java-持久性@Column nullable = false可以插入null
  3. OpenCV仿射变换 SURF特征点描述合辑
  4. [转]符号和运算符参考 (F#)
  5. win7如何打开防火墙某个端口的tcp连接
  6. 设计模式理解:中介者模式(Mediator)
  7. 高阶前端开发人员必备工具-Node.JS知识讲解
  8. 查看linux显示文件大小,Linux下查看占用最大的文件和文件夹大小
  9. Tensorflow载入模型详解,方法一(基础版):针对测试模型性能 和 使用模型。
  10. 无表头单链表的总结----删除节点
  11. 软件——机器学习与Python,Python3的输出与输入
  12. 十年再出发!阿里云智能总裁张建锋演讲全记录
  13. 【数据结构和算法笔记】:数据结构概述
  14. 【转】android 常用theme
  15. visio安装报错 1:1935 2:{XXXXXXXX...
  16. gets和puts基本用法。
  17. 微信公众号推文各标签含义
  18. 给邮箱和手机号码打码
  19. java jpanel边框_JPanel设置边框
  20. IDEA鼠标悬停显示注释

热门文章

  1. QQ盗号软件后门分析与反击
  2. 汤臣倍健创业25周年,宣布公司未来3年四个战略重点
  3. 计算机网络-常用英文简写大全
  4. 莽莽昆仑开鸿蒙,中国科技人,那些“芳心纵火犯”
  5. Functionlan通过星际文件系统免费使用云应用程序
  6. Android android_id, deviceId, oaid的区别
  7. 一步一步实战HTML音乐播放器
  8. Cannot resolve reference to bean sqlSessionFactory while setting bean property sqlSessionFactory
  9. 回归本心QwQ背包问题luogu1776
  10. Apache入门 篇(二)之apache 2.2.x常用配置解析