学习资料:《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实战--第五章--用户与组及部署管理(一)用户与组的更多相关文章

  1. 2017.2.28 activiti实战--第五章--用户与组及部署管理(三)部署流程及资源读取

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(三)部署流程及资源读取 内容概览:如何利用API读取已经部署的资源,比如读取流程定义的XML文件,或流程对应的图片文件. 以 ...

  2. 2017.2.28 activiti实战--第五章--用户与组及部署管理(二)部署流程资源

    学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种 ...

  3. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(二)简单示例

    学习资料:<Activiti实战> 第一章 搭建Activiti开发环境及简单示例 2.5 简单流程图及其执行过程 (1)leave.bpmn 后缀名必须是bpmn.安装了activiti ...

  4. 2017.2.20 activiti实战--第二章--搭建Activiti开发环境及简单示例(一)搭建开发环境

    学习资料:<Activiti实战> 第一章 认识Activiti 2.1 下载Activiti 官网:http://activiti.org/download.html 进入下载页后,可以 ...

  5. 2017.2.20 activiti实战--第一章--认识Activiti

    学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis ...

  6. 2017.2.28 activiti实战--第七章--Spring容器集成应用实例(五)普通表单

    学习资料:<Activiti实战> 第七章  Spring容器集成应用实例(五)普通表单 第六章中介绍了动态表单.外置表单.这里讲解第三种表单:普通表单. 普通表单的特点: 把表单内容写在 ...

  7. 2017.2.28 activiti实战--第六章--任务表单(二)外置表单

    学习资料:<Activiti实战> 第六章 任务表单(二)外置表单 6.3 外置表单 考虑到动态表单的缺点(见上节),外置表单使用的更多. 外置表单的特点: 页面的原样显示 字段值的自动填 ...

  8. 2017.2.28 activiti实战--第六章--任务表单(一)动态表单

    学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. ...

  9. 2017.2.21 activiti实战--第十三章--流量数据查询与跟踪(一)查询接口介绍及运行时数据查询

    学习资料:<Activiti实战> 第十三章 流量数据查询与跟踪 本章讲解运行时与历史数据的查询方法.主要包含三种:标准查询,Native查询,CustomSql查询. 13.1 Quer ...

随机推荐

  1. linux系统带宽监测脚本

    服务器可能经常遇到服务器出带宽跑满,不知如何查询被哪个进程占用的情况,有一款开源的英文软件iftop功能比较强大可以查询相关信息,可能刚接触linux系统的朋友不太会使用,在此写了一个功能比较简单无需 ...

  2. 【Luogu】P2485计算器(快速幂,exgcd和Bsgs模板)

    题目链接 题目描述非常直接,要求你用快速幂解决第一问,exgcd解决第二问,bsgs解决第三问. emmmm于是现学bsgs 第二问让求最小整数解好烦啊…… 假设我们要求得方程$ax+by=c(mod ...

  3. Markdown语法图解

    Markdown语法图解 文章目录 快捷键 基本语法 对字体设置斜体.粗体.删除线 分级标题 链接 分割线 代码块 引用 列表 表格 常用技巧 换行 缩进字符 如何打出一些特殊符号 字体.字号与颜色 ...

  4. CF 964C Alternating Sum

    给定两正整数 $a, b$ .给定序列 $s_0, s_1, \dots, s_n,s_i$ 等于 $1$ 或 $-1$,并且已知 $s$ 是周期为 $k$ 的序列并且 $k\mid (n+1)$,输 ...

  5. drools6

    <dependency> <groupId>org.drools</groupId> <artifactId>drools-core</artif ...

  6. git本地仓库关联远程仓库

    1. git init 2. git add . 3. git commit -am "###"      -------以上3步只是本地提交 4.git remote add o ...

  7. 0-Broadcast机制原理简要介绍

    Broadcast机制简要介绍 来源: http://blog.csdn.net/luoshengyang/article/details/6730748 导语 广播机制在Android系统中,也不算 ...

  8. 2017-2018-2 20179204《网络攻防实践》第十三周学习总结 python实现国密算法

    国密商用算法是指国密SM系列算法,包括基于椭圆曲线的非对称公钥密码SM2算法.密码杂凑SM3算法.分组密码SM4算法,还有只以IP核形式提供的非公开算法流程的对称密码SM1算法等. 第1节 SM2非对 ...

  9. nginx进行项目域名配置时提示Job for nginx.service failed

    ps aux | grep nginx /bin/systemctl stop nginx.service /bin/systemctl start nginx.service /bin/system ...

  10. synchronous interrupt and asynchronous interrupt

    Asynchronous interrupt 中斷请求信号来自CM3内核的外面,来自各种片上外设和外扩的外设,对CM3来说是"异步"的: e.g. usb otg device S ...