RuntimeService 运行服务类
支持启动的方式

流程定义: 从这里获取资源文件.

执行实例: 流程实例中执行的每个环节.流程实例: 一个流程实例包括所有运行的节点,一个流程中流程实例只有一个.

启动一个实例:

   public void startProcessInstanceByKey() {String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId() + "," + processInstance.getActivityId());}

查询该受理人的任务:

   public void queryMyTask() {String processDefinitionKey = "leave";String assignee = "王五";List<Task> list = taskService.createTaskQuery().taskAssignee(assignee).processDefinitionKey(processDefinitionKey).list();}

完成任务:

   public void completeMyTask() {String taskId = "54502";taskService.complete(taskId);}

查找运行实例的状态:
方式1:

   public void queryProcessInstanceState() {ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId("59501")//.deploymentId().singleResult();if (processInstance != null) {System.out.println("当前流程实例正在运行");} else {System.out.println("当前流程实例已经结束");}}

方式2:

   public void queryProcessInstanceState2() {String processInstanceId = "59501";HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();if (historicProcessInstance.getEndTime() == null) {System.out.println("当前流程实例正在运行");} else {System.out.println("当前流程实例已经结束");}}

流程实例执行完成,相应的execution表中数据将被删除.

查询执行实例

   public void createExecutionQuery() {List<Execution> executions = runtimeService.createExecutionQuery().list();for (Execution execution : executions) {System.out.println(execution.getId() + "," + execution.getActivityId());}}

查询历史流程实例:

    public void createHistoricProcessInstanceQuery() {String processInstanceId = "59501";HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();System.out.println("流程定义ID:" + hpi.getProcessDefinitionId());System.out.println("流程实例ID:" + hpi.getId());System.out.println(hpi.getStartTime());System.out.println(hpi.getStartActivityId());System.out.println(hpi.getEndTime());}

查询历史活动实例:

    public void createHistoricActivityInstanceQuery() {List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery().list();for (HistoricActivityInstance hai : list) {System.out.println(hai.getId());}}

查询历史任务实例:

    //select distinct RES.* from ACT_HI_TASKINST RES order by RES.ID_ ascpublic void createHistoricTaskInstanceQuery() {List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();}

设置流程发起人:

方式1 :

   public void setAuthenticatedUserId1() {String authenticatedUserId = "朱元璋";identityService.setAuthenticatedUserId(authenticatedUserId);String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId() + "," + processInstance.getActivityId());}

方式2 :

   public void setAuthenticatedUserId2() {String authenticatedUserId = "朱重八";Authentication.setAuthenticatedUserId(authenticatedUserId);String processDefinitionKey = "leave";ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey);System.out.println(processInstance.getId() + "," + processInstance.getActivityId());}

initiator结合流程实例启动人使用:

启动一个流程实例后会发现act_ru_variable会多出一条参数数据.

dataobject的使用:



部署相关的流程,启动流程后variable表中添加3条数据

log4j.properties中配置(打印variable的日志信息):
获取DataObject参数:

方式1:

/*** select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and NAME_= ? and TASK_ID_ is null* - ==> Parameters: 77001(String), day(String)*/@Testpublic void getDataObject() {String executionId = "77001";String dataObject = "天数";DataObject dataObject1 = runtimeService.getDataObject(executionId, dataObject);if (dataObject1 != null) {System.out.println(dataObject1.getDataObjectDefinitionKey());System.out.println(dataObject1.getDescription());System.out.println(dataObject1.getExecutionId());System.out.println(dataObject1.getName());System.out.println(dataObject1.getValue());System.out.println(dataObject1.getType());}}

方式2:

/*** select * from ACT_RU_VARIABLE where EXECUTION_ID_ = ? and TASK_ID_ is null*/@Testpublic void getDataObject2() {String executionId = "77001";Map<String, DataObject> dataObject1 = runtimeService.getDataObjects(executionId);Set<Map.Entry<String, DataObject>> entries = dataObject1.entrySet();for (Map.Entry<String, DataObject> dataObjectEntry : entries) {DataObject dataObject = dataObjectEntry.getValue();if (dataObject != null) {System.out.println(dataObject.getDataObjectDefinitionKey());System.out.println(dataObject.getDescription());System.out.println(dataObject.getExecutionId());System.out.println(dataObject.getName());System.out.println(dataObject.getValue());System.out.println(dataObject.getType());}}}

