5、接收任务活动(receiveTask,即等待活动)不是一个任务节点
接收任务是一个简单任务,他会等待回应消息的到达,当前,官方只实现了这个任务的java语义,当流程达到接受任务,流程状态会保存到数据库中;
在任务创建后,意味着流程会进入等待状态,知道引擎接收了一个特定的消息,这会触发流程穿过接收任务继续执行;

当前任务(一般指机器自动完成,但需要小号一定时间的工作)完成后,向后推移流程,可以调用runtimeService.signal(executionId)传递接收执行对象的id.

6、个人任务(userTask,即用户操作的任务)Assignee
6.1、之前的做法是直接把办理人放在了xml中,不够灵活
6.2、分配个人任务方式二(使用流程变量)
6.3、分配个人任务方式三(使用类动态指定,实现TaskListener接口)
6.4、分配个人任务从一个人指定到另一个人(任务认领,比如这个人请假了,可以指派给另一个人处理)

/**
* 启动流程实例,使用流程变量指定审批人
* @return
*/
@RequestMapping("sequence/starttaskOne")
public String startSequenceFlow(){ String processDefinitionKey = "taskOne"; Map<String, Object> map = new HashMap<String, Object>();
map.put("userId", "xxx"); //正在执行的流程实例和执行对象相关的service
RuntimeService runtimeService = processEngine.getRuntimeService(); //使用流程定义的key启动流程实例,key对应的是bpmn文件中的id,默认是最新版本的流程启动
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processDefinitionKey,map); System.out.println(processInstance.getId() + processInstance.getProcessDefinitionId()); return processInstance.getProcessDefinitionId();
}

7、组任务分配 Condidate users

act_ru_identitylink : 任务办理人表(个人任务,组任务);个人任务会有一条数据,组任务会有两条数据,type不一样(参与者,候选者)
act_ru_identitylink : 历史任务办理人表(个人任务,组任务)

7.1、拾取组任务分配为个人任务,指定任务人员可以是非组内成员
还可以将个人任务回退为组任务,前提之前必须是一个组任务,将assignee设置为null即可

7.2、向组任务中添加成员 / 删除成员

7.3、分配任务的三种方式: 写在xml中、使用流程变量、使用类

package com.controller;
/**
*使用类分配任务
*/
import org.activiti.engine.delegate.DelegateTask;
import org.activiti.engine.delegate.TaskListener; public class TaskListenerImpl implements TaskListener { @Override
public void notify(DelegateTask task) {
//设置个人任务
//task.setAssignee(""); //设置组任务
task.addCandidateUser("小A");
task.addCandidateUser("小B");
task.addCandidateUser("小C"); } }

  

/**
* 查询当前人的个人任务
* @return
*/
@RequestMapping("sequence/findGroupOne")
public String findGateWayTask(){ String assignee = "daF"; List<Task> list = processEngine.getTaskService()
.createTaskQuery()
.taskAssignee(assignee).list(); if(!CollectionUtils.isEmpty(list)){
for (Task task : list) {
System.out.println(task.getAssignee());
System.out.println(task.getId());
System.out.println(task.getName());
System.out.println(task.getExecutionId());
}
} System.out.println("****************"); return list.toString();
} /**
* 查询正在执行的的任务办理人表
*/
@GetMapping("group/findP")
public String findPersonal(){ String taskId = "57509"; List<IdentityLink> links = processEngine.getTaskService()
.getIdentityLinksForTask(taskId); for (int i = 0; i < links.size(); i++) {
System.err.println(links.get(i).getUserId());
} return String.valueOf(links.size());
}
/**
* 查询历史任务办理人表
*/
@GetMapping("group/findHisP")
public String findHisPersonal(){ String taskId = "57509"; List<HistoricIdentityLink> links = processEngine.getHistoryService()
.getHistoricIdentityLinksForTask(taskId); for (int i = 0; i < links.size(); i++) {
System.err.println(links.get(i).getUserId());
} return String.valueOf(links.size());
} /**
* 拾取任务,将组任务分给个人任务,指定任务的办理人
* @return
*/
@GetMapping("group/claim")
public String claim(){ String taskId = "57509";
String userId = "daF"; processEngine.getTaskService()
.claim(taskId, userId); return "success!";
} /**
* 将个人任务回退回组任务
* @return
*/
@GetMapping("group/returnClaim")
public String returnClaim(){ String taskId = "57509"; processEngine.getTaskService()
.claim(taskId, null); return "success!";
} /**
* 向组任务中添加人
* @return
*/
@GetMapping("group/addUser")
public String addGroupUser(){ String taskId = "57509"; processEngine.getTaskService()
.addCandidateUser(taskId, "大s"); return "success!";
} /**
* 向组任务添删除人
* @return
*/
@GetMapping("group/delUser")
public String delGroupUser(){ String taskId = "57509"; String userId = "大s"; processEngine.getTaskService()
.deleteCandidateUser(taskId, userId); return "success!";
}

  

7.4、工作流定义的角色组 IdentityService(组织机构管理)

act_id_group: 角色表
act_id_user :用户表
act_id_membership :用户角色关系表

/**
* 部署
* @return
*/
@GetMapping("sequence/deployCandidateGroup")
public String deploySequenceFlow(){ InputStream bpmn = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.bpmn");
InputStream png = this.getClass().getResourceAsStream("/diagrams/cadinerGroup.png"); Deployment deployment = processEngine.getRepositoryService().createDeployment().name("组任务")
.addInputStream("cadinerGroup.bpmn", bpmn)//与资源文件名称要一致
.addInputStream("cadinerGroup.png", png)
.deploy(); System.err.println(deployment.getKey() + "---" + deployment.getName()); //添加用户角色组
IdentityService identityService = processEngine.getIdentityService(); //创建角色
//identityService.saveGroup(Group);; //创建用户
//identityService.saveUser(user); //创建角色用户的关联关系
//identityService.createMembership(userId, groupId); System.out.println("添加组织机构成功!"); return deployment.getId();
}

  

activiti工作流引擎学习(三)的更多相关文章

  1. Activiti工作流引擎学习(一)

    1.部署对象和流程定义相关表:RepositoryService act_re_deployment: 部署对象表:一次部署的多个文件的信息,对于不需要的流程可以删除和修改 act_re_procde ...

  2. activiti工作流引擎学习(二)

    1.连线 如果bpmn文件和java文件放在同一目录下,需要配置buildPath: 使用流程变量,设置连线需要的流程变量的名称,并设置流程变量的值,流程会按照指定的连线完成任务. 1.1一个活动中可 ...

  3. Activiti工作流引擎开发系列

    Activiti工作流引擎开发系列-01 作者:Jesai 没有伞的孩子,只能光脚奔跑! 前言: 初次接触工作流这个概念是自从2014年11月份开始,当时是由于我的毕业设计需要,还记得当时我毕业设计的 ...

  4. Activiti工作流引擎简介

    Activiti工作流引擎简介 一.概述 Activiti是由Alfresco软件在2010年5月17日发布的业务流程管理(BPM)框架,它是覆盖了业务流程管理,工作流,服务协作等领域的一个开源,灵活 ...

  5. Activiti工作流引擎数据库表结构

    Activiti工作流引擎数据库表结构 一.数据库表的命名 Acitiviti数据库中表的命名都是以ACT_开头的.第二部分是一个两个字符用例表的标识.此用例大体与服务API是匹配的. ACT_RE_ ...

  6. Activiti工作流框架学习(一)之通用数据表详细介绍

    文/朱季谦 Activiti工作流引擎自带了一套数据库表,这里面有一个需要注意的地方: 低于5.6.4的MySQL版本不支持时间戳或毫秒级的日期.更糟糕的是,某些版本在尝试创建此类列时将引发异常,而其 ...

  7. Activiti工作流引擎参考资料

    Activiti工作流引擎使用 工作流-Activiti核心API介绍 传智播客Activiti工作流视频教程(企业开发实例讲解) 工作流引擎Activiti演示项目 http://www.kafei ...

  8. Activiti工作流框架学习笔记(二)之springboot2.0整合工作流Activiti6.0

    以前在工作当中做过不少与工作流Activiti有关的工作,当时都是spring集成activiti5.22的项目,现在回过头去看,其实版本已经稍微老了,因此,基于先前的工作经验,决定用较新版本的技术来 ...

  9. activiti工作流引擎

    参考文章 Activiti-5.18.0与springMvc项目集成和activiti-explorer单独部署Web项目并与业务数据库关联方法(AutoEE_V2实现方式) https://blog ...

随机推荐

  1. day39-Spring 17-Spring的JDBC模板:完成增删改的操作

    JdbcTemplate根DBUtils非常类似,你要是有非常多的Dao,你每一个Dao都需要写它 /*在Dao层注入JDBC模板*/ private JdbcTemplate jdbcTemplat ...

  2. 阿里云的重大战略调整,“被集成”成核心,发布SaaS加速器助力企业成长

    摘要: 阿里云战略调整,“被集成”成为生态战略,讲讲即将“退居幕后”的阿里云. 阿里云近期调整动作巨大,阿里云新任总裁张剑锋(花名,行颠)上任后充分体现其创新和自我探索不断求“变”的阿里特性.期间,达 ...

  3. firefox扩展开发(一) : 扩展的基本结构

    用过firefox的人肯定要安装firefox的扩展,这样才能发挥火狐的全部实力.一般扩展是一个后缀为.xpi的文件,其实这个文件就是zip格式的压缩包,压缩了一个扩展所需要的所有目录和文件,基本的目 ...

  4. 2019.9.19登陆注册猜数字给奖品combo

    #注册函数 def register(): registor_count = 0 while registor_count < 3: username_inp = input('user nam ...

  5. 《mysql必知必会》笔记3(插入、更新、删除、创建删除更新表、视图)

    十九:插入数据 1:insert语句用来将行插入数据表中,可以插入完整的行.行的一部分.插入多行.插入某些查询的结果. 2:不指定列名,可以这样插入: insert into customers va ...

  6. JAVA高级特性--内部类

    内部类概念 public class Outer{ class inner{ } } 特点 可以很好的实现隐藏,可以使用procted,private 可以直接访问外部类的所有成员 ,包括私有成员. ...

  7. Kubernetes排错:用容器的元数据提供新思路

    在这篇文章中,让我们讨论一下Kubernetes中的元数据(Metadata),以及如何利用它来监控系统的性能. 元数据(Metadata) 是一个较为高大上的词.它的含义是"用来描述其他数 ...

  8. UVa 10323 【数学】

    UVa 10323 题目:计算阶乘在10000~6227020800之间的值,不在范围对应输出Under或者Over. 分析:简单题.数论.因为13!=6227020800,7!<10000&l ...

  9. 卸载ROS命令

    ROS有问题需要卸载只需输入以下命令: sudo apt-get purge ros-* sudo rm -rf /etc/ros

  10. 爬虫:Selenium + PhantomJS

    更:Selenium特征过多(language/UserAgent/navigator/en-US/plugins),以Selenium打开的浏览器处于自测模式,很容易被检测出来,解决方法可选: 用m ...