activiti 用户任务

用户任务
描述

user task 是一个需要由实际用户操作的节点. 当流程执行到这么一个用户任务节点时,会通过user(用户) 或者组(group) 在task中定义的 assigned 角色来创建一个新的用户任务.

图形

用户任务就是左上角有人员图标的图形


XML 表示

id 必填 , name 可选



documentation 是描述信息,可选


Schedule an engineering meeting for next week with the new hire.

通过task获取方式如下:
task.getDescription()

Due 到期日

到期日 必须是java.util.Date 类型, 或者 格式化后的String类型,或者null , 生成方式可以是表单输入,或者之前的service 任务生成.

也可以通过 TaskService 或者TaskListeners , DelegateTask.改变值
User assignment 审批人

可以分配给一个用户 ,通过 humanPerformer 节点 的 sourceAssignmentExpression 节点 指定人员 . 现在 仅支持 formalExpressions 属性.


...




kermit




解释为受让人, 或者审批人, 只有一个审批人的任务. 由其在 代办任务中查看, 其他人是看不到的.
直接分配assignee 的用户任务,可以通过 taskService 检索到其 需要代办的任务列表:
List tasks = taskService.createTaskQuery().taskAssignee("kermit").list();

任务也可以开放给 候选人 列表.那么, potentialOwner 节点就用上了, 用法跟 humanPerformer 节点类似. 要注意的是:候选人必须制定候选人是用户,还是组, 否则无法解析定义的到底是什么东西


...




user(kermit), group(management)




列出候选人 所属的task 列表 ,代码如下:
List tasks = taskService.createTaskQuery().taskCandidateUser("kermit");
如果没有制定 user 或者group 默认以组方式查询 类似: group(accountancy)
accountancy

Activiti extensions for task assignment 审批人简单扩展

下面是通过activiti 提供的简单的描述方式,来定义审批人.比上面那种xml格式简单多了.

assignee attribute: 指定实际用户.

跟 humanPerformer 定义效果一样
candidateUsers attribute: 指定候选人

跟 potentialOwner定义效果一样. 不用再像 user(kermit) 这样输入, 因为他本身就是user节点. 直接输入用户代码就行了
candidateGroups attribute:指定候选人的组名

同上, 直接写group name就行了
candidateUsers 和 candidateGroups can 在同一个task节点中可以同时存在

验证用户权限,在集成到业务系统中时需要用上监听:





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 方法或者审批人.

获取受让人(候选人) 如出一辙:

注意: 方法返回值 必须是 String 或者 List 类型:

public class FakeLdapService {

public String findManagerForEmployee(String employee) {
return "Kermit The Frog";
}

public List findAllSales() {
return Arrays.asList("kermit", "gonzo", "fozzie");
}

}

你可能感兴趣的:(java)