有了前面几章,我们肯定有一定的困惑,activiti如何与实际业务整合,比如一条采购单,如何跟一个流程实例互相关联起来?
这里就需要使用到activiti启动流程实例时设置一个流程实例的businessKey(一般存储我们一条采购单的id)
1,启动流程实例设置其businessKey
/** * 启动一个流程实例,设置其业务id */ @Test public void startProInsWithKey() { RuntimeService runtimeService = engine.getRuntimeService(); String processDefinitionKey = "purchasingflow"; //设置一个businessKey,在我实际业务中可能是一个采购单,或者订单之类的id String businessKey ="111"; // 根据流程定义的key启动一个流程实例 ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey,businessKey); System.out.println("流程实例id:" + processInstance.getId()); System.out.println("流程定义id:" + processInstance.getProcessDefinitionId()); }
一般情况下,我们是在用户保存一条采购单的时候,启动这个实例,并且动态获取采购单的id(也就是用作流程实例的businessKey),并且我们还会在采购单表中保存这个流程实例的id,双向一对一绑定,方便业务查询
2,根据采购单的id(也就是用作流程实例的businessKey),动态的查询出对应的流程实例
/** * 通过businessKey查询流程实例 */ @Test public void queryProInsWithKey(){ RuntimeService runtimeService = engine.getRuntimeService(); String businessKey ="111"; ProcessInstanceQuery instanceQuery = runtimeService.createProcessInstanceQuery(); //根据其流程定义key和业务id businessKey查询出对应的流程实例,一般只有一条 instanceQuery.processInstanceBusinessKey(businessKey); //查询出唯一的一条流程实例 ProcessInstance processInstance = instanceQuery.singleResult(); System.out.println("流程实例id:"+processInstance.getId()); System.out.println("流程定义id:"+processInstance.getProcessDefinitionId()); }
到这里,我们就清楚了一个流程实例和实际业务数据的绑定
大家到这里也启动了很多的流程实例了,发现我们的任务办理人都是写死为zhangsan,lisi之类的,那么我们可以动态的指定吗,这就需要使用到我们的uel表达式了
首先uel表达式到底是什么呢?
UEL是java EE6规范的一部分,