Activiti进阶(三)-----Judge(流程判断)

Activiti

-----Judge(流程判断)

 

上篇我们谈到了,流程变量的使用方式,这一篇我们来介绍,利用流程变量来进行判断,实现选择以及两种网关,排他性网关以及平行网管;

 

在这之前先介绍一种流程框架的部署方式:

在实际的工作当中:我们的做法是将画好的bpmn文件,打为压缩包,然后放在工作目录下锁操作项目的resources文件夹下,我们去加载这个文件夹,框架会自动取解压这些文件,你在部署之后,会在资源表当中看到解压的文件即bpmn以及png的图爿;

实际的操作方法就是:

先得到类对像,在得到类加载器然后的到输入流,在部署时候

addZipInputStream(zipInputStream)

用这条语句来加载打好的压缩包;
下面就是具体的部署方式:

public void deployZIP(){

   //加载zip文件

   InputStream inputStream = this.getClass()

.getClassLoader()

.getResourceAsStream("world.zip");

   ZipInputStream zipInputStream = new ZipInputStream(inputStream);

   //得到部署的service

   RepositoryService repositoryService = processEngine.getRepositoryService();

   Deployment deploy = repositoryService.createDeployment()

              .addZipInputStream(zipInputStream)

              .name("worldProcess2")

               .deploy();

   //得到部署的信息

   System.out.println("部署ID"+deploy.getId());

 

}

 

此次用到的就是这种加载压缩包的方式:

  1. 画图

这是一张总的流程图,在审批1与审批2之间的连线上面设置表达式来判断,

下图是设置的属性值:

在审批1与结束节点之间的连线设置信如下:

意思就是当你请假的天数超过三天则要经过审批二得操作,如果小于等于三天那么只是经过审批1得操作之后即可结束;

那么此时这张图锁表示得信息,经过xml显示就会使下面得状态:

在两个很明显:

<sequenceFlow id="_7" sourceRef="_2" targetRef="_3"/>

<sequenceFlow id="_8" sourceRef="_3" targetRef="_4"/>

 

在第一和第二个线上是没有表达式得,所以就是这样只是表示线而已;

二加了表达式得两个线则是由了各自的表达式信息;

这就是不同之处;

 

那么接下来我们将文件打包,然后放在目录之下,当然你在项目之中也会看到你压缩好的文件;

那么这些准备工作做完了之后我们就进入今天得判断流程得开发。

 

  1. 部署

 

public void  deploy(){

   //加载zip文件

   InputStream inputStream = this.getClass()

.getClassLoader()

.getResourceAsStream("world.zip");

   ZipInputStream zipInputStream = new ZipInputStream(inputStream);

   //得到部署的service

   RepositoryService repositoryService = processEngine.getRepositoryService();

   Deployment deploy = repositoryService.createDeployment()

              .addZipInputStream(zipInputStream)

              .name("worldProcess2")

               .deploy();

   //得到部署的信息

   System.out.println("部署ID"+deploy.getId());

 

}

就是之前在开头介绍得代码,这里就不再赘述;

  1. 启动
 
和之前一样根据key来启动
public  void start(){



    RuntimeService runtimeService = pec.getRuntimeService();

    ProcessInstance enjoyProcess = runtimeService.startProcessInstanceByKey("EnjoyProcess");

    System.out.println("流程实例id:=="+enjoyProcess.getId());

    System.out.println("流程定义id:==="+enjoyProcess.getProcessDefinitionId());

}

当然你可以启动得时候就加入判断得参数;

我们在完成得时候添加;

3,完成

我们在这里设置得天数是7,显然是大于3得所以,在经过判断了之后会走审批2这条路取结束整个任务

public void complete(){

    TaskService taskService = pec.getTaskService();

    String taskid="72504";

    taskService.setVariable(taskid,"day",7);

    taskService.complete(taskid);

}

相反你若是设置得值是小于等于三的则会在审批1之后就结束整个任务;

大家可以自己取测试,‘

二者操做上得区别就是,前者在你执行完第一个任务之后,任务表当中会出现审批2这个任务,而后者在审批1执行完毕时候,任务表当中是不在会有任务得而至一张空表;

大家可以取体验;

 

 

接下来我们来介绍两个网关

  1. 排他性网管

什么意思呢就是两条路线你只能够走一个

下面是画的图以及信息:

我们用到得是排他性网管关按钮

表示得就是在不同得情况下直接转向不同得流程,从而进入不同测程序,再执行之前就进行了判断,而之前得是再自己看过了之后周期提交去判断时结束还是转向不同得处理方式;

  1. 平行网关

我们用的是平行网关按钮

下面是具体得图所示:

 

 

表示得就是在审批1和审批2之间只要是二者之中有一个没有完成那么这个流程就不能结束,而在具体的操作当中,当即将gohome执行完毕之后,两个审批任务是同时出现在表当中的,这就是在任务表当中会出现同一流程的多个任务的情况;

 

至于其它的部署,启动完成操作和之前的文章当中谈到的是一样的,大家可以自行去测试,在后面的文章当中,我们会逐步将这个流程框架整合到Spring当中去;

敬请期待!!!!!!!!

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/qq_42112846

猜你喜欢

转载自blog.csdn.net/qq_42112846/article/details/81149989
今日推荐