一嘀粱、前言
??????? 本章繼續(xù)學(xué)習(xí)activiti6.0的核心api之TaskService
二律适、TaskService
????? /**
*
*? ? 測(cè)試taskService? Task為任務(wù)盛霎,通常就是我們所說的代辦任務(wù)
*? ? taskService作用:
*? ? ? 1锦爵、對(duì)用戶任務(wù)(UserTask)進(jìn)行管理和流程的控制
*? ? ? ? a)Task對(duì)象的創(chuàng)建和刪除
*? ? ? ? b)查詢Task,并驅(qū)動(dòng)Task節(jié)點(diǎn)完成執(zhí)行
*? ? ? ? c)Task相關(guān)參數(shù)變量(variable)設(shè)置
*? ? ? 2肴甸、設(shè)置用戶任務(wù)(UserTask)的權(quán)限信息(擁有者坡疼,候選人控轿,辦理人)
*? ? ? 3缠诅、針對(duì)用戶任務(wù)添加任務(wù)附件哑蔫、任務(wù)評(píng)論和事件記錄
*? ? ? ? a)任務(wù)附件(Attachment)創(chuàng)建與查詢
*? ? ? ? b)任務(wù)評(píng)論(Comment)創(chuàng)建與查詢
*? ? ? ? c)事件記錄(Event)創(chuàng)建與查詢
*
*
* @author chaoge
* @since 2018/10/8 15:00
*/
public class TaskServiceTest {
private static final LoggerLOGGER = LoggerFactory.getLogger(RuntimeServiceTest.class);
? ? @Rule
? ? public ActivitiRulerule =new ActivitiRule();
? ? /**
? ? * 測(cè)試taskService設(shè)置和獲取變量钉寝,完成任務(wù)
? ? */
? ? @Test
? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")
public void testTaskService(){
Map variables = Maps.newHashMap();
? ? ? ? //可以在此處傳遞參數(shù),在流程文件中通過${message}的方式接收參數(shù)闸迷,流程引擎會(huì)自動(dòng)將其替換成設(shè)置的參數(shù)
? ? ? ? variables.put("message","測(cè)試信息");
? ? ? ? ProcessInstance myProcess =rule.getRuntimeService().startProcessInstanceByKey("myProcess",variables);
? ? ? ? TaskService taskService =rule.getTaskService();
? ? ? ? Task task = taskService.createTaskQuery().singleResult();
? ? ? ? LOGGER.info("task = {}",ToStringBuilder.reflectionToString(task,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("task name = {}",task.getName());
? ? ? ? LOGGER.info("task des = {}",task.getDescription());
? ? ? ? System.out.println("task =? " + ToStringBuilder.reflectionToString(task,ToStringStyle.JSON_STYLE));
? ? ? ? //設(shè)置和獲取變量? taskService.getVariables(task.getId())能獲取到流程變量和本地變量嵌纲,即第一種包含了第二種和第三種的變量
? ? ? ? Map taskServiceVariables = taskService.getVariables(task.getId());
? ? ? ? Map taskServiceVariablesLocal = taskService.getVariablesLocal(task.getId());
? ? ? ? Map processVariables =rule.getRuntimeService().getVariables(task.getExecutionId());
? ? ? ? LOGGER.info("taskServiceVariables = {}",ToStringBuilder.reflectionToString(taskServiceVariables,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("taskServiceVariablesLocal = {}",ToStringBuilder.reflectionToString(taskServiceVariablesLocal,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("processVariables = {}",ToStringBuilder.reflectionToString(processVariables,ToStringStyle.JSON_STYLE));
? ? ? ? //當(dāng)前流程節(jié)點(diǎn)設(shè)置完成并走向下一個(gè)節(jié)點(diǎn),同時(shí)設(shè)置參數(shù)
? ? ? ? Map variables2 = Maps.newHashMap();
? ? ? ? variables2.put("user1","chaoge");
? ? ? ? taskService.complete(task.getId(),variables2);
? ? ? ? Task task1 = taskService.createTaskQuery().taskId(task.getId()).singleResult();
? ? ? ? LOGGER.info("task1 = {}",task1);
? ? }
/**
? ? * 其中有兩個(gè)字段:OWNER_,ASSIGNEE_
? ? * 這兩個(gè)字段的意義是:
? ? * 1腥沽,ASSIGNEE_(受理人):task任務(wù)的受理人逮走,就是執(zhí)行TASK的人,這個(gè)又分兩種情況(有值今阳,NULL)
? ? * ? ? 1)师溅,有值的情況:XML流程里面定義的受理人,TASK會(huì)直接填入這個(gè)人盾舌;
? ? * ? ? 2)墓臭,NULL:XML沒有指定受理人或者只指定了候選組;
? ? *? ? ? ? 沒有值的時(shí)候妖谴,可以使用簽收功能去指定受理人起便,就是候選組里面誰簽收誰就成了受理人
? ? * 2,OWNER_(委托人):受理人委托其他人操作該TASK的時(shí)候窖维,受理人就成了委托人OWNER_,其他人就成了受理人ASSIGNEE_
*/
? ? @Test
? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")
public void testTaskServiceUser(){
Map variables = Maps.newHashMap();
? ? ? ? //可以在此處傳遞參數(shù)妙痹,在流程文件中通過${message}的方式接收參數(shù)铸史,流程引擎會(huì)自動(dòng)將其替換成設(shè)置的參數(shù)
? ? ? ? variables.put("message","測(cè)試信息");
? ? ? ? ProcessInstance myProcess =rule.getRuntimeService().startProcessInstanceByKey("myProcess",variables);
? ? ? ? TaskService taskService =rule.getTaskService();
? ? ? ? Task task = taskService.createTaskQuery().singleResult();
? ? ? ? LOGGER.info("task = {}",ToStringBuilder.reflectionToString(task,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("task des = {}",task.getDescription());
? ? ? ? taskService.setOwner(task.getId(),"user1");//owner通常是流程的發(fā)起人
? ? ? ? //taskService.setAssignee(task.getId(),"張三");//設(shè)置代辦人,此種方式會(huì)覆蓋掉原來的代辦人怯伊,不推薦使用
? ? ? ? List taskList = taskService.createTaskQuery()
.taskCandidateUser("張三")//設(shè)置了辦理用戶是張三
? ? ? ? ? ? ? ? .taskUnassigned()//沒有設(shè)置代辦人
? ? ? ? ? ? ? ? .listPage(1, 100);
? ? ? ? try {
//當(dāng)用戶已經(jīng)指定一個(gè)代辦人的時(shí)候claim獲取是會(huì)報(bào)錯(cuò)的
? ? ? ? ? ? taskList.forEach(task1->taskService.claim(task1.getId(),"張三"));//設(shè)置代辦人
? ? ? ? }catch (Exception e) {
LOGGER.error(e.getMessage(),e);
? ? ? ? }
//獲取任務(wù)相關(guān)的辦理人琳轿,包括owner、candidateUsers
? ? ? ? List identityLinks = taskService.getIdentityLinksForTask(task.getId());
? ? ? ? identityLinks.forEach(identityLink->LOGGER.info("identityLink = {}",identityLink));
? ? ? ? //獲取代辦人是張三的任務(wù)
? ? ? ? List tasks = taskService.createTaskQuery().taskAssignee("張三").listPage(0, 100);
? ? ? ? tasks.forEach(task1 ->taskService.complete(task1.getId()));
? ? ? ? List tasks2 = taskService.createTaskQuery().taskAssignee("張三").listPage(0, 100);
? ? ? ? tasks2.forEach(task1 ->LOGGER.info("張三的代辦任務(wù)task = {}",task1) );
? ? }
/**
? ? * 創(chuàng)建Attachment
*/
? ? @Test
? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")
public void testTaskAttachment(){
Map variables = Maps.newHashMap();
? ? ? ? //可以在此處傳遞參數(shù)耿芹,在流程文件中通過${message}的方式接收參數(shù)崭篡,流程引擎會(huì)自動(dòng)將其替換成設(shè)置的參數(shù)
? ? ? ? variables.put("message","測(cè)試信息");
? ? ? ? ProcessInstance myProcess =rule.getRuntimeService().startProcessInstanceByKey("myProcess",variables);
? ? ? ? TaskService taskService =rule.getTaskService();
? ? ? ? Task task = taskService.createTaskQuery().singleResult();
? ? ? ? LOGGER.info("task = {}",ToStringBuilder.reflectionToString(task,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("task des = {}",task.getDescription());
? ? ? ? taskService.createAttachment("url",task.getId(),task.getProcessInstanceId(),"name","desc","/url/test.png");
? ? ? ? List taskAttachments = taskService.getTaskAttachments(task.getId());
? ? ? ? taskAttachments.forEach(taskAttach->LOGGER.info("taskAttach = {}",ToStringBuilder.reflectionToString(taskAttach,ToStringStyle.JSON_STYLE)));
? ? }
/**
? ? * 創(chuàng)建Comment 查詢事件信息
? ? */
? ? @Test
? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")
public void testTaskComment(){
Map variables = Maps.newHashMap();
? ? ? ? //可以在此處傳遞參數(shù),在流程文件中通過${message}的方式接收參數(shù)吧秕,流程引擎會(huì)自動(dòng)將其替換成設(shè)置的參數(shù)
? ? ? ? variables.put("message","測(cè)試信息");
? ? ? ? ProcessInstance myProcess =rule.getRuntimeService().startProcessInstanceByKey("myProcess",variables);
? ? ? ? TaskService taskService =rule.getTaskService();
? ? ? ? Task task = taskService.createTaskQuery().singleResult();
? ? ? ? LOGGER.info("task = {}",ToStringBuilder.reflectionToString(task,ToStringStyle.JSON_STYLE));
? ? ? ? LOGGER.info("task des = {}",task.getDescription());
? ? ? ? //添加評(píng)論
? ? ? ? taskService.addComment(task.getId(),task.getProcessInstanceId(),"這是我的評(píng)論");
? ? ? ? taskService.addComment(task.getId(),task.getProcessInstanceId(),"這還是我的評(píng)論");
? ? ? ? //查詢?cè)u(píng)論
? ? ? ? List taskComments = taskService.getTaskComments(task.getId());
? ? ? ? taskComments.forEach(taskComment->LOGGER.info("taskComment = {}",ToStringBuilder.reflectionToString(taskComment,ToStringStyle.JSON_STYLE)));
? ? ? ? //查詢事件
? ? ? ? List taskEvents = taskService.getTaskEvents(task.getId());
? ? ? ? taskEvents.forEach(taskEvent->LOGGER.info("taskEvent = {}",ToStringBuilder.reflectionToString(taskEvent,ToStringStyle.JSON_STYLE)));
? ? }