流程实例的删除以及级联删除:

    @Testpublic void deleteProcessInstance() {String processInstanceId = "72001";String deleteReason = "我想删除";runtimeService.deleteProcessInstance(processInstanceId, deleteReason);}//级联删除@Testpublic void deleteProcessInstanceCascade() {String processInstanceId = "69501";String deleteReason = "我想删除";//processEngineConfiguration方式// ProcessEngineConfigurationImpl processEngineConfiguration = //(ProcessEngineConfigurationImpl) processEngine.getProcessEngineConfiguration();        //processEngineConfiguration.getExecutionEntityManager()//.deleteProcessInstance(processInstanceId,deleteReason,true);//DeleteProcessInstanceCaCadeCmd方式删除managementService.executeCommand(new DeleteProcessInstanceCaCadeCmd(processInstanceId, deleteReason));}

获取流程实例运行节点:

public void getActiveActivityIds() {String executionId = "77005";List<String> activeActivityIds = runtimeService.getActiveActivityIds(executionId);
}

租户方式部署以及启动:

//根据流程定义的id启动
public void startProcessInstanceById() {String processDefinitionId = "dataobject:1:74504";ProcessInstance processInstance = runtimeService.startProcessInstanceById(processDefinitionId);
}
//根据流程定义的key和租户id
public void startProcessInstanceByKeyAndTenantId() {ProcessInstance processInstance = runtimeService.startProcessInstanceByKeyAndTenantId("leave", "001");
}

自定义流程实例助手类:
首先,重写里面的方法

//重写MyProcessInstanceHelper集成ProcessInstanceHelper ,并重写里面的方法
public class MyProcessInstanceHelper extends ProcessInstanceHelper {@Overridepublic ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, Map<String, Object> variables, Map<String, Object> transientVariables) {return super.createProcessInstance(processDefinition, businessKey, processInstanceName, variables, transientVariables);}@Overridepublic ProcessInstance createProcessInstance(ProcessDefinition processDefinition, String businessKey, String processInstanceName, String overrideDefinitionTenantId, Map<String, Object> variables, Map<String, Object> transientVariables, String callbackId, String callbackType, boolean startProcessInstance) {System.out.println("MyProcessInstanceHelper:createProcessInstance");return super.createProcessInstance(processDefinition, businessKey, processInstanceName, overrideDefinitionTenantId, variables, transientVariables, callbackId, callbackType, startProcessInstance);}
}

然后,通过配置文件注入进来

<property name="processInstanceHelper" ><bean class="com.heima.bpmn.MyProcessInstanceHelper"></bean>
</property>

流程定义的挂起与激活:

判断流程定义是否被挂起

public void isProcessDefinitionSuspended() {String processDefinitionId = "leave:2:67004";boolean processDefinitionSuspended = repositoryService.isProcessDefinitionSuspended(processDefinitionId);System.out.println(processDefinitionSuspended);
}

挂起一个流程实例

public void suspendProcessDefinitionById() {String processDefinitionId = "leave:2:67004";repositoryService.suspendProcessDefinitionById(processDefinitionId,true,null);
}

释放流程实例

