activiti之流程变量值Business_key

来源:互联网 发布:java面向对象练习题 编辑:程序博客网 时间:2024/06/05 08:32

       今天以请假为例,我们在做工作流的时候一定是需要将我们的业务和工作流来关联起来的,而Activiti给我们提供了一个便利就是Business_key,而这个字段就是专门用来存储我们的业务关键字。

       例如我们有一个请假的业务,而我的请假信息都已经编写到数据库的表(tb_leaveBill)中了,但是我怎么样把我的请假信息关联到activiti的数据库表中,对了,就是用给定的Activiti的Business_key,而这里有一个小技巧,例如我的javaBean叫做LeaveBill,而我的请假信息的ID为1,那么我就可以让他写成leaveBill.1,技巧就是业务Bean.业务ID,这样我们就能Business_key的设置了

        启动流程实例(Business_key)

public void saveStartProcess(WorkflowBean workflowBean) {//获取请假单ID,使用请假单ID,的对象的LeaveBillLong id = workflowBean.getId();LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);//更新请假单的状态leaveBill.setState(1);String key = leaveBill.getClass().getSimpleName();//从session中获取流程变量Map<String,Object> variables = new HashMap<String,Object>();variables.put("inputUser", SessionContext.get().getName());  //表设计唯一//使用流程变量关联工作流和业务String objId = key + "." + id;  //格式LeaveBill.id//启动流程实例,同时设置流程变量,//使用正在执行的对象表中的一个字段(Businesskey),让启动实例关联业务runtimeService.startProcessInstanceByKey(key,objId,variables);}
        效果图如下:

 

       查询(Business_key)

      查询的时候,我们需要根据任务ID,查询task对象,然后根据task对象,获取实例ID,之后使用流程实例查询Business_key来获取对应的业务的主键,这样就能查询到

//使用任务ID,查询请假单信息@Overridepublic LeaveBill findLeaveByTaskId(String taskId) {//1,使用任务ID,查询对象taskTask task = taskService.createTaskQuery().taskId(taskId).singleResult();//2.使用任务ID,获取实例IDString processInstanceId = task.getProcessInstanceId();//3.使用流程实例,查询ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult();//4.使用流程实例对象获取BusinessKeyString business_key = pi.getBusinessKey();//5.获取Business_key对应的主键IDString id = "";if(StringUtils.isNotBlank(business_key)){//截取字符串id = business_key.split("\\.")[1].toString();}LeaveBill leaveBill = leaveBillDao.findLeaveBillById(Long.parseLong(id));return leaveBill;}
         相对于JBPM,activiti对工作流进行了一些冗余,但是适当的冗余却对整个工作流的实现有了相当大的帮组,二我们在以后的业务设计中也可以适当的增加一下业务的容易,寻找一个开发的最适合的点。

0 0