activiti 用户任务

用户任务
描述

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

图形

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


XML 表示

id 必填 , name 可选
<userTaskid="theTask"name="Important task"/>


documentation 是描述信息,可选
<userTaskid="theTask"name="Schedule meeting">
<documentation>
Schedule an engineering meeting for next week with the new hire.
</documentation>
通过task获取方式如下:
task.getDescription()

Due 到期日

到期日 必须是java.util.Date 类型, 或者 格式化后的String类型,或者null , 生成方式可以是表单输入,或者之前的service 任务生成.
<userTask id="theTask" name="Important task" activiti:dueDate="${dateVariable}"/>
也可以通过 TaskService 或者TaskListeners , DelegateTask.改变值
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 extensions for task assignment 审批人简单扩展

下面是通过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");
}

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Activiti中,归还任务可以通过将任务的负责人(assignee)设置为null来实现。引用\[1\]中的代码示例展示了如何将个人任务转变为组任务并进行任务交接。首先,使用TaskService查询待办任务,并校验当前用户是否是任务的负责人。如果是负责人,则将任务的负责人设置为null,即归还组任务。代码示例如下: ```java TaskService taskService = processEngine.getTaskService(); String taskId = "6004"; // 待归还的任务ID String userId = "zhangsan2"; // 当前用户ID Task task = taskService.createTaskQuery().taskId(taskId).taskAssignee(userId).singleResult(); if (task != null) { taskService.setAssignee(taskId, null); } ``` 另外,引用\[2\]中的代码示例展示了如何退回(归还)任务。通过查询任务列表,找到需要退回的任务,并将任务的负责人设置为null,即可实现任务的归还。 ```java TaskService service = engine.getTaskService(); List<Task> tasks = service.createTaskQuery() .processDefinitionKey("evecation") .taskAssignee("user4") .list(); for (Task task : tasks) { service.setAssignee(task.getId(), null); } ``` 需要注意的是,如果想要退回到上一级或最初拾取任务的人员,可以查看`act_ru_identitylink`表,该表记录了最初拾取任务的人员信息。此外,还可以查看`act_hi_comment`表,该表记录了任务移交过程中的评论信息。引用\[3\]中的代码示例展示了如何拾取任务,可以作为参考。 ```java TaskService service = engine.getTaskService(); List<Task> tasks = service.createTaskQuery() .processDefinitionKey("evecation") .list(); for (Task task : tasks) { String user3 = "user3"; service.claim(task.getId(), user3); } ``` 以上是关于Activiti中归还任务的相关操作。希望对你有帮助! #### 引用[.reference_title] - *1* [《Activiti/Flowable 深入BPM工作流》- 如何进行任务的归还?](https://blog.csdn.net/u013067756/article/details/106735160)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Activiti7学习十 组任务](https://blog.csdn.net/u011447164/article/details/125246319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值