localVariable 与 Variable 区别:

Variable:

                   1、普通变量(或叫global变量),关联流程实例,流程未完结前都可查询得到

                   2、从数据库看,表act_ru_variable或表act_hi_varinst中的TASK_ID_为空

                   3、同一流程实例,同名Variable只存在一个,再次赋值时覆盖前一个值,版本号加一

localVariable:1、任务变量,关联流程任务,任务完成前可查看,任务完结后即使流程未完结也无法查到

                            2、从数据库看,表act_ru_variable或表act_hi_varinst中的TASK_ID_关联任务ID

                            3、localVariable在同一流程实例内可重名,但需关联不同task,否则类似再次赋值。

                            2、绑定了变量的任务结束后,要再次访问localVariable需要查询历史变量记录。

相同点:任何时候都可在act_hi_varinst表中查看


 实现Serializable接口的类可作为变量值存储,因为实现序列化,所以需要填写序列化版本号保证存储前后类定义不变。
     public class Loan implements Serializable { 
 
	private static final long serialVersionUID = -8809463095791864892L; 
 
	private int id; 
	private double money; 
	private Date time; 
	private String reason; 
 
	public Loan() { 
		super(); 
	} 
 
	public Loan(int id, double money, Date time, String reason) { 
		super(); 
		this.id = id; 
		this.money = money; 
		this.time = time; 
		this.reason = reason; 
	} 
 
	public int getId() { 
		return id; 
	} 
 
	public void setId(int id) { 
		this.id = id; 
	} 
 
	public double getMoney() { 
		return money; 
	} 
 
	public void setMoney(double money) { 
		this.money = money; 
	} 
 
	public Date getTime() { 
		return time; 
	} 
 
	public void setTime(Date time) { 
		this.time = time; 
	} 
 
	public String getReason() { 
		return reason; 
	} 
 
	public void setReason(String reason) { 
		this.reason = reason; 
	} 
 
}



一、启动流程时设置变量


           Map<String,Object> map = new LinkedHashMap<String,Object>(); 
           map.put("变量名", "变量值"); 
	   ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(ProcessKey,map);


二、完成任务时设置变量


                    

           Map<String,Object> map = new LinkedHashMap<String,Object>(); 
	   map.put("变量名", "变量值"); 
	   taskService.complete(taskId, map);



三、设置任务变量

         PS、也可调用taskService.setVariablesLocal(taskId,map);将变量与任务绑定,         


      @Test 
      public void setTaskVarible(){ 
        TaskService taskService = processEngine.getTaskService(); 
        String taskId = "2504";//任务ID 
        taskService.setVariable(taskId, "债权人", "A");//1、通过任务ID,指定添加变量名,变量值 
  
        Map<String,Object> map = new LinkedHashMap<String,Object>(); 
        map.put("债务人", "B");//集合中key为变量名,value为变量值 
        taskService.setVariables(taskId, map);//2、通过任务ID,通过map集合添加 
  
        Loan loan = new Loan(1,1000,new Date(),"流动资金不足");//添加实现Serializable接口的对象作为变量值 
        taskService.setVariable(taskId, "借款详细", loan);//3、添加对象 
   }



四、设置流程变量

             PS、也可调用runtimeService.setVariableLocal();,默认关联流程当前任务

@Test 
     public void setInstanceVarible(){ 
           String executionId = "2501"; 
           RuntimeService runtimeService = processEngine.getRuntimeService(); 
           runtimeService.setVariable(executionId, "债权人", "A");//1、通过流程ID,指定添加变量名,变量值
           Map<String,Object> map = new LinkedHashMap<String,Object>(); 
           map.put("债务人", "B");//集合中key为变量名,value为变量值 
           runtimeService.setVariables(executionId, map);//2、通过流程ID,通过map集合添加 
  
           Loan loan = new Loan(1,1000,new Date(),"流动资金不足");//添加实现Serializable接口的对象作为变量值 
           runtimeService.setVariable(executionId, "借款详细", loan);//3、添加对象 
}



五、获取流程变量

      

@Test 
	public void getRuntimeVarible(){ 
		RuntimeService runtimeService = processEngine.getRuntimeService(); 
		String executionId = "2501"; 
		 
		String varValue = (String)runtimeService.getVariable(executionId, "债权人");//1、通过变量名取值 
		 
		Map<String,Object> map = runtimeService.getVariables(executionId);//2、通过执行对象ID获取所有 变量值 
		 
		List<String> list = new ArrayList<String>(); 
		list.add("债务人");//集合保存变量名 
		runtimeService.getVariables(executionId, list);//3、通过执行对象ID获取特定名字的变量值			 
	}


六、查询历史变量

     

@Test 
	public void getHistoryProcessVariable(){ 
		HistoryService historyService = processEngine.getHistoryService(); 
		List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().variableName("债权人").list(); 
		 
	}


发布评论

分享到:

IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

学会4种备份MySQL数据库(基本备份方面没问题了)详解
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。