盘古BPM体验地址    盘古BPM交流群盘古BPM交流群号:963222735

flowable中initiator作用以及使用

分享牛 10123℃

摘要:在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作用以及使用