public void activateProcessDefinitionById() {String processDefinitionId = "leave:2:67004";repositoryService.activateProcessDefinitionById(processDefinitionId);
'}

flowable流程实例笔记(1)相关推荐

  1. 12.flowable 流程实例 终止流程

    项目地址:https://gitee.com/lwj/flowable.git 分支flowable-base 视频讲解地址 https://space.bilibili.com/485524575/ ...

  2. flowable流程实例管理接口

    一.流程实例的管理接口常见功能: 1.启动一个流程(即创建一个流程实例) 2.本人发起的流程实例 3.本人参与的流程实例 4.挂起/激活流程实例 5.提前终止流程实例(或又叫撤销流程) 6.彻底删除流 ...

  3. flowable实战(三)flowable流程实例管理接口

    文章目录 一.流程实例的管理接口常见功能: 1.启动一个流程(即创建一个流程实例) 2.本人发起的流程实例 3.本人参与的流程实例 4.挂起/激活流程实例 5.提前终止流程实例(或又叫撤销流程) 6. ...

  4. Flowable 流程实例的挂起(暂停)与激活

    今天来和小伙伴们聊一聊流程的挂起和激活. 这块实际上涉及到两部分内容: 流程定义的挂起和激活. 流程实例的挂起和激活. 一个定义好的流程,如果挂起了,那么就无法据此创建新的流程. 一个流程实例如果挂起 ...

  5. springboot集成flowable创建请假流程实例

    springboot如何集成flowable,如何部署flowable在线编辑器画bpm图以及bpm图的画法,我在上一篇博客中写了,这里直接上代码(源码地址:晚安/flowable_holiday ( ...

  6. Flowable 6.6.0 BPMN用户指南 -10 流程实例迁移 - 10.1 简单示例

    Flowable 6.6.0 用户指南相关文档下载 BPMN用户指南 第一部分 - 中文PDF精编版 BPMN用户指南 第二部分 - 中文PDF精编版 BPMN用户指南 第三部分 - 中文PDF精编版 ...

  7. 《Activiti/Flowable 深入BPM工作流》-流程实例怎么实现挂起?

    <Activiti/Flowable  深入BPM工作流>-流程实例怎么实现挂起? 一. 问题 1. 什么情况要进行流程的挂起? 2. 具体怎么将流程挂起? 二. 详情   1. 什么情况 ...

  8. 《Flowable流程引擎从零到壹》Flowable流程引擎介绍和实战项目初始化流程引擎实例

    14天学习训练营导师课程: 邓澎波<Flowable流程引擎-基础篇[2022版]> 邓澎波<Flowable流程引擎-高级篇[2022版]> 学习笔记<Flowable ...

  9. (经验总结)flowable工作流_01_流程实例管理

    文章目录 一.流程定义管理功能有哪些? 二.删除流程实例会删除哪些表中的数据? 三.流程实例做什么用? 四.流程定义涉及的表 一.流程定义管理功能有哪些? 类名:ApiFlowableProcessI ...

最新文章

  1. 先验概率,后验概率,最大似然估计,最大后验概率
  2. Oracle不同系统之间时间转换(NLS_DATE_LANGUAGE )
  3. SSO CAS 探究
  4. 网易内推java 面试_网易内推面试
  5. ONVIF网络摄像头(IPC)客户端开发—RTSP RTCP RTP加载H264视频流
  6. 【java的socket编程】结合多线程Thread实现通信(使用线程池和非线程池对比)、java开发UDP/IP网络程序
  7. 2021年 第12届 蓝桥杯【备赛直播公开课 —— 软件类(本科组、高职高专组)】
  8. 梅森增益matlab求解,梅森公式互不接触回路及其增益
  9. 博客目录(随时删除)
  10. 力扣-628 三个数的最大乘积
  11. 弹出框插件——dialog
  12. spring mvc +@Valid +@RequestBody 来做参数校验返回400,并且不显示具体message 如何解决...
  13. 基于情感词典进行情感态度分析
  14. 微信小程序 - 80个实用的微信小程序项目实例
  15. 电脑如何录制gif动图
  16. Oracle 19c对VARCHAR2的限制
  17. 【附源码】计算机毕业设计java在线学习交流平台设计与实现
  18. 【文摘】《原则》——雷.达里奥
  19. PyGmae:有限状态机实践(十二)
  20. PPT结束语有哪些?

热门文章

  1. 3 个月如何从小白到 Python 高手?清华博士带你入门带你飞!
  2. 我的世界服务器修改数据,我的世界常用指令大全,轻松调整服务器数值状态
  3. linux htb 源代码,LINUX TC:HTB相关源码
  4. Linux下ARM开发环境搭建
  5. 窗口函数和hive优化简记
  6. Hbase 预写日志WAL处理源码分析之 LogCleaner
  7. Android项目架构设计深入浅出
  8. 在 Dubbo3.0 上服务治理的实践
  9. 深度 | 带领国产数据库走向世界,POLARDB底层逻辑是什么?
  10. 数据科学家为什要用Git?怎么用?