activiti:initiator的作用及其使用

原文链接:http://www.kafeitu.me/activiti/2012/09/14/activiti-initiator.html?utm_source=tuicool&utm_medium=referral

1.场景模拟

kft-activiti-demo中的请假流程为例,操作流程:

  1. 用户A申请请假
  2. 领导B驳回
  3. 任务流转到“调整请假信息”节点

问题来了:如何把“调整请假信息”任务自动分配给申请请假的用户A呢?

2.救世主activiti:initiator

Activiti为此专门在startEvent上扩展了一个属性activiti:initiator用了解决这个问题。

下面的代码片段包含了这个属性:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
< process id = "leave" name = "请假流程" >
     < startevent id = "startevent1" name = "Start" activiti:initiator = "applyUserId" ></ startevent >
     < usertask id = "deptLeaderAudit" name = "部门领导审批" activiti:candidategroups = "deptLeader" ></ usertask >
     < exclusivegateway id = "exclusivegateway5" name = "Exclusive Gateway" ></ exclusivegateway >
     < usertask id = "modifyApply" name = "调整申请" activiti:assignee = "${applyUserId}" >
       < extensionelements >
         < activiti:tasklistener event = "complete" delegateexpression = "${afterModifyApplyContentProcessor}" ></ activiti:tasklistener >
       </ extensionelements >
     </ usertask >
     < usertask id = "hrAudit" name = "人事审批" activiti:candidategroups = "hr" ></ usertask >
     < exclusivegateway id = "exclusivegateway6" name = "Exclusive Gateway" ></ exclusivegateway >
     < usertask id = "reportBack" name = "销假" activiti:assignee = "${applyUserId}" >
       < extensionelements >
         < activiti:tasklistener event = "complete" delegateexpression = "${reportBackEndProcessor}" ></ activiti:tasklistener >
       </ extensionelements >
     </ usertask >
</ process >

分步理解:

  1. activiti:initiator设置一个变量名称(代码第2行),可以是任意的字符串,这一点是让很多初学者迷糊的地方不知道写什么,现在请记住一个变量。
  2. 变量applyUserId应该保存申请用户的ID
  3. 在需要设置申请用户才能办理的任务上设置activiti:assginee=${applyUserId}属性,参见第5、11行代码

为什么这么做呢?

在用户手册上其实专门讲解了这个属性的做作用以及使用方法,代码如下:

?
1
2
identityService.setAuthenticatedUserId( "kafeitu" );
runtimeService.startProcessInstanceByKey( "leave" );
  • 1行代码的作用就是设置当前的用户ID,非常关键,而且这行代码需要和activiti:initiator配合使用,不可分割……
  • 2行代码启动一个流程,在启动流程的时候会判断有没有activiti:initiator属性,如果有把属性activiti:initiator的值作为一个变量添加到流程实例中,本文中也就是applyUserId不要以为applyUserId是一个特殊的变量,它就是一个普通的变量而已

在流程XML中的第5、11行代码出使用${applyUserId}作为activiti:initiator的值,引擎会在创建任务的使用用变量applyUserId替换。

3.单元测试理解

请参考kft-activiti-demo中的单元测试:

还可以在线运行请假流程:http://demo.kafeitu.me/kft-activiti-demo体验一下这个过程。


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值