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自 ...
随机推荐
- 02--CSS的继承性和层叠性
一 继承性 css有两大特性:继承性和层叠性 面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法.那么我们现在主要研究css,css就是在设置属性的.不会牵扯到方法的 ...
- Java设计模式—命令模式
命令模式是一个高内聚的模式. 定义如下:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 通用类图如下: 角色说明: ● Re ...
- 线性表的顺序存储结构之顺序表类的实现_Java
在上一篇博文——线性表接口的实现_Java中,我们实现了线性表的接口,今天让我们来实现线性表的顺序存储结构——顺序表类. 首先让我们来看下顺序表的定义: 线性表的顺序存储是用一组连续的内存单元依次存放 ...
- 5 使用ip代理池爬取糗事百科
从09年读本科开始学计算机以来,一直在迷茫中度过,很想学些东西,做些事情,却往往陷进一些技术细节而蹉跎时光.直到最近几个月,才明白程序员的意义并不是要搞清楚所有代码细节,而是要有更宏高的方向,要有更专 ...
- java 中sendredirect()和forward()方法的区别
一.文章1 HttpServletResponse.sendRedirect与RequestDispatcher.forward方法都可以实现获取相应URL资源. sendRedirect实现请求重 ...
- APACHE如何一个站点绑定多个域名?
大家肯定遇到过这样的情况,需要APACHE2里一个站点绑定多个域名,那么如何操作呢?用ServerAlias 以前很笨,要使多个域名指向同一站点总是这样写: ServerAdmin admin@dom ...
- python----------闭包 、装饰器
闭包: 就是内层函数对外层函数(非全局变量的)非全局变量的引用 def func(): name = '老人家' def func1(): print(name)#局部变量对全局变量的引用 因为并没有 ...
- Intel酷睿前世今生(二)
上一文,讲述到了酷睿构架的诞生.可以显而易见的知道,酷睿构架其实源于笔记本处理器构架.因为在当年的技术趋势中,因为提升主频而带来的负面影响如发热与高功率已经让普通消费者所不满.然而提升主频并没有提升多 ...
- Layer的shadow属性
Layer的shadow属性 Layer中的阴影都是可以做动画处理的. - (void)viewDidLoad { [super viewDidLoad]; CALayer *layer = [CAL ...
- The good life is one inspired by love and guided by knowledge
The good life is one inspired by love and guided by knowledge 伯特兰·罗素Bertrand Russell18721970 I can a ...