Activit的心路历程:获取当前节点的上一节点【可能存在多个】的nodeId
在我的开发任务中,突然给我提出了一个待办任务需要获取当前任务节点上以任务节点的表单信息,刚开始搞得我有点措手不及,后来仔细是靠后,灵感一下,直接操作流程的bpmn信息就可以获取到节点信息嘛,顺着这个思路,我整理出了自己的思路:
(1)将节点大体分为两类,一类是网关节点,另外一类就是用户任务节点,使用List集合,将网关与用户任务进行分类
(2)获取上一节点,我们就需要从bpmn的连线信息入手,固定连线的targtaetRef,辨别sourceRef节点的类型,当是用户任务时,放进 List frontNodeIdlist = new ArrayList<>();,当是GateWay节点时,将targtaetRef设为网关的,继续遍历上一节点,就是跳过网关节点,只要用户任务节点
/**
* 获取当前节点上一节点id【可能多个节点id】
* @param task
* @return
*/
private List<String> getFrontUserTaskIds(Task task){
String nodeId=task.getTaskDefinitionKey();
//网关集合
List<Gateway> gateways = new ArrayList<>();
//用户任务集合
List<UserTask> userTasks = new ArrayList<>();
//网关节点id
List<String> gatewayNodelIdList = new ArrayList<>();
//用户任务节点id
List<String> usertaskNodelIdList = new ArrayList<>();
// ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(task.getProcessInstanceId()).singleResult();
// String processDefinitionId = processInstance.getProcessDefinitionId();
String processDefinitionId = task.getProcessDefinitionId();
// ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
List<Process> processes = bpmnModel.getProcesses();
Process process = processes.get(0);
Collection<FlowElement> flowElements = process.getFlowElements();
flowElements.forEach(flowElement -> {
if(flowElement instanceof Gateway){
gatewayNodelIdList.add(flowElement.getId());
gateways.add((Gateway) flowElement);
}
if(flowElement instanceof UserTask){
usertaskNodelIdList.add(flowElement.getId());
userTasks.add((UserTask) flowElement);
}
});
List<String> frontNodeIdlist = new ArrayList<>();
for (UserTask userTask : userTasks) {
List<SequenceFlow> incomingFlows = userTask.getIncomingFlows();
for (SequenceFlow incomingFlow : incomingFlows) {
String sourceRef = incomingFlow.getSourceRef();
String targetRef = incomingFlow.getTargetRef();
if(nodeId.equals(targtaetRef)){
//当前任务的上一节点是网关
if (gatewayNodelIdList.contains(sourceRef)) {
for (Gateway gateway : gateways) {
List<SequenceFlow> incomingFlowsGateWay = gateway.getIncomingFlows();
for (SequenceFlow sequenceFlow : incomingFlowsGateWay) {
String sourceRefGateWay = sequenceFlow.getSourceRef();
String targetRefGateWay = sequenceFlow.getTargetRef();
if(sourceRef.equals(targetRefGateWay)){
frontNodeIdlist.add(sourceRefGateWay);
}
}
}
}else{
frontNodeIdlist.add(sourceRef);
}
}
}
}
return frontNodeIdlist;
}
Activit的心路历程:获取当前节点的上一节点【可能存在多个】的nodeId的更多相关文章
- Activit的心路历程:获取当前节点的下一节点【可能存在多个】的nodeId
上一任务节点 在我的开发任务中,突然给我提出了一个待办任务需要获取当前任务节点下一任务节点的表单信息,刚开始搞得我有点措手不及,后来仔细是靠后,灵感一下,直接操作流程的bpmn信息就可以获取到节点信息 ...
- 心路历程:当win10遇上win7激活程序...请默哀
经历一次莫名其妙的懵逼系统崩溃后,我对破解软件/激活软件终于有了阴影,想想就想哭,不过怨不了别人,锅不能随便甩,怪自己粗心大意,怪自己太懒呜呜呜... 所以有心将这次心路历程记录下来,谨防自己下次再犯 ...
- 解决 Prometheus 不能获取 Kubernetes 集群上 Windows 节点的 Metrics
背景 接上一篇 快速搭建 Windows Kubernetes , 我们发现原来在 Windows Kubernetes 会有一些与在 Linux 上使用不一样的体验,俗称坑,例如 hostAlias ...
- 怎样获取NodeList某位置上的节点
1. 使用类似 Array 的中括号写法: document.body.childNodes[0] 2. 使用 NodeList.prototype.item(): document.body.chi ...
- javascript 获取dom书的下一个节点。
利用javascript 写一个在页面点击加减按钮实现数字的累加.. 简略的html大概如此.看得懂就好不要在意这些细节啊 <input type="button" valu ...
- Activiti6.0获取下一节点任务的心路历程
在我的开发任务中,我被分配了一个像下一个节点审批人发送短信的任务,这个任务看起来非常的简单,但在开发过程中遇到了许多的坑,在这里进行记录,如果你想要快速知道结果,请看代码版本(3). 首先,就是获取下 ...
- 一个C#开发编写Java框架的心路历程
前言 这一篇絮絮叨叨,逻辑不太清晰的编写Java框架的的一个过程,主要描述我作为一个java初学者,在编写Java框架时的一些心得感悟. 因为我是C#的开发者,所以,在编写Java框架时,或多或少会带 ...
- G彩娱乐网一个程序员到一个销售高手的心路历程
0.引言 我大学本科读的是理工科,后来毕业以后,我逐渐走上了程 序员的道路.每天面对电脑一行一行的敲代码,这被我们程序员们戏称为"搬砖头",因为我们所做的事跟民工搬砖头砌墙本质上是 ...
- 顶级项目孵化的故事系列——Kylin的心路历程【转】
现在已经名满天下的 Apache Kylin,是 Hadoop 大数据生态系统不可或缺的一部分,要知道在 Kylin 项目早期,可是以华人为主的开源团队,一路披荆斩棘经过几年的奋斗,才在 Apache ...
随机推荐
- 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...
- visual studio 2015 Opencv4.0.1配置
最近由于工作需要,要配置opencv,我的电脑vs的version是2015,在网上下载了最新的opencv 4.0.1 自己摸索总是很困难,网上的例子也比较多,但版本比较低,也不确定适不适合vs20 ...
- c++ 动态库的加载
转载:https://blog.csdn.net/ztq_12345/article/details/99677769 使用ide是vs, 使用Windows.h下的3个函数对动态库进行加载第一个:H ...
- 1个LED灯闪烁的Arduino控制
控制任务和要求 让一个LED灯闪烁 接线 程序设计 1 int half_cycle=1000; // define the cycle time of LED blink 2 int LED_pin ...
- 感觉学java学到自己的瓶颈期了,各种框架乱七八糟,感觉好乱。该怎么办!?
通常我们都会有这样的一个疑问! 解决办法 这时候,你需要的是分清条理,重整知识架构 GitHub开源社区有一个这样的项目,我觉得非常好,很适合Java有基础但是想进阶提升的人. 项目简介 本期介绍的开 ...
- devops-jenkins分布式构建
1. devops-jenkins分布式构建 1) 点击系统管理 进入节点管理 2) 点击新建节点 3) 进行节点配置在node节点服务器配置,进行java的安装 [root@nginx-backup ...
- sop服务治理
一,为什么需要服务治理: 我们最先接触的单体架构, 整个系统就只有一个工程, 打包往往是打成了 war 包, 然后部署到单一 tomcat 上面, 这种就是单体架构, 如图: 假如系统按照功能划分了, ...
- 【C++学习笔记】C++经典十二道笔试题!你能做出几道?
1. 运行下面的C++代码,得到的结果是什么? #include "stdafx.h" #include<iostream> using namespace std; ...
- 【贪心算法】HDU 5747 Aaronson
题目大意 vjudge链接 给你一个n,m,求解满足等式x0+2x1+4x2+...+2mxm=n的x0~xm的最小和(xi为非负整数) 数据范围 0≤n,m≤109 思路 n和m都在int范围内,所 ...
- Go语言基础知识01-用Go打个招呼
每一种编程语言,从读一本好书开始 每一种编程语言,也从Helloworld开始 1. 环境准备 1.1 安装golang 在Ubuntu下,直接输入命令可以安装最新版本: $ sudo apt-get ...