User assignment 审批人
可以分配给一个用户 ,通过 humanPerformer 节点 的 sourceAssignmentExpression 节点 指定人员 . 现在 仅支持 formalExpressions 属性.
<process ... > ... <userTask id='theTask' name='important task' > <humanPerformer> <resourceAssignmentExpression> <formalExpression>kermit</formalExpression> </resourceAssignmentExpression> </humanPerformer> </userTask>
解释为受让人, 或者审批人, 只有一个审批人的任务. 由其在 代办任务中查看, 其他人是看不到的.
直接分配assignee 的用户任务,可以通过 taskService 检索到其 需要代办的任务列表:
List<Task> tasks = taskService.createTaskQuery().taskAssignee("kermit").list();
任务也可以开放给 候选人 列表.那么, potentialOwner 节点就用上了, 用法跟 humanPerformer 节点类似. 要注意的是:候选人必须制定候选人是用户,还是组, 否则无法解析定义的到底是什么东西
<process ... > ... <userTask id='theTask' name='important task' > <potentialOwner> <resourceAssignmentExpression> <formalExpression>user(kermit), group(management)</formalExpression> </resourceAssignmentExpression> </potentialOwner> </userTask>
列出候选人 所属的task 列表 ,代码如下:
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("kermit");
如果没有制定 user 或者group 默认以组方式查询 类似: group(accountancy)
<formalExpression>accountancy</formalExpression>
下面是通过activiti 提供的简单的描述方式,来定义审批人.比上面那种xml格式简单多了.
-
assignee attribute: 指定实际用户.
<userTask id="theTask" name="my task" activiti:assignee="kermit" />
跟 humanPerformer 定义效果一样
-
candidateUsers attribute: 指定候选人
<userTask id="theTask" name="my task" activiti:candidateUsers="kermit, gonzo" />
跟 potentialOwner定义效果一样. 不用再像 user(kermit) 这样输入, 因为他本身就是user节点. 直接输入用户代码就行了
-
candidateGroups attribute:指定候选人的组名
<userTask id="theTask" name="my task" activiti:candidateGroups="management, accountancy" />
同上, 直接写group name就行了
-
candidateUsers 和 candidateGroups can 在同一个task节点中可以同时存在
验证用户权限,在集成到业务系统中时需要用上监听:
<userTask id="task1" name="My task" > <extensionElements> <activiti:taskListener event="create" class="org.activiti.MyAssignmentHandler" /> </extensionElements> </userTask>
DelegateTask
也是通过 TaskListener
实现,来指定受让人,或者受让组(候选人/候选组)
public class MyAssignmentHandler implements TaskListener { public void notify(DelegateTask delegateTask) { // Execute custom identity lookups here // and then for example call following methods: delegateTask.setAssignee("kermit"); delegateTask.addCandidateUser("fozzie"); delegateTask.addCandidateGroup("management"); ... } }
如果你使用了spring,可以使用service 表达式实现, 如下,就定义了 通过 ldapServie 的 findManagerForEmployee 方法或者审批人.
<userTask id="task" name="My Task" activiti:assignee="${ldapService.findManagerForEmployee(emp)}"/>
获取受让人(候选人) 如出一辙:
<userTask id="task" name="My Task" activiti:candidateUsers="${ldapService.findAllSales()}"/>
注意: 方法返回值 必须是 String 或者 List<String> 类型:
public class FakeLdapService { public String findManagerForEmployee(String employee) { return "Kermit The Frog"; } public List<String> findAllSales() { return Arrays.asList("kermit", "gonzo", "fozzie"); } }
相关推荐
ASSIGNMENT的详细要求
useless assignment answer
Aurora中 Lane Assignment分配的小tips,已经验证即使Aurora中分配错误的channal,也能正确传输数据。
Assignment Information Theory
编译原理 作业 Assignment2
CS193P IOS APPLICATION DEVELOPMENT,iphone development Assignment 1, Reproduce the demonstration (building a calculator) given in class.
comp2396 assignment1
东北大学需求分析Assignment 2 solution 东北大学需求分析Assignment 2 solution 东北大学需求分析Assignment 2 solution 东北大学需求分析Assignment 2 solution 东北大学需求分析Assignment 2 solution东北大学...
Assignment机器学习的代码
北航2019年算法课的课后作业。仅供参考。Assignment_1!Assignment_1!Assignment_1!
Assignment4_2.zip
A practise assignment
It is not what you think it is
课程作业是让人头疼的事,今天带来Assignment C++课程作业,希望对你有所帮助
the programs deal with discrete to frequency transformation (DTFT function)
这是我从国外知名大学cs专业留学的同学那里收集来的作业资料(英文原版): 【留学生作业代写资料assignment英文原版】Python作业之CSCI 3151: Assignment 2
Cooperation Aware Task Assignment in Spatial Crowdsourcing.pdf
北航计算机研究生课程 算法设计与分析 Assignment_1
assignment problems for chemistry students
CS231n的Assignment, 用Python3.6.3写的,大家可以参考一下,