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 ...
随机推荐
- 微信小程序--列表渲染
HTML: <view class="content" wx:for="{{oneList}}" wx:key = "id" bind ...
- POJ 1990:MooFest(树状数组)
题目大意:有n头牛,第i头牛声调为v[i],坐标为x[i],任意两值牛i,j沟通所需的花费为abs(x[i]-x[j])*max(v[i],v[j]),求所有牛两两沟通的花费. 分析: 我们将奶牛按声 ...
- tmux使用备忘
创建新的session tmux 查看已有session tmux ls 进入tmux后 默认快捷键前缀为Ctrl+b,可以通过配置文件来修改 从session中断开 C-b d 给session改名 ...
- 编译linux kernel及制作initrd ( by quqi99 )
编译linux kernel及制作initrd ( by quqi99 ) 作者:张华 发表于:2013-01-27 ( http://blog.csdn.net/quqi99 ) 运行一个l ...
- leetcode 21 list merge
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...
- Ubuntu 查看默认软件安装位置
tags: Linux 方法 1:在命令行输入:dpkg -L 软件包名: 方法 2:在/var/cache/apt/archives找的你安装程序的包,然后用gdebi-gtk+软件包名可以查看具体 ...
- Icon 转 Bitmap
HBITMAP IconToBitmap(HICON hIcon, SIZE* pTargetSize = NULL) { ICONINFO info = {}; if(hIcon == NULL | ...
- 2721: [Violet 5]樱花
2721: [Violet 5]樱花 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 547 Solved: 322[Submit][Status][D ...
- Codevs 1643 & 3027 线段覆盖
1643 题意 给定若干条线段,问最多可以安排多少条使得没有重合. 思路 贪心,同安排schedule,按结束时间早的排序. Code #include <bits/stdc++.h> # ...
- eclipse 同一个package 有的文件 中文乱码,有的文件中文正常
1.这是编码格式导致的. 先在对应包名上右击,选择属性,将包内所有的文件都设置为GBK格式, 然后查看每个文件,如果有乱码,则将这个文件的编码格式单独设为 UTF-8 2.有个项目使用百度语音做开发, ...