2017.2.20 《activiti实战第五章--用户与组及部署管理》(一)用户与组

学习资料:《Activiti实战》

第五章 用户与组及部署管理(一)用户与组

内容概览:讲解activiti中内置的一套用户、组的关系,以及如何通过API添加、删除、查询。

5.1 用户与组

5.1.1 用户

 1 public class IdentityServiceTest{
 2     @Rule
 3     public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数
 4
 5     @Test
 6     public void testUser() throws Exception(){
 7         IdentityService is = ar.getIdentityService();
 8
 9         User user = is.newUser("henryyan");
10         user.setFirstName("Henry");
11         user.setLastName("yan");
12         user.setEmail("[email protected]");
13
14         is.saveUser(user);
15
16         User userInDb = is.createUserQuery().userId("henryyan").singleResult();
17         assertNotNull(userInDb);
18
19         is.deleteUser("henryyan");
20         userInDb = is.createUserQuery().userId("henryyan").singleResult();
21         assertNull(userInDb);
22     }
23 }

5.1.2 组

 1 public class IdentityServiceTest{
 2     @Rule
 3     public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数
 4
 5     @Test
 6     public void testGroup() throws Exception(){
 7         IdentityService is = ar.getIdentityService();
 8
 9         Group group = is.newGroup("deptLeader");
10         group .setName("部门领导");
11         group .setType("assignment");
12
13         is.saveGroup(group);
14
15         List<Group> groupList = is.createGroupQuery().groupId("deptLeader").list();
16         assertEquals(1,groupList.size());
17
18         is.deleteGroup("deptLeader");
19         groupList = is.createGroupQuery().groupId("deptLeader").list();
20         assertEquals(0,groupList.size());
21     }
22 }

5.1.3 用户与组的关系

 1 public class IdentityServiceTest{
 2     @Rule
 3     public ActivitiRule ar = new ActivitiRule();//使用默认的acitiviti.cfg.xml作为参数
 4
 5     @Test
 6     public void testUserAndGroupMembership() throws Exception(){
 7         IdentityService is = ar.getIdentityService();
 8
 9         Group group = is.newGroup("deptLeader");
10         group .setName("部门领导");
11         group .setType("assignment");
12         is.saveGroup(group);
13
14         User user = is.newUser("henryyan");
15         user.setFirstName("Henry");
16         user.setLastName("yan");
17         user.setEmail("[email protected]");
18         is.saveUser(user);
19
20         is.createMembership("henryyan","deptLeader");
21
22         //查询组deptLeader所拥有的用户
23         User userInGroup = is.createUserQuery().memberOfGroup("deptLeader").singleResult();
24         assertNotNull(userInGroup);
25         assertEquals("henryyan",userInGroup.getId());
26
27         //查询用户henryyan所属的组
28         Group groupContainsHenryyan = is.createGroupQuery().groupMember("henryyan").singleResult();
29         assertNotNull(groupContainsHenryyan);
30         assertEquals("deptLeader",groupContainsHenryyan.getId());
31     }
32  }

5.1.4 UserTask中的用户与组

假设一个流程图示意图如下:

开始--->用户任务--->结束

共用的xml文件如下:

1 <process id="userAndGroupInUserTask" name="userAndGroupInUserTask">
2     <startEvent id="startEvent1" name="Start"></startEvent>
3     <userTask id="studyUserAndGroupInUserTask" name="学习用户与组在用户任务中的应用"></userTask>
4     <sequenceFlow id="flow1" name="" sourceRef="startEvent1" targetRef="studyUserAndGroupInUserTask"></sequenceFlow>
5     <endEvent id="endEvent1" name="End"></endEvent>
6     <sequenceFlow id="flow2" name="" sourceRef="studyUserAndGroupInUserTask" targetRef="endEvent1"></sequenceFlow>
7 </process>

共用的测试代码如下:

 1 public class UserAndGroupInUserTaskTest{
 2     @Before
 3     public void setup() throws Exception(){
 4         //初始化7个Service
 5         super.setUp();
 6
 7         Group group = identityService.newGroup("deptLeader");
 8         group .setName("部门领导");
 9         group .setType("assignment");
10         identityService.saveGroup(group);
11
12         User user = identityService.newUser("henryyan");
13         user.setFirstName("Henry");
14         user.setLastName("yan");
15         user.setEmail("[email protected]");
16         identityService.saveUser(user);
17
18         identityService.createMembership("henryyan","deptLeader");
19     }
20
21     @After
22     public void afterInvokeTestMethod() throws Exception(){
23         identityService.deleteMembership("henryyan","deptLeader");
24         identityService.deleteGroup("deptLeader");
25         identityService.deleteUser("henryyan");
26     }
27     ...
28  }

(1)候选组

修改上面的UserTask如下:属于这个组的用户都可以签收任务。一旦有一个人签收,其他人的用户任务里就没有这个任务了。

1 <userTask id="studyUserAndGroupInUserTask"
2      name="学习用户与组在用户任务中的应用"
3      activiti:candidateGroups="deptLeader">
4 </userTask>

