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());
上一篇:管理Linux服务器的用户和组(续篇)


下一篇:ansible中文手册-基础模块使用