摘要:在Flowable中,我们可以在开始节点中定义activiti:initiator属性或者定义flowable:initiator。这两个属性本质是一样的,只是命名空间的前缀不一样而已。因此我们就别关注这个命名空间的含义了,重点看一下initiator属性的作用以及使用。
1、使用背景
在实际的项目开发中,加入我们期望流程实例的启动人作为第一个任务节点的处理人,哪这个时候我们其实就可以直接通过initiator属性进行设置。还是以下面的流程图为例进行说明。流程图如下:
非常简单的一个流程,第一个任务节点是学生请假,第二个节点是班主任审批。
对于这个流程而言,当然是学生填写表单,班主任才能开始审批,表单涉及到的字段信息如下:
假如流程的启动人是“分享牛”,那么第一个任务节点也就是学生请假任务节点的处理人也应该是“分享牛”。
那这个时候我们就可以直接在开始节点中配置一个initiator属性。具体怎么用呢?我们继续往下看。
2、定义流程文档
上述的流程图中,关于initiator属性的配置如下:
<process id="initiator" name="initiator" isExecutable="true">
<startEvent id="startevent1" name="Start" activiti:initiator="shareniuapplyUserId"></startEvent>
<userTask id="usertask1" name="审批" activiti:assignee="${shareniuapplyUserId}"></userTask>
<sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>
<endEvent id="endevent1" name="End"></endEvent>
<sequenceFlow id="flow2" sourceRef="usertask1" targetRef="endevent1"></sequenceFlow>
</process>
分步理解:
1、activiti:initiator设置一个变量名称(代码第2行),可以是任意的字符串,这一点是让很多初学者迷糊的地方不知道写什么,现在请记住一个变量。
2、变量shareniuapplyUserId应该保存申请用户的ID
3、在需要设置申请用户才能办理的任务上设置activiti:assginee=${shareniuapplyUserId}属性,参见第5、11行代码
3、部署流程文档
接下来,我们部署上面的流程文档,示例代码如下:
public void deployForm() {
Deployment deploy = repositoryService.createDeployment()
.addClasspathResource("com/shareniu/shareniu_network_flowable/test/initiator.bpmn")
.category("initiator").name("initiator分享牛流程").key("initiator").deploy();
}
4、启动实例
流程实例的启动代码如下:
@Test
public void startProcessInstanceByKey() {
identityService.setAuthenticatedUserId("分享牛");
runtimeService.startProcessInstanceByKey("initiator");
}
-
第1行代码的作用就是设置当前的用户ID,非常关键,而且这行代码需要和activiti:initiator配合使用,不可分割……
-
第2行代码启动一个流程,在启动流程的时候会判断有没有activiti:initiator属性,如果有把属性activiti:initiator的值作为一个变量添加到流程实例中,本文中也就是shareniuapplyUserId,不要以为shareniuapplyUserId是一个特殊的变量,它就是一个普通的变量而已。
在流程XML中的第5、11行代码出使用${shareniuapplyUserId}作为activiti:initiator的值,引擎会在创建任务的使用用变量shareniuapplyUserId替换。
上述代码执行完毕之后,数据库表新增的数据如下:
mysql> select id_,ASSIGNEE_ from ACT_RU_TASK;
+------+-----------+
| id_ | ASSIGNEE_ |
+------+-----------+
| 5007 | 分享牛 |
+------+-----------+
1 rows in set (0.00 sec)
ACT_RU_TASK任务表中的任务处理人确实已经变成分享牛了。
分享牛老师再出新作,倾力打造Flowable精品课程系列,以最短的时间高效完成学习目标,入门进阶与实战案例并重,是0基础的新手从入门到精通的必备课程。
《Flowable实战课程》------从零入门进阶的最佳课程------【点此查看详情】
转载请注明:分享牛 » flowable中initiator作用以及使用