在类userAndGroupTestInUserTask添加方法如下:

(2)候选人

时间: 2024-12-24 06:35:51

2017.2.20 《activiti实战第五章--用户与组及部署管理》(一)用户与组的相关文章

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

学习资料:<Activiti实战> 第五章 用户与组及部署管理(二)部署流程资源 内容概览:讲解流程资源的读取与部署. 5.2 部署流程资源 5.2.1 流程资源 流程资源常用的有以下几种: 1 流程定义文件:拓展名为bpmn20.xml和bpmn 2 流程定义的图片:拓展名为PNG 3 表单文件:拓展名为form 4 规则文件:拓展名为drl 部署流程资源的时候,要注意一点: 引擎会根据不同的拓展名进行不同的处理.bpmn或bpmn20.xml类型的文件,会在ACT_RU_PROCDEF(流

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

学习资料:<Activiti实战> 第一章 认识Activiti 内容概览:讲解activiti的特点.接口概览.架构等基本信息. 1.3 Activiti的特点 1.使用mybatis 2.原生支持spring,可以轻松集成spring 3.引擎的Service接口 Activiti引擎提供了7大Service接口,均通过processEngine获取,支持链式API风格. Service接口 作用 RepositoryService 流程仓库服务,管理流程仓库,比如部署.删除.读取流程资源

2017.2.21 activiti实战--第七章--Activiti与容器集成

学习资料:<Activiti实战> 第七章 Activiti与容器集成 本章讲解activiti-spring可以做的事情,如何与现有系统集成,包含bean的注入.统一事务管理等. 7.1 流程引擎工厂 7.1.1 ProcessEngine 创建processEngine的方法有三种: 1 通过配置文件 2 测试中通过ActivitiRule 3 通过ProcessEngines类 7.1.2 ProcessEngineFactory 与spring集成的目的有两个: 1 通过spring统

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

学习资料:<Activiti实战> 第六章 任务表单(一)动态表单 内容概览:本章要完成一个OA(协同办公系统)的请假流程的设计,从实用的角度,讲解如何将activiti与业务紧密相连. 第四章中讲解了两种表单:动态表单和外置表单的区别.这里将使用不同的表单来完成相同的功能. 1 动态表单:<activiti:formProperty> 2 外置表单:<activiti:formKey>

机器学习实战第五章Logistic回归

def gradAscent(dataMatIn, classLabels): dataMatrix = mat(dataMatIn) #convert to NumPy matrix labelMat = mat(classLabels).transpose() #convert to NumPy matrix m,n = shape(dataMatrix) alpha = 0.001 maxCycles = 500 weights = ones((n,1)) for k in range(m

第五章:输入输出(IO)管理

 I/O设备概念: 指计算机内部除中央处理器和内存之外的所有设备,通常也称为外部设备.  I/O设备分类:   ·按交互对象分类: ·人机交互设备 ·与计算机或其他电子设备交互的设备 ·计算机间的同信设备     ·按交互方向分类: ·输入(可读) ·输出(可写) ·输入/输出(可读写)    ·按外设特性分类: ·使用特性 ·数据传输率 ·信息组织特性  I/O控制方式: ·程序访问控制方式 ·中断控制方式 ·DMA方式(直接存储器寻址方式):在内存中进行数据的搬运 ·通道方式(代表:USB)

oracle基本语句(第五章、数据库逻辑存储结构管理)

1.使用SYS用户以SYSDBA身份登录到SQL Plus,使用视图V$TABLESPACE查看表空间信息 SELECT * FROM V$TABLESPACE; 2.查看视图DBA_TABLESPACES查看所有表空间的属性和在线状态 SELECT TABLESPACE_NAME, CONTENTS, STATUS FROM DBA_TABLESPACES;--表空间名,表空间内容,表空间状态 3.其他(略) 4.创建表空间 CREATE TABLESPACE <表空间名> DATAFILE

分享本书《Activiti实战》和几个工作流的链接

现在搞工作流的,开源的很多都用Activiti,但相关的中文书其实不多,在当当上找到了一本,暂时没下载到pdf盗版,看了目录不错,特别从试读章节了解了历史,所以分享一下. java 工作流开发框架比较 http://blog.csdn.net/chinarenzhou/article/details/7679148 纵观jBPM:从jBPM3到jBPM5以及Activiti5 http://www.infoq.com/cn/articles/rh-jbpm5-activiti5 工作流引擎Act

《Spring实战》学习笔记-第五章:构建Spring web应用

之前一直在看<Spring实战>第三版,看到第五章时发现很多东西已经过时被废弃了,于是现在开始读<Spring实战>第四版了,章节安排与之前不同了,里面应用的应该是最新的技术. 本章中,将会接触到Spring MVC基础,以及如何编写控制器来处理web请求,如何通明地绑定请求参数到业务对象上,同时还可以提供数据校验和错误处理的功能. Spring MVC初探 跟踪Spring MVC请求 在请求离开浏览器时,会带有用户所请求内容的信息,例如请求的URL.用户提交的表单信息. 请求旅