军人的任务军人的任务

Activiti进阶(十一)----分配组任务的三种方式 - CSDN博客
Activiti进阶(十一)----分配组任务的三种方式
这篇博客要给大家介绍一下分配组任务的三种方式:
组任务分配方式一:直接指定组任务任务办理人
组任务分配方式二:使用流程变量
组任务分配方式三:使用类
下面呢将具体介绍这三种不同的方法:
一、流程图:
& & & & & & & & &&
& & & & & & & & & &图: 配组任务的三种方式
& & & & & & & &
&1.在任务节点设置办理人
&2.测试代码
public class group {
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**部署流程定义*/
public void deployementProcessDefinition(){
String resourceNamebpmn = &group.bpmn&;
String resourceNamepng
= &group.png&;
InputStream inputStreamBpmn = this.getClass().getResourceAsStream(&group.bpmn&);
InputStream inputStreamPng
= this.getClass().getResourceAsStream(&group.png&);
/**部署流程定义*/
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()//创建部署对象
.name(&组任务&)
.addInputStream(resourceNamebpmn, inputStreamBpmn)//部署加载资源文件
.addInputStream(resourceNamepng, inputStreamPng)
.deploy();
System.out.println(&部署ID:&+deployment.getId());
public void startProcessInstance() {
//启动流程实例
String processDefinitionKey =&group&;
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefinitionKey);
System.out.println(&流程实例ID:&+pi.getId());
System.out.println(&流程定义的ID:&+pi.getProcessDefinitionId());
/**查看小A当前的个人任务,未查询出结果*/
public void findPersonTask(){
String assignee = &小A&;
List&Task& list =processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assignee)//指定个人任务,指定办理人
if(list!=null && list.size()&0){
for(Task task:list){
System.out.println(&任务ID:&+task.getId());
System.out.println(&任务的办理人:&+task.getAssignee());
System.out.println(&任务名称:&+task.getName());
System.out.println(&任务的创建时间:&+task.getCreateTime());
System.out.println(&流程实例ID:&+task.getProcessInstanceId());
System.out.println(&#######################################&);
/**查看小A当前的组任务*/
public void findGroupTask(){
String candidateUser = &小A&;
List&Task& list =processEngine.getTaskService()
.createTaskQuery()
.taskCandidateUser(candidateUser)//指定组任务
if(list!=null && list.size()&0){
for(Task task:list){
System.out.println(&任务ID:&+task.getId());
System.out.println(&任务的办理人:&+task.getAssignee());
System.out.println(&任务名称:&+task.getName());
System.out.println(&任务的创建时间:&+task.getCreateTime());
System.out.println(&流程实例ID:&+task.getProcessInstanceId());
System.out.println(&#######################################&);
* 查询结果:
任务ID:132504
任务的办理人:null
任务名称:审核
任务的创建时间:Mon Jul 04 14:14:38 GMT+08:00 2016
流程实例ID:132501
#######################################
注意:任务办理人为null的话有两种可能1是没有办理人,2是组任务
/**查询正在执行的任务的办理人*/
public void findRunPersonTask(){
String taskId =&132504&;
List&IdentityLink& list = processEngine.getTaskService()
.getIdentityLinksForTask(taskId);
if(list!=null && list.size()&0){
for(IdentityLink idLink:list){
System.out.println(&UserID:&+idLink.getUserId());
System.out.println(&类型(参与者或者候选者):&+idLink.getType());
System.out.println(&任务ID:&+idLink.getTaskId());
System.out.println(&流程实例ID:&+idLink.getProcessInstanceId());
System.out.println(&#######################################&);
*查询结果:
UserID:小C
类型(参与者或者候选者):candidate
任务ID:132504
流程实例ID:null
#######################################
UserID:小B
类型(参与者或者候选者):candidate
任务ID:132504
流程实例ID:null
#######################################
UserID:小D
类型(参与者或者候选者):candidate
任务ID:132504
流程实例ID:null
#######################################
UserID:小A
类型(参与者或者候选者):candidate
任务ID:132504
流程实例ID:null
#######################################
//注意:由查询结果,我们可以看出组任务的办理人都有两种类型,一种是参与者类型(participant),一种是候选者类型
//候选者类型(candidate)的记录会指定任务ID,但是不会指定流程实例ID ,参与者类型不会指定任务ID,但是会指定流程实例ID
//候选者不一定参与了任务
/**查询历史任务的办理人表*/
public void findHistoryPersonTask(){
String processInstanceId =&132501&;
List&HistoricIdentityLink& list= processEngine.getHistoryService()
.getHistoricIdentityLinksForProcessInstance(processInstanceId);//使用流程实例查(查询的参与者)
//.getHistoricIdentityLinksForTask(taskId);//使用任务ID查询(查询的候选者)
if(list!=null && list.size()&0){
for(HistoricIdentityLink hil:list){
System.out.println(&UserID:&+hil.getUserId());
System.out.println(&类型(参与者或者候选者):&+hil.getType());
System.out.println(&任务ID:&+hil.getTaskId());
System.out.println(&流程实例ID:&+hil.getProcessInstanceId());
System.out.println(&#######################################&);
* 查询结果:
UserID:小C
类型(参与者或者候选者):participant
任务ID:null
流程实例ID:132501
#######################################
UserID:小B
类型(参与者或者候选者):participant
任务ID:null
流程实例ID:132501
#######################################
UserID:小D
类型(参与者或者候选者):participant
任务ID:null
流程实例ID:132501
#######################################
UserID:小A
类型(参与者或者候选者):participant
任务ID:null
流程实例ID:132501
#######################################
// 注意:当使用getHistoricIdentityLinksForProcessInstance()查询的时候查询的是参与者
/**候选者不一定真正的参与任务的办理,所以我们需要拾取任务,将组任务分配给个人任务,即指定任务办理人字段*/
public void cliam(){
//将组任务分配给个人任务
String taskId =&132504&;
//分配的个人任务(可以是组任务中的成员,也可以是非组任务的成员)
String userId =&大F&;
processEngine.getTaskService()
.claim(taskId, userId);
//当执行完之后查询正在执行的任务表(act_ru_task)可以发现ASSIGNEE_字段(指定任务办理人字段)值为'大F'
//此时任务就指定给了大F,在用小A或者下B等在去查个人组任务的话,就查询不出来任何任务【组任务最终也是需要指定一个人办理的,所以需要拾取任务】
/**将个人任务回退到组任务,前提:之前一定是一个组任务*/
public void setAssigee(){
//将组任务分配给个人任务
String taskId =&132504&;
processEngine.getTaskService()
.setAssignee(taskId, null);
//当执行完之后查询正在执行的任务表(act_ru_task)可以发现ASSIGNEE_字段(指定任务办理人字段)值由'大F'变为了null,
//将本来指定给大F的任务又回退成为组任务,这时就可以重新拾取任务将任务分配给组成员小A或者小B等
/**向组任务中添加组成员*/
public void addGroupUser(){
String taskId =&132504&;
//成员办理人
String userId =&大H&;
processEngine.getTaskService()
.addCandidateUser(taskId, userId);
//当执行完之后查询正在执行的任务表(act_ru_identitylink`)可以发现大H添加进去了
/**删除组任务中的成员*/
public void deleteGroupUser(){
String taskId =&132504&;
//成员办理人
String userId =&小B&;
processEngine.getTaskService()
.deleteCandidateUser(taskId, userId);
//当执行完之后查询正在执行的任务表(act_ru_identitylink`)可以发现小B类型为候选者类型(candidate)的那条记录被删除了
/**拾取任务给小A*/
public void cliamA(){
//将组任务分配给个人任务
String taskId =&132504&;
//分配的个人任务(可以是组任务中的成员,也可以是非组任务的成员)
String userId =&小A &;
processEngine.getTaskService()
.claim(taskId, userId);
//当执行完之后查询正在执行的任务表(act_ru_task)可以发现ASSIGNEE_字段(指定任务办理人字段)值为'小A'
//此时任务就指定给了小A
/**小A完成任务*/
public void completeTask(){
String taskId =&132504&;
processEngine.getTaskService()
.complete(taskId);
& 二、分配组任务方式二:使用流程变量
& & &1.在任务节点设置变量
& & & & & & & & & &2、测试代码public class group {
ProcessEngine processEngine =ProcessEngines.getDefaultProcessEngine();
/**部署流程定义*/
public void deployementProcessDefinition(){
String resourceNamebpmn = &group.bpmn&;
String resourceNamepng
= &group.png&;
InputStream inputStreamBpmn = this.getClass().getResourceAsStream(&group.bpmn&);
InputStream inputStreamPng
= this.getClass().getResourceAsStream(&group.png&);
/**部署流程定义*/
Deployment deployment = processEngine.getRepositoryService()
.createDeployment()//创建部署对象
.name(&组任务&)
.addInputStream(resourceNamebpmn, inputStreamBpmn)//部署加载资源文件
.addInputStream(resourceNamepng, inputStreamPng)
.deploy();
System.out.println(&部署ID:&+deployment.getId());
* 启动流程实例的同时,设置流程变量,使用流程变量的方式设置下一个任务的办理人
流程变量的名称,就是在group.bpmn中定义activiti:candidateUsers=&#{userIDs}&的userIDs
流程变量的值,就是任务的办理人(组任务)
public void startProcessInstance() {
//启动流程实例
String processDefinitionKey =&group&;
//设置流程变量
Map&String, Object& variables = new HashMap&String, Object&();
variables.put(&userIDs&, &大大,小小,中中&);
//启动流程实例的时候设置流程变量
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefinitionKey, variables);//使用流程定义的key的最新版本启动流程
System.out.println(&流程实例ID:&+pi.getId());
System.out.println(&流程定义的ID:&+pi.getProcessDefinitionId());
/**查看大大当前的组任务*/
public void findGroupTask(){
String candidateUser = &大大&;
List&Task& list =processEngine.getTaskService()
.createTaskQuery()
.taskCandidateUser(candidateUser)
if(list!=null && list.size()&0){
for(Task task:list){
System.out.println(&任务ID:&+task.getId());
System.out.println(&任务的办理人:&+task.getAssignee());
System.out.println(&任务名称:&+task.getName());
System.out.println(&任务的创建时间:&+task.getCreateTime());
System.out.println(&流程实例ID:&+task.getProcessInstanceId());
System.out.println(&#######################################&);
* 查询结果:
任务ID:162505
任务的办理人:null
任务名称:审核
任务的创建时间:Mon Jul 04 16:53:15 GMT+08:00 2016
流程实例ID:162501
#######################################
注意:任务办理人为null的话有两种可能1是没有办理人,2是组任务
& & & &三、分配组任务方式三:使用类
1.编写类& &
public class TaskListenerImpl implements TaskListener {
* 可以设置任务的办理人(个人组人和组任务)
public void notify(DelegateTask delegateTask) {
//指定组任务
delegateTask.addCandidateUser(&郭靖&);
delegateTask.addCandidateUser(&huangr&);
2.设置任务***
3.测试代码public class TaskTest {
//流程引擎对象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
/**部署流程定义+启动流程实例*/
public void deployementAndStartProcess(){
InputStream inputStreamBpmn = this.getClass().getResourceAsStream(&group.bpmn&);
InputStream inputStreampng = this.getClass().getResourceAsStream(group.png&);
Deployment deployment = processEngine.getRepositoryService()//
.createDeployment()//创建部署对象
.addInputStream(&group.bpmn&, inputStreamBpmn)//部署加载资源文件
.addInputStream(&group.png&, inputStreampng)//
.deploy();
System.out.println(&部署ID:&+deployment.getId());
//启动流程实例
ProcessInstance pi = processEngine.getRuntimeService()//
.startProcessInstanceByKey(&group&);//使用流程定义的key的最新版本启动流程
System.out.println(&流程实例ID:&+pi.getId());
System.out.println(&流程定义的ID:&+pi.getProcessDefinitionId());
/**查询我的个人任务*/
public void findPersonalTaskList(){
//任务办理人
String assignee = &郭靖&;
List&Task& list = processEngine.getTaskService()//
.createTaskQuery()//
.taskAssignee(assignee)//个人任务的查询
if(list!=null && list.size()&0){
for(Task task:list){
System.out.println(&任务ID:&+task.getId());
System.out.println(&任务的办理人:&+task.getAssignee());
System.out.println(&任务名称:&+task.getName());
System.out.println(&任务的创建时间:&+task.getCreateTime());
System.out.println(&流程实例ID:&+task.getProcessInstanceId());
System.out.println(&#######################################&);
/**查询组任务*/
public void findGroupTaskList(){
//任务办理人
String candidateUser = &郭靖&;
List&Task& list = processEngine.getTaskService()//
.createTaskQuery()//
.taskCandidateUser(candidateUser)//参与者,组任务查询
if(list!=null && list.size()&0){
for(Task task:list){
System.out.println(&任务ID:&+task.getId());
System.out.println(&任务的办理人:&+task.getAssignee());
System.out.println(&任务名称:&+task.getName());
System.out.println(&任务的创建时间:&+task.getCreateTime());
System.out.println(&流程实例ID:&+task.getProcessInstanceId());
System.out.println(&#######################################&);
/**完成任务*/
public void completeTask(){
String taskId = &6308&;
processEngine.getTaskService()//
.complete(taskId);
System.out.println(&完成任务:&+taskId);
/**查询正在执行的组任务列表*/
public void findGroupCandidate(){
String taskId = &5909&;
List&IdentityLink& list = processEngine.getTaskService()//
.getIdentityLinksForTask(taskId);
if(list!=null && list.size()&0){
for(IdentityLink identityLink:list){
System.out.println(&任务ID:&+identityLink.getTaskId());
System.out.println(&流程实例ID:&+identityLink.getProcessInstanceId());
System.out.println(&用户ID:&+identityLink.getUserId());
System.out.println(&工作流角色ID:&+identityLink.getGroupId());
System.out.println(&#########################################&);
/**查询历史的组任务列表*/
public void findHistoryGroupCandidate(){
//流程实例ID
String processInstanceId = &5905&;
List&HistoricIdentityLink& list = processEngine.getHistoryService()
.getHistoricIdentityLinksForProcessInstance(processInstanceId);
if(list!=null && list.size()&0){
for(HistoricIdentityLink identityLink:list){
System.out.println(&任务ID:&+identityLink.getTaskId());
System.out.println(&流程实例ID:&+identityLink.getProcessInstanceId());
System.out.println(&用户ID:&+identityLink.getUserId());
System.out.println(&工作流角色ID:&+identityLink.getGroupId());
System.out.println(&#########################################&);
/**将组任务指定个人任务(拾取任务)*/
public void claim(){
String taskId = &6308&;
//个人任务的办理人
String userId = &郭靖&;
processEngine.getTaskService()//
.claim(taskId, userId);
/**将个人任务再回退到组任务(前提:之前这个任务是组任务)*/
public void setAssignee(){
String taskId = &6308&;
processEngine.getTaskService()//
.setAssignee(taskId, null);
/**向组任务中添加成员*/
public void addGroupUser(){
String taskId = &6308&;
//新增组任务的成员
String userId = &李浩&;
processEngine.getTaskService()//
.addCandidateUser(taskId, userId);
/**向组任务中删除成员*/
public void deleteGroupUser(){
String taskId = &6308&;
//新增组任务的成员
String userId = &黄蓉&;
processEngine.getTaskService()//
.deleteCandidateUser(taskId, userId);
1)在类中使用delegateTask.addCandidateUser(userId);的方式分配组任务的办理人,此时郭靖和黄蓉是下一个任务的办理人。
2)通过processEngine.getTaskService().claim(taskId,userId);将组任务分配给个人任务,也叫认领任务,即指定某人去办理这个任务,此时有郭靖去办理任务。
注意:认领任务的时候,可以是组任务成员中的人,也可以不是组成员中的人。此时通过type的类型
为participant来指定任务办理人。
3)addCandidateUser()即向组任务添加成员,deleteCandidateUser()即删除组任务成员。
4)在开发中,可以将每一个任务的办理人规定好,例如张三的领导是李四和王五,这样张三
提交任务,由李四或者王五去查询组任务,可以看到对应张三的申请,李四或者王五在通过任务认领(claim)
的方式,由某个人去完成这次任务。
&& & & & & & & & & & &
& & & & & &
本文已收录于以下专栏:
相关文章推荐
这会部长可以驳回员工的请假申请,用户要调整,主任也可以驳回员工的申请
加入判断的变量
刚开始也是模拟提交一张。
public void TestAddLeave...
1. 初识Activiti
1.1. 工作流与工作流引擎
工作流(workflow)就是工作流程的计算模型,即将工作流程中的工作如何前后组织在一起的逻辑和规则在计算机中以恰当的模型进行表示并对其实...
一、流程图:
二、流程定义文件:
AssigneeUserAndGroup.bpmn
三、单元测试:
ProcessTestDelegateTask.java
四、主要执行语句
// 签收t...
经过几年的学习,现在才感觉,了解源码是多么的重要,甚至如今火热的培训班的老师也是这样过来的吧!一点一点的分析源码,再加上一点一点的思考和总结,才能够对知识了解的那么深刻吧!原来学习就是如此的简单。
上一篇博客我们讲了分配个人任务的三种方式,这篇博客我们来介绍一下分配组任务的三种方式。
一、流程图
组任务及三种分配方式:
1:在taskProcess.bpmn中直接写candidate-users=“小A,小B,小C,小D"
2:在taskProcess.bpmn中写cand...
1. IdentityLink
An identity link is used to associate a task with a certain identity. For example: ...
组任务分配:例如有这样一个需求:你的上司也就是经理有两个或多个以上,那么你需要提交申请到他们手上,主要有一个认领了该任务,然后审批通过即可
组任务认领,组任务添加人员或删除人员,扯回组任务...
一、流程图
二、部署流程定义+启动流程实例+查询流程实例+查询历史流程实例
public void deployementAndStartProcess(){
用户任务(UserTask)即用户操作的任务, 个人任务是用户任务的一种,这篇博文将简单地介绍下分配个人任务的三种方式。
一、流程图
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)其实,牧师任务是任务卡中最成功的一张
我个人认为炉石一张卡是强是弱,扔去狂野一试就知道了在标准里,我们可能看不见,可到了狂野,基本都是3个牧师总会有一个带。狂野里的任务贼相当于t4卡组,其他任务都见不到首先他不影响卡组强度,而且相当灵活,你起手把它换了,恩佐斯一波一样能做完,隔壁任务贼任务战做不完任务像个傻屌一样其次完成后强度中规中矩,跟雷诺相比不分上下,因为你雷诺会导致高质量解牌减少,而任务不存在这种问题。40血和30血有差吗?有!等下他出一张新卡4费打4,当你生命值大于25时打6,你就知道差多少了[s:ac:反对]
?狂野的任务贼可以不带任何一张狂野卡
然而事实是心火牧,宇宙牧更多,甚至宇宙任务牧(贪得一比牧)。另外任务贼虽然被快攻怼成zz,但牧师对上自己就是个zz[s:ac:哭笑]
1分任务卡笑而不语
[b]Reply to [pid=]Reply[/pid] Post by [uid=]JimL919[/uid] ( 01:08)[/b]02假人对任务贼跟海盗战的火炮一样,可以说改变做任务节奏的一张卡,另外还有夜幕斩杀流和板娘平推流的不同思路,狂野任务贼加强程度也不算小了
[b]Reply to [pid=]Reply[/pid] Post by [uid=]鑫安黎德[/uid] ( 01:11)[/b]狂野宇宙牧主流有两种思路,一个是任务亡语怪+恩佐斯流,一个是低费法术鸡腿莱拉挖宝各类战吼+导演的杂技流,总体来说牧师任务在狂野的受众还是很不错的
[b]Reply to [pid=]Reply[/pid] Post by [uid=]戰神呂布[/uid] ( 01:49)[/b]可惜强度还是捉急,被青玉德各种摩擦
新出一张卡,标准没人用,狂野有人用,就叫成功吗
[b]Reply to [pid=]Reply[/pid] Post by [uid=]戰神呂布[/uid] ( 01:44)[/b]任务贼是环境卡组,在狂野里被脚本海盗打的生活不能自理,只能在标准里混,不过现在标准也快的要死,任务贼估计又得掉一个段位
脱离环境评价一张卡就是耍流氓。盗贼任务弱吗?不!等下他出一张新卡当你完成盗贼任务时直接获得游戏胜利,你就知道盗贼任务卡有多强了。[s:ac:反对]

参考资料

 

随机推荐