activiti获取流程图中的所有信息包括变量名
今天在看activiti的变量的时候,都是由用户来设置变量,我们在后台写代码通过变量设置或取一些参数的时候,非常的不方便。
比如:设置变量的时候通过页面设置
设置之后,我们如何动态的给这个变量设置参数,我参考了好多资料,大部分都是直接进行的设置,比如:
Map<String, Object> variables = new HashMap<String, Object>(); variables.put("userIDs", "大大,中中,小小");
这样子的话就相当于把变量名设置死了,非常的不方便。那我们能不能动态的获取这个变量名,然后进行设参和取参呢?下面我们举个例子来详解:
在activti中有一个对象Process,封装了全部的节点、连线、以及关口等信息。我们可以通过这个对象获取流元素信息process.getFlowElements();
比如我们上面在一个任务节点中设置了一个用户组的变量,如何来获取这个变量呢,下面上代码
/**
* 获取流程图中的所有信息包括变量名
* @param processDefinitionId
*/
@Test
public void a() {
String processDefinitionId = "这里是流程定义ID";
Map<String,Object> map = new HashMap<String,Object>();
//获取bpmnModel对象
BpmnModel model1 = repositoryService.getBpmnModel(processDefinitionId);
// BpmnModel model1 = new BpmnJsonConverter().convertToBpmnModel(modelNode);
//由于我们这里仅仅定义了一个Process 所以获取集合中的第一个就可以
//Process对象封装了全部的节点、连线、以及关口等信息。拿到这个对象就能够为所欲为了。
Process process = model1.getProcesses().get(0);
//获取全部的FlowElement(流元素)信息
Collection<FlowElement> flowElements = process.getFlowElements();
for (FlowElement flowElement : flowElements) {
//假设是开始节点
if(flowElement instanceof StartEvent){
StartEvent startEvent = (StartEvent)flowElement;
map.put("startEvent", startEvent);
}
//假设是任务节点
if(flowElement instanceof UserTask) {
UserTask userTask = (UserTask)flowElement;
List<String> candidateUsers = userTask.getCandidateUsers();
for (String string : candidateUsers) {
System.out.println("-------"+string);
}
map.put("userTask", userTask);
}
//假设是结束节点
if(flowElement instanceof EndEvent) {
EndEvent endEvent = (EndEvent)flowElement;
map.put("endEvent", endEvent);
}
//假设是连接线
if(flowElement instanceof SequenceFlow) {
SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
map.put("sequenceFlow", sequenceFlow);
}
}
}
定义了一个map,把所有的节点对象都存入进去,每个节点对象中都封装了各自节点的全部信息,这些信息都对应着我们部署的xml文件,我们在进行调用的时候想用哪个对象就用哪个对象,这样子是不是很方便,来看一下运行代码的结果,是否会输出获取到的任务节点的变量名:
-------#{UserIds}
-------#{UserIds}
获取到了,没问题,因为我在两个任务节点上都设置了相同的变量名所有出现了2次。其余的变量设置也是一样的,这里就只演示一下任务的变量名,其他的信息获取也是一样的,都在对象中包括咯。
这样子的话,我们以后在设置变量信息或者取的时候,就直接就可以获取到变量名来操作,是不是很灵活了。
activiti获取流程图中的所有信息包括变量名的更多相关文章
- 使用@符号让C#中的保留字做变量名的方法详解
原来还有一种办法就是加@符号(看了@符号的作用又多了一个): 复制代码代码如下: class @int { static void Main(string[] args) ...
- 查找jar包中.class文件关键字(变量名,字符串)
有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxse ...
- 在c#中把字符串转为变量名并获取变量值的小例子(转)
public class Program { public string str = "spp"; public string spp = "Hello World!&q ...
- 获取C#中exe程序的实例名
获取sanjiao.frmsanjiao string strPass = @"D:\WinAutoTest\sanjiao.exe"; Assembly assebly = As ...
- 使用c#获取access中所有表的表名与内容
以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源. 这里用到了O ...
- 获取URL中的文件的扩展名
问题: 尽可能多地写出获取文件扩展名的方法: //方法一(分割数组) function getExt($url){ $arr = explode('.',$url); $len = count($ar ...
- idea中选中了一个变量名,会高亮显示位于别的地方的这个变量名,那么怎么修改其他地方的高亮颜色
- Eclipse中java文件选中变量名,相同变量都变色显示 .
第一步设置高亮显示的颜色: Window-->preferences-->General-->Editors-->Text Editors-->Annotations-- ...
- C++中 auto自己主动变量,命名空间,using作用以及作用域
1.autokeyword的用途 A:自己主动变量.能够自己主动获取类型,输出,类似泛型 B:自己主动变量,能够实现自己主动循环一维数组 C:自己主动循环的时候,相应的必须是常量 2.auto自 ...
随机推荐
- SPOJ:NSUBSTR - Substrings
题面 字符串$ S \(最多包含\) 25 \(万个小写拉丁字母.我们将\) F(x) \(定义为长度为\) x \(的某些字符串出现在\) s \(中的最大次数.例如,对于字符串\) "a ...
- PHP new StdClass() 创建空对象
PHP可以用 $object = new StdClass(); 创建一个没有成员方法和属性的空对象.很多时候,程序员们会将一些参数配置项之类的信息放在数组中使用,但是数组操作起来并不是很方便,很多时 ...
- Java设计模式—状态模式
状态模式又是一个比较难的设计模式 定义如下: 当一个对象内在状态改变时允许其改变行为,这个对象看起来像改变了其类. 个人理解:通俗的讲,状态模式就是状态的改变引起了行为的改变,但是,我们只能看到行为的 ...
- AE+C#实现:在SceneControl里打开和保存
来自:http://www.cnblogs.com/zhuxy/archive/2012/03/30/2424672.html 之前编写这段代码,发现一直没有C#编写的,现在贴出来,希望对大家有用 此 ...
- Monte Calro Tree Search (MCTS)
https://blog.csdn.net/natsu1211/article/details/50986810, 感谢分享! Intro最近阿法狗和李师师的人机大战着实火了一把,还顺带捧红了柯杰,古 ...
- php 在字符串指定位置插入新字符
因为项目用到DataTable表格加载后台数据,要连表查询虚拟机选中的策略状态,所以想到先把策略表内容取出来,组成一个'<select><option value="1&q ...
- Android实时获得经纬度,发送给c++服务端
Android 客户端: package com.example.admin.gpsget; import android.Manifest; import android.content.Conte ...
- 封装网络请求并在wxml调用
https://blog.csdn.net/qq_35713752/article/details/78109084 // url:网络请求的url method:网络请求方式 data:请求参数 m ...
- Java容器之HashMap源码分析
在java的容器框架中,hashMap是最常用的容器之一,下面我们就来深入了解下它的数据结构和实现原理 先看下HashMap的继承结构图 下面针对各个实现类的特点进行下说明:1)HashMap: 它是 ...
- Azure 经典模式中虚拟机证书指纹的生成和作用
用户在使用经典虚拟机时,经常会有如下疑问:门户主板页面中的 SSH/RDP 证书指纹这项信息是怎么来的?用途是什么?为什么有的时候为空?有没有对虚拟机使用有什么影响?以下我们进行一些基本的介绍: 证书 ...