本来想着闲来无事,前面在项目中刚刚用到了工作流 Activiti 框架,写写博客的,但是,事情总是纷纷杂杂,一直拖延到现在,这一节原本想要写一下关于 Activiti 的 API
,但是,想着太多这样的博客了,而且显得太生硬,难以理解,所以,这些 API
就在实际的 demo 中来讲解。
一、建立流程图
在开始做工作流之前,我们首先应该把具体的业务在工作流的部署流程图体现出来,并且都测试通过,这样就相当于成功了一半,后面的具体业务的开发就相对轻松一些了。
首先,我们先看一看在 idea 中有哪些控件,常用的控件进行了标注。
下面我们讲一下建立一个流程图的具体过程。
首先,我们需要拉入一个开始节点到 bpmn
文件中,这是图像化的界面,只需要拉入即可。
然后,我们从控件中拉入一个 UserTask
用户任务节点到 bpmn
文件中。
这样子就有了两个审批节点了,如果还需要其他的一些业务需求,我们还可以加入一些网关,这里就暂时不加了。
最后,我们只需要一个结束节点 EndEvent
就完成了这个工作流的部署图的绘制。
我们最后看一下完整的例子。
看似已经完成了整个流程图的绘制,但美中不足的是我们目前并没有设置导师审批和辅导员审批到底由谁来审批,所以,我们还是需要来瞅一瞅怎么设置审批人员。
首先,我们需要选中一个审批节点,例如,选中导师审批这个节点。
其次,我们就显而易见的可以在 idea 编辑器的左侧看到一个名为 BPMN editor
的属性框,里面包括一个用户任务节点的可以设置的所有属性。
注意:候选用户、候选组、任务监听器,这三个属性这里暂时不讲,后面再补充。
由于,这一步我们需要设置审批人,所以,我们需要在 Assignee
这个属性中设置我们的审批人。
如上图,这里设置导师审批这个节点的审批人为 sihai
。设置审批人除了直接设置之外,还有两种方式设置,后面再补充。
另外一个审批节点也通过这种方式设置就可以完成审批人的设置了。
very good,这样就基本完成了一个流程图的创建。接下来,我们将通过实例来具体讲解Activiti 的 API 的讲解。
二、实例讲解 API
在上面这个流程图的创建中,我们还没有生成 png 图片,所以,如果不知道如何生成的,可以参考之前的这篇文章:Activiti工作流从入门到入土:整合spring。
既然是讲解 API ,那么还是先看一下主要有哪些 API 吧,这样才有一个整体把握。
这些 API 具体怎么用,接下来一一道来。
2.1 流程定义
既然是流程定义,那肯定少不了如何部署流程定义了。
2.1.1 部署流程定义方法1
@Autowired
private ProcessEngine processEngine;
@Autowired
private TaskService taskService;
@Autowired
private RuntimeService runtimeService;
@Autowired
private HistoryService historyService;
/**
* 部署流程定义(从classpath)
*/
@Test
public void deploymentProcessDefinition_classpath(){
Deployment deployment = processEngine.getRepositoryService()//与流程定义和部署对象相关的Service
.createDeployment()//创建一个部署对象
.name("流程定义")//添加部署的名称
.addClasspathResource("bpmn/hello.bpmn")//从classpath的资源中加载,一次只能加载一个文件
.addClasspathResource("bpmn/hello.png")//从classpath的资源中加载,一次只能加载一个文件
.deploy();//完成部署
System.out.println("部署ID:"+deployment.getId());
System.out.println("部署名称:"+deployment.getName());
}
注意:这里用的是整合 spring 之后的 junit 测试环境,如何整合 spring 请看这篇文章:Activiti工作流从入门到入土:整合spring。
输出结果:
这样,我们就部署了这个流程。那么具体是怎么操作的呢,我们再来看看整个过程。
-
获取流程引擎对象:这个跟 spring 整合了。
-
通过流程引擎获取了一个 RepositoryService 对象(仓库对象)
-
由仓库的服务对象产生一个部署对象配置对象,用来封装部署操作的相关配置。
-
这是一个链式编程,在部署配置对象中设置显示名,上传流程定义规则文件
-
向数据库表中存放流程定义的规则信息。
其实,这一步操作,用到了 Activiti 数据库中的三张表,分别是:act_re_deployment(部署对象表),act_re_procdef(流程定义表),act_ge_bytearray(资源文件表)。
我们看看这三张表的变化:
1)act_re_deployment
可以看到,部署ID和部署名称就存在这张表中。
2)act_re_procdef
这张表中,存放了部署的Deployment_ID部署流程的id、bpmn资源文件名称、png图片名称等信息。
3)act_ge_bytearray
存储流程定义相关的部署信息。即流程定义文档的存放地。每部署一次就会增加两条记录,一条是关于 bpmn 规则文件的,一条是图片的(如果部署时只指定了 bpmn