flowable流程实例笔记(1)

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);
'}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/522772.shtml

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

相关文章

flowable6.4.2流程审批后涉及到的表

当流程全部走完后&#xff0c;act_ru_*表的数据清空了&#xff0c;全部移到了act_hi_*表

阿里云弹性高性能计算产品商业化正式发布

摘要&#xff1a; 来自全国500多家企业申请试用&#xff0c;结合客户的体验需求和反馈意见&#xff0c;不断地改善和打磨&#xff0c;弹性高性能计算商业版有了很大的优化&#xff0c;在产品性能和体验上都有全新的升级。 点此查看原文&#xff1a;http://click.aliyun.com/m/4…

php中 怎么去除,php如何去掉链接

php去掉链接的方法&#xff1a;1、删除内容中的超链接ereg_replace(]*)>([^,\\2,$content);ereg_replace("]*>|","",$content);2、消除包含特定词的超链接$find"this string is my find";$string替换掉了;//将超链接替换成的内容echo ereg…

RabbitMQ入门指南(八):MQ可靠性

专栏导航 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、MQ数据持久化 1.交换机持久化 2.队列持久化 3.消息持久化 4.生产者确认机制 二、LazyQueue 1.LazyQueue模式介绍 2.管理控制台配置Lazy模式 3.代码配置Lazy模式 4.更新已有队列为lazy模式 总…

MaxCompute常用语句汇总(更新ing)

摘要&#xff1a; 收集一些MaxCompute常用命令。 点此查看原文&#xff1a;http://click.aliyun.com/m/41645/ 大数据计算服务(MaxCompute&#xff0c;原名ODPS&#xff0c;产品地址&#xff1a;https://www.aliyun.com/product/odps)是一种快速、完全托管的TB/PB级数据仓库解决…

290种零食大统计,谁能唤起80、90后的童年回忆?|数据会说话

戳蓝字“CSDN云计算”关注我们哦&#xff01;数据分析&#xff1a;喜欢果脯的朱小五内容撰写&#xff1a;只爱辣条的王小九本文转自公众号『凹凸数读』1块钱能买到什么&#xff1f;对于80、90后的童年来讲&#xff0c;1块钱是4根冰棍&#xff0c;是10张辣片&#xff0c;是两包双…

php socket主动推送消息,PHP使用WebSocket主动推送【微信小程序接收】

WebSocket.jpegWebsocket是一种服务端和客户端可以持久连接的通信协议&#xff0c;我们可以利用WebSocket的特性实现服务器主动向客户端推送消息的功能。这里我们用TP5.1框架结合Workerman来做演示首先用Composer下载TP5.1框架composer create-project topthink/think5.1.* tp5…

EDAS再升级!全面支持Spring Cloud应用

摘要&#xff1a; 近日&#xff0c;阿里中间件&#xff08;Aliware&#xff09;的企业级分布式应用服务EDAS宣布再次升级&#xff0c;全面支持Spring Cloud应用。 点此查看原文&#xff1a;http://click.aliyun.com/m/41644/ 近日&#xff0c;阿里中间件&#xff08;Aliware&am…

微博宕机复盘:什么样的技术架构,可支持80个明星并发出轨?

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 张蓝予编辑 | 苏琦6月27日晚间&#xff0c;范冰冰李晨宣布分手&#xff0c;瞬间亿级的访问量&#xff0c;让微博再一次“崩溃”&#xff1a;范冰冰账号评论区无法加载&#xff0c;搜索“范冰冰李晨”显示失败。微博曾经夸下海…

flowable 动态多实例

<?xml version"1.0" encoding"UTF-8"?> <definitions xmlns"http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd"http://www.w3.org/2001/XMLSchema&quo…

为什么MaxCompute采用列式存储?列式存储和行式存储的主要区别在哪

摘要&#xff1a; 1 为什么要按列存储 列式存储(Columnar or column-based)是相对于传统关系型数据库的行式存储(Row-basedstorage)来说的。简单来说两者的区别就是如何组织表(翻译不好&#xff0c;直接抄原文了)&#xff1a; Row-based storage stores atable in a sequence …

Hive精华问答 | Hive和传统数据库有什么不同?

Hive是一个数据仓库基础工具&#xff0c;它是建立在Hadoop之上的数据仓库&#xff0c;在某种程度上可以把它看做用户编程接口&#xff08;API&#xff09;&#xff0c;本身也并不存储和处理数据&#xff0c;依赖于HDFS存储数据&#xff0c;依赖MR处理数据。它提供了一系列对数据…

MaxCompute SQL原理解析及性能调优

摘要&#xff1a; 分享内容 介绍了ODPS SQL的基于mapreduce是如何实现的及一些使用小技巧&#xff0c;回顾了mapreduce各个阶段可能产生的问题及相应的处理方法&#xff0c;同时介绍了一些应对数据倾斜的处理方法&#xff0c;最后介绍了一些关于数据集构造、特征选择的技巧帮助…

flowable用户组的处理

背景 flowable有自己的用户账号信息&#xff0c;用户信息&#xff0c;用户组信息&#xff0c;其实这些用户信息都我们系统可能都存在&#xff0c;那么我们如何去使用一份数据呢&#xff1f; 1.我们可以建立视图直接取我们的组织信息&#xff0c;这个可以参考相关的文档 2.我们…

微软 SQL Server 2019 将免费支持 Java;Rancher Labs获2500万美元融资;腾讯云进军日本市场……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go “2019世界计算机大会”新闻…

玩 High API 系列之:实现钉钉Ding功能

摘要&#xff1a; 钉钉是企业IM市场上的领先者&#xff0c;深受中小企业客户的喜欢&#xff0c;就再几天前刚刚宣布用户数超过1亿&#xff01;在钉钉里面有个特别实用的功能&#xff0c;那就是Ding一下&#xff0c;如果你发的消息特别紧急&#xff0c;可以直接通过短信、电话等…

flowable中动态显示节点的审批人信息

1、上面的流程图当任务还没有到的节点&#xff0c;用户想看看节点的人的信息&#xff0c;如果我们常规的是不能实现的。 2、思路就是我们取出节点的表达式&#xff0c;然后用我们流程实例的变量来给他翻译出来即可&#xff0c;如何做呢&#xff1f; 2.1、通过流程实例id查出历…

InfoComm China 2019,揭秘“NVIDIA风格”数据科学!

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者|刘晶晶在炫酷的复联4电影中&#xff0c;超过2600个特效镜头层出不穷&#xff0c;意味着电影的后期剪辑与特效对于硬件设备的要求越发提高&#xff0c;毕竟特效制作着力依赖画面渲染。我们了解&#xff0c;在没有GPU之前&#x…

玩 High API 系列之:智能云相册

摘要&#xff1a; 相册是手机中的一个非常重要的功能&#xff0c;然而目前的大部分手机的相册非常普通&#xff0c;仅仅有查看照片&#xff0c;编辑相片的等几个简单功能。我们来看看如果在API时代&#xff0c;如何通过调用API快速实现一个好玩的&#xff0c;具备智能分析识别、…

玩 High API 系列好文:UGC内容检测、视频智能、拍照翻译、懂天气的草地喷水头...

摘要&#xff1a;玩 High API 系列好文&#xff1a;UGC内容检测、视频智能、拍照翻译、懂天气的草地喷水头 导读&#xff1a;初创公司可以利用API来解决问题。了解更多场景如何玩High API&#xff1f;如何将API变现&#xff1f;请下载阿里云 API Playbook&#xff08;免费下载&…