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 ...
随机推荐
- hnust 搬书
问题 G: 搬书 时间限制: 1 Sec 内存限制: 128 MB提交: 576 解决: 49[提交][状态][讨论版] 题目描述 XCQ队长要退役啦,由于队长常年刷题,机位上摆着各类算法书,一个 ...
- [oldboy-django][2深入django]学生管理(Form)-- 添加(美化Form表单:通过form给前端标签添加属性)
1 在student_list添加一个a标签, <p><a href="/app01/add_student" class="btn btn-prima ...
- Linux常用命令与基本概念
复制 文件的复制 cp 源文件 目标文件 文件夹的复制 cp -r 源文件夹 目标文件夹 删除 删除文件 rm 文件名 删除文件夹 rm -rf 文件夹 查看文件类型 file 文件名 压缩与解压 z ...
- 【距离GDOI:141天】 滚入数位DP的坑
作为博客园的第一篇...我都不知道要写什么了 ... 其实今天很没状态,就当吐槽吧... 嗯,被黄神带去写treap+可持久化线段树,然后在可持久化的删除上面跪了两天,真的是一跪不起.我已经连续多久没 ...
- BZOJ1566 [NOI2009]管道取珠 【dp】
题目 输入格式 第一行包含两个整数n, m,分别表示上下两个管道中球的数目. 第二行为一个AB字符串,长度为n,表示上管道中从左到右球的类型.其中A表示浅色球,B表示深色球. 第三行为一个AB字符串, ...
- C++ Contest Code preprocessor
大概可以拿来方便拉模板 变量名.语法都是瞎整的你感觉有用随便用好了.. #include<bits/stdc++.h> using namespace std; map<string ...
- cf 701 E - Connecting Universities
Descrition 给你一颗\(n\le 2*10^5\)个点的树, 有\(2*k(2k\le n)\)座大学座落在点上 (任二大学不在同一个点) 求一种两两匹配的方案, 使得距离和最大 即\[ma ...
- Codevs 搜索刷题 集合篇
2919 选择题 时间限制: 1 s 空间限制: 16000 KB 题目等级 : 黄金 Gold 题目描述 Description 某同学考试,在N*M的答题卡上写了A,B,C,D四种答案. 他做完了 ...
- 【HDOJ5533】Dancing Stars on Me(计算几何)
题意:给定二维平面上的n个整点,问它们是否都在正n边形的定点上 n<=100,abs(x[i]),abs(y[i])<=1e4 思路:队友做的,抱大腿 可以发现只有n=4时顶点有可能都是整 ...
- SQL优化 ASP.NET ADO.NET
原文发布时间为:2009-08-26 -- 来源于本人的百度文章 [由搬家工具导入] 总的考虑方向 1) 根据数据使用的方式来设计数据访问层 2) 缓存数据,避免不必要的操 ...