2017.2.20 activiti实战--第五章--用户与组及部署管理(一)用户与组
学习资料:《Activiti实战》
第五章 用户与组及部署管理(一)用户与组
内容概览:讲解activiti中内置的一套用户、组的关系,以及如何通过API添加、删除、查询。
5.1 用户与组
5.1.1 用户
public class IdentityServiceTest{
@Rule
public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数,当创建activitirule时,会自动创建引擎对象processEngine。
@Test
public void testUser() throws Exception(){
IdentityService is = ar.getIdentityService();
User user = is.newUser("henryyan");
user.setFirstName("Henry");
user.setLastName("yan");
user.setEmail("yanhonglei@gamil.com");
is.saveUser(user);
User userInDb = is.createUserQuery().userId("henryyan").singleResult();
assertNotNull(userInDb);
is.deleteUser("henryyan");
userInDb = is.createUserQuery().userId("henryyan").singleResult();
assertNull(userInDb);
}
}
5.1.2 组
public class IdentityServiceTest{
@Rule
public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数,当创建activitirule时,会自动创建引擎对象processEngine。
@Test
public void testGroup() throws Exception(){
IdentityService is = ar.getIdentityService();
Group group = is.newGroup("deptLeader");
group .setName("部门领导");
group .setType("assignment");
is.saveGroup(group);
List<Group> groupList = is.createGroupQuery().groupId("deptLeader").list();
assertEquals(1,groupList.size());
is.deleteGroup("deptLeader");
groupList = is.createGroupQuery().groupId("deptLeader").list();
assertEquals(0,groupList.size());
}
}
5.1.3 用户与组的关系
public class IdentityServiceTest{
@Rule
public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数
@Test
public void testUserAndGroupMembership() throws Exception(){
IdentityService is = ar.getIdentityService();
Group group = is.newGroup("deptLeader");
group .setName("部门领导");
group .setType("assignment");
is.saveGroup(group);
User user = is.newUser("henryyan");
user.setFirstName("Henry");
user.setLastName("yan");
user.setEmail("yanhonglei@gamil.com");
is.saveUser(user);
is.createMembership("henryyan","deptLeader");
//查询组deptLeader所拥有的用户
User userInGroup = is.createUserQuery().memberOfGroup("deptLeader").singleResult();
assertNotNull(userInGroup);
assertEquals("henryyan",userInGroup.getId());
//查询用户henryyan所属的组
Group groupContainsHenryyan = is.createGroupQuery().groupMember("henryyan").singleResult();
assertNotNull(groupContainsHenryyan);
assertEquals("deptLeader",groupContainsHenryyan.getId());
}
}
5.1.4 UserTask中的用户与组
(1)测试场景及测试模板
假设一个流程图示意图为:开始--->用户任务--->结束
共用的xml文件模板如下:
<process id="userAndGroupInUserTask" name="userAndGroupInUserTask">
<startEvent id="startEvent1" name="Start"></startEvent>
<userTask id="studyUserAndGroupInUserTask" name="学习用户与组在用户任务中的应用"></userTask>
<sequenceFlow id="flow1" name="" sourceRef="startEvent1" targetRef="studyUserAndGroupInUserTask"></sequenceFlow>
<endEvent id="endEvent1" name="End"></endEvent>
<sequenceFlow id="flow2" name="" sourceRef="studyUserAndGroupInUserTask" targetRef="endEvent1"></sequenceFlow>
</process>
共用的测试代码模板如下:即此时有两个用户,位于组deptLeader里。
public class UserAndGroupInUserTaskTest{
@Before
public void setup() throws Exception(){
//初始化7个Service
super.setUp();
Group group = identityService.newGroup("deptLeader");
group .setName("部门领导");
group .setType("assignment");
identityService.saveGroup(group);
//henryyan示例,jackchen的略
User user = identityService.newUser("henryyan");
user.setFirstName("Henry");
user.setLastName("yan");
user.setEmail("yanhonglei@gmail.com");
identityService.saveUser(user);
//henryyan示例,jackchen的略
identityService.createMembership("henryyan","deptLeader");
}
@After
public void afterInvokeTestMethod() throws Exception(){
identityService.deleteMembership("henryyan","deptLeader");
identityService.deleteGroup("deptLeader");
identityService.deleteUser("henryyan");
}
...
}
(2)候选组
修改上面的UserTask如下:属于这个组的用户都可以签收任务。一旦有一个人签收,其他人的用户任务里就没有这个任务了。
<userTask id="studyUserAndGroupInUserTask"
name="学习用户与组在用户任务中的应用"
activiti:candidateGroups="deptLeader">
</userTask>
(3)候选人
修改上面的UserTask如下:列出来的用户都可以签收任务。一旦有一个人签收,其他人的用户任务里就没有这个任务了。
<userTask id="studyUserAndGroupInUserTask"
name="学习用户与组在用户任务中的应用"
activiti:candidateUsers="jackchen,henryyan">
</userTask>
(4)共用测试代码
在类userAndGroupTestInUserTask添加方法如下:
1 public class UserAndGroupInUserTaskTest{
2 @Test
3 @Deployment(resources={"chapter5/userAndGroupInUserTask.bpmn"})
4 public void testUserAndGroupInUserTask() throws Exception{
5 ProcessInstance pi = runtimeService.startProcessInstanceByKey("userAndGroupInUserTask");
6 assertNotNull(pi);
7
8 //该任务属于所有位于候选组的用户/ 该任务属于所有列出来的候选人
9 Task jackchenTask = taskService.createTaskQuery().taskCandidateUser("jackchen").singleResult();
10 assertNotNull(jackchenTask);
11 Task henryyanTask = taskService.createTaskQuery().taskCandidateUser("henryyan").singleResult();
12 assertNotNull(henryyanTask);
13
14 taskService.claim(jackchenTask.getId(),"jackchen");//jackchen签收任务
15 //taskService.complete(jackchenTask.getId());//jackchen完成任务
16
17 //被jackchen签收后,henryyan不再拥有该任务
18 henryyanTask = taskService.createTaskQuery().taskCandidateUser("henryyan").singleResult();
19 assertNull(henryyanTask);
20 }
21 }
综上,主要涉及的方法:
主要涉及到的方法:
//创建、保存和删除用户/组
User user/Group group = identityService.newUser("userid")/newGroup("groupid");
identityService.saveUser("userid")/saveGroup("groupid");
identityService.deleteUser("userid")/deleteGroup("groupid"); //查询User
User user = identityService.createUserQuery().userId("userid").singleResult();
List<User> userList = identityService.createUserQuery().userId("userid").list();
//查询Group
Group group = identityService.createGroupQuery().groupId("groupid").singleResult();
List<Group> groupList = identityService.createGroupQuery().groupId("groupid").list(); //创建、查询关系
identityService.createMembership("userid",groupid);
User userInGroup = identityService.createUserQuery().memberOfGroup("deptLeader").singleResult();
Group groupContainsHenryyan = identityService.createGroupQuery().groupMember("henryyan").singleResult(); //查询用户拥有的任务,签收及完成
Task task = taskService.createTaskQuery().taskCandidateUser("userid").singleResult();
List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("userid").list();
taskService.claim(task.getId(),"userid");
taskService.complete(task.getId());
2017.2.20 activiti实战--第五章--用户与组及部署管理(一)用户与组的更多相关文章
- 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取
学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...
- 2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源
学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种 ...
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例
学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...
- 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境
学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...
- 2017.2.20 activiti实战--第一章--认识Activiti
学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...
- 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单
学习资料:<Activiti实战> 第七章 Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...
- 2017.2.28 activiti实战--第六章--任务表单(二)外置表单
学习资料:<Activiti实战> 第六章 任务表单(二)外置表单 6.3 外置表单 考虑到动态表单的缺点(见上节),外置表单使用的更多. 外置表单的特点: 页面的原样显示 字段值的自动填 ...
- 2017.2.28 activiti实战--第六章--任务表单(一)动态表单
学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...
- 2017.2.21 activiti实战--第十三章--流量数据查询与跟踪(一)查询接口介绍及运行时数据查询
学习资料:<Activiti实战> 第十三章 流量数据查询与跟踪 本章讲解运行时与历史数据的查询方法.主要包含三种:标准查询,Native查询,CustomSql查询. 13.1 Quer ...
随机推荐
- 菜鸟之路——机器学习之非线性回归个人理解及python实现
关键词: 梯度下降:就是让数据顺着梯度最大的方向,也就是函数导数最大的放下下降,使其快速的接近结果. Cost函数等公式太长,不在这打了.网上多得是. 这个非线性回归说白了就是缩小版的神经网络. py ...
- no for & 100 Array & Uint8Array & Typed Arrays
no for & 100 Array http://hiluluke.cn/ bad function generate100Array() { var arr = new Array(100 ...
- 【bzoj4589】Hard Nim FWT
题目描述 Claris和NanoApe在玩石子游戏,他们有n堆石子,规则如下: 1. Claris和NanoApe两个人轮流拿石子,Claris先拿. 2. 每次只能从一堆中取若干个,可将一堆全取走, ...
- Python爬虫教程-21-xpath
本篇简单介绍 xpath 在python爬虫方面的使用,想要具体学习 xpath 可以到 w3school 查看 xpath 文档 Python爬虫教程-21-xpath 什么是 XPath? XPa ...
- 用session设置访问权限
在web.xml中 <session-config> <session-timeout>15</session-timeout> </session-conf ...
- this.$router.push() 在新窗口怎么打开
参考:https://blog.csdn.net/qyl_0316/article/details/86550361
- 【02】 Vue 之 数据绑定
2.1. 什么是双向绑定? Vue框架很核心的功能就是双向的数据绑定. 双向是指:HTML标签数据 绑定到 Vue对象,另外反方向数据也是绑定的.通俗点说就是,Vue对象的改变会直接影响到HTML的标 ...
- iOS笔记-(缓存机制的理解与实现)
(1)运行中的现象: 在iOS开发中,会遇到:同一NSURL被多次请求,会造成用户的流量浪费,程序的响应速度不够快.比如说,从服务器上请求一张图片,请求100次,下载的结果都是一样的. (2)解决方法 ...
- Sql Server 2005 中的row_number() 分页技术
原文发布时间为:2009-05-08 -- 来源于本人的百度文章 [由搬家工具导入] 在Sql Server 2005中,我们可以利用新增函数row_number()来更高效的实现分页存储 CRE ...
- 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---53
以下为阅读<Linux命令行与shell脚本编程大全 第3版>的读书笔记,为了方便记录,特地与书的内容保持同步,特意做成一节一次随笔,特记录如下: