今天在看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获取流程图中的所有信息包括变量名的更多相关文章

  1. 使用@符号让C#中的保留字做变量名的方法详解

    原来还有一种办法就是加@符号(看了@符号的作用又多了一个): 复制代码代码如下: class @int    {        static void Main(string[] args)      ...

  2. 查找jar包中.class文件关键字(变量名,字符串)

    有时查看日志,常常会发现由框架底层打印的错误日志.要修改这个错误的时候,如果不是对框架特别熟悉,就需要按照可能产生这个错误日志的流程一步一步找,一时半会不一定能找到.比如本人最近对smartfoxse ...

  3. 在c#中把字符串转为变量名并获取变量值的小例子(转)

    public class Program { public string str = "spp"; public string spp = "Hello World!&q ...

  4. 获取C#中exe程序的实例名

    获取sanjiao.frmsanjiao string strPass = @"D:\WinAutoTest\sanjiao.exe"; Assembly assebly = As ...

  5. 使用c#获取access中所有表的表名与内容

    以前在网上查过,似乎也可以通过读取access系统表的方法来获得,但是实在想不想来是什么,今天又在网上找了找,终于发现更加方便的方法,更重要的是,这种方法也可以通用所有OLEDB数据源. 这里用到了O ...

  6. 获取URL中的文件的扩展名

    问题: 尽可能多地写出获取文件扩展名的方法: //方法一(分割数组) function getExt($url){ $arr = explode('.',$url); $len = count($ar ...

  7. idea中选中了一个变量名,会高亮显示位于别的地方的这个变量名,那么怎么修改其他地方的高亮颜色

  8. Eclipse中java文件选中变量名,相同变量都变色显示 .

    第一步设置高亮显示的颜色: Window-->preferences-->General-->Editors-->Text Editors-->Annotations-- ...

  9. C++中 auto自己主动变量,命名空间,using作用以及作用域

     1.autokeyword的用途 A:自己主动变量.能够自己主动获取类型,输出,类似泛型 B:自己主动变量,能够实现自己主动循环一维数组 C:自己主动循环的时候,相应的必须是常量 2.auto自 ...

随机推荐

  1. 01.CSS动画-->transform

    transform: translate(参数1,参数2):让元素在X轴与Y轴方向发生偏移-->参数1:X:参数2:Y rotate(参数1):让元素进行旋转:单位(deg) scale(参数1 ...

  2. 远景GIS云上线

    没有发布会.没有嘉宾.没有掌声,趁着国庆假期悄悄地将系统部署到服务器上线运行. 远景GIS云(RGIS Cloud)基于自主研发的远景GIS基础平台开发,目前已实现了Shape上传和导出.符号配置.动 ...

  3. Integer 和 int 值比较

    int 是基本数据类型,会进池,可以使用 == 判断两个值相等 Integer是对象,比较对象不能使用 == , 可以使用Integer.intValue()将取出对象值比较

  4. 用squid做http/https正向代理

    0.环境准备 VM1(server):nat-192.168.12.128 bridge-192.168.124.128 VM2(client):bridge-192.168.124.129 在VMw ...

  5. MVC框架以及实例

    MVC框架 MVC(model,view,controller),一种将业务逻辑.数据.界面分离的方法组织代码的框架.在改进界面及用户交互的同时,不需要重写业务逻辑.MVC将传统的输入.处理和输出分离 ...

  6. maven-windows使用

    目录 前言 安装 配置镜像 idea配置Maven 私服 安装到centos 访问 客户端配置私服 idea修改指定pom 项目发布到私服 jar包会自动从私服下载 从客户端导入第三方jar包 前言 ...

  7. 避免jar依赖冲突的一种办法

    java中的依赖冲突问题一直比较头疼,特别是做公用包给其他系统用的时候,现在都不敢引入太多的依赖,基本上每次都要帮别人解决依赖冲突的问题,非常麻烦. 特别是碰到一些老系统还不是用maven管理的,人家 ...

  8. Azure 中部署WordPress的方法

    一.Azure 中创建WordPress虚拟机(1).登陆Azure:打开Azure 官网,点击右侧上方的登陆Azure门户,输入Azure帐号与密码,点击 登陆 . (2).创建Wordpress虚 ...

  9. ThreadState属性

    这个属性代表了线程运行时状态,在不同的情况下有不同的值,我们有时候可以通过对该值的判断来设计程序流程. ThreadState 属性的取值如下: Aborted:线程已停止: AbortRequest ...

  10. Java学习---Java面试基础考核·

    Java中sleep和wait的区别 ① 这两个方法来自不同的类分别是,sleep来自Thread类,和wait来自Object类. sleep是Thread的静态类方法,谁调用的谁去睡觉,即使在a线 ...