學習資料:《Activiti實戰》
第五章 用戶與組及部署管理(一)用戶與組
內容概覽:講解activiti中內置的一套用戶、組的關系,以及如何通過API添加、刪除、查詢。
5.1 用戶與組
5.1.1 用戶
1 public class IdentityServiceTest{ 2 @Rule 3 public ActivitiRule ar = new ActivitiRule();//使用默認的acitiviti.cfg.xml作為參數,當創建activitirule時,會自動創建引擎對象processEngine。 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("yanhonglei@gamil.com"); 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作為參數,當創建activitirule時,會自動創建引擎對象processEngine。 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("yanhonglei@gamil.com"); 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中的用戶與組
(1)測試場景及測試模板
假設一個流程圖示意圖為:開始--->用戶任務--->結束
共用的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>
共用的測試代碼模板如下:即此時有兩個用戶,位於組deptLeader里。
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 //henryyan示例,jackchen的略 12 User user = identityService.newUser("henryyan"); 13 user.setFirstName("Henry"); 14 user.setLastName("yan"); 15 user.setEmail("yanhonglei@gmail.com"); 16 identityService.saveUser(user); 17 //henryyan示例,jackchen的略 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 }
(2)候選組
修改上面的UserTask如下:屬於這個組的用戶都可以簽收任務。一旦有一個人簽收,其他人的用戶任務里就沒有這個任務了。
1 <userTask id="studyUserAndGroupInUserTask" 2 name="學習用戶與組在用戶任務中的應用" 3 activiti:candidateGroups="deptLeader"> 4 </userTask>
(3)候選人
修改上面的UserTask如下:列出來的用戶都可以簽收任務。一旦有一個人簽收,其他人的用戶任務里就沒有這個任務了。
1 <userTask id="studyUserAndGroupInUserTask" 2 name="學習用戶與組在用戶任務中的應用" 3 activiti:candidateUsers="jackchen,henryyan"> 4 </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 }
綜上,主要涉及的方法:
1 主要涉及到的方法: 2 //創建、保存和刪除用戶/組 3 User user/Group group = identityService.newUser("userid")/newGroup("groupid"); 4 identityService.saveUser("userid")/saveGroup("groupid"); 5 identityService.deleteUser("userid")/deleteGroup("groupid"); 6 7 //查詢User 8 User user = identityService.createUserQuery().userId("userid").singleResult(); 9 List<User> userList = identityService.createUserQuery().userId("userid").list(); 10 //查詢Group 11 Group group = identityService.createGroupQuery().groupId("groupid").singleResult(); 12 List<Group> groupList = identityService.createGroupQuery().groupId("groupid").list(); 13 14 //創建、查詢關系 15 identityService.createMembership("userid",groupid); 16 User userInGroup = identityService.createUserQuery().memberOfGroup("deptLeader").singleResult(); 17 Group groupContainsHenryyan = identityService.createGroupQuery().groupMember("henryyan").singleResult(); 18 19 //查詢用戶擁有的任務,簽收及完成 20 Task task = taskService.createTaskQuery().taskCandidateUser("userid").singleResult(); 21 List<Task> taskList = taskService.createTaskQuery().taskCandidateUser("userid").list(); 22 taskService.claim(task.getId(),"userid"); 23 taskService.complete(task.getId());
