activiti6.0學習筆記(二):核心api之TaskService

一、前言

本章繼續學習activiti6.0的核心api之TaskService??? 博客已經轉至簡書 (csdn寫博客太痛苦了)

二、activiti6.0的核心api之TaskService

??? 1、復制 testProcess.bpmn20.xml 流程定義文件,并將其改名為 testProcess-task.bpmn20.xml

??? 2、修改 testProcess-task.bpmn20.xml中內容如下:

<process id="myProcess" isClosed="false" isExecutable="true" name="測試流程" processType="None">

? <startEvent id="startevent1" name="Start"/>

? <endEvent id="endevent1" name="End"/>

? <userTask activiti:candidateUsers="張三,李四,王五" activiti:exclusive="true" id="test" name="用戶">

? ? <documentation>test task ${message}

? <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="test"/>

? <sequenceFlow id="flow2" sourceRef="test" targetRef="endevent1"/>

</process>

3、測試代碼如下:

/**

*

*? ? 測試taskService? Task為任務,通常就是我們所說的代辦任務

*? ? taskService作用:

*? ? ? 1、對用戶任務(UserTask)進行管理和流程的控制

*? ? ? ? a)Task對象的創建和刪除

*? ? ? ? b)查詢Task,并驅動Task節點完成執行

*? ? ? ? c)Task相關參數變量(variable)設置

*? ? ? 2、設置用戶任務(UserTask)的權限信息(擁有者,候選人,辦理人)

*? ? ? 3、針對用戶任務添加任務附件、任務評論和事件記錄

*? ? ? ? a)任務附件(Attachment)創建與查詢

*? ? ? ? b)任務評論(Comment)創建與查詢

*? ? ? ? c)事件記錄(Event)創建與查詢

* @author chaoge

* @since 2018/10/8 15:00

*/

public class TaskServiceTest {

private static final LoggerLOGGER = LoggerFactory.getLogger(RuntimeServiceTest.class);

? ? @Rule

? ? public ActivitiRulerule =new ActivitiRule();

? ? /**

? ? * 測試taskService設置和獲取變量,完成任務

? ? */

? ? @Test

? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")

public void testTaskService(){

Map variables = Maps.newHashMap();

? ? ? ? //可以在此處傳遞參數,在流程文件中通過${message}的方式接收參數,流程引擎會自動將其替換成設置的參數

? ? ? ? variables.put("message","測試信息");

? ? ? ? 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));

? ? ? ? //設置和獲取變量? 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));

? ? ? ? //當前流程節點設置完成并走向下一個節點,同時設置參數

? ? ? ? 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);

? ? }

/**

? ? * 其中有兩個字段:OWNER_,ASSIGNEE_

? ? * 這兩個字段的意義是:

? ? * 1,ASSIGNEE_(受理人):task任務的受理人,就是執行TASK的人,這個又分兩種情況(有值,NULL)

? ? * ? ? 1),有值的情況:XML流程里面定義的受理人,TASK會直接填入這個人;

? ? * ? ? 2),NULL:XML沒有指定受理人或者只指定了候選組;

? ? *? ? ? ? 沒有值的時候,可以使用簽收功能去指定受理人,就是候選組里面誰簽收誰就成了受理人

? ? * 2,OWNER_(委托人):受理人委托其他人操作該TASK的時候,受理人就成了委托人OWNER_,其他人就成了受理人ASSIGNEE_

*/

? ? @Test

? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")

public void testTaskServiceUser(){

Map variables = Maps.newHashMap();

? ? ? ? //可以在此處傳遞參數,在流程文件中通過${message}的方式接收參數,流程引擎會自動將其替換成設置的參數

? ? ? ? variables.put("message","測試信息");

? ? ? ? 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通常是流程的發起人

? ? ? ? //taskService.setAssignee(task.getId(),"張三");//設置代辦人,此種方式會覆蓋掉原來的代辦人,不推薦使用

? ? ? ? List taskList = taskService.createTaskQuery()

.taskCandidateUser("張三")//設置了辦理用戶是張三

? ? ? ? ? ? ? ? .taskUnassigned()//沒有設置代辦人

? ? ? ? ? ? ? ? .listPage(1, 100);

? ? ? ? try {

//當用戶已經指定一個代辦人的時候claim獲取是會報錯的

? ? ? ? ? ? taskList.forEach(task1->taskService.claim(task1.getId(),"張三"));//設置代辦人

? ? ? ? }catch (Exception e) {

LOGGER.error(e.getMessage(),e);

? ? ? ? }

//獲取任務相關的辦理人,包括owner、candidateUsers

? ? ? ? List identityLinks = taskService.getIdentityLinksForTask(task.getId());

? ? ? ? identityLinks.forEach(identityLink->LOGGER.info("identityLink = {}",identityLink));

? ? ? ? //獲取代辦人是張三的任務

? ? ? ? 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("張三的代辦任務task = {}",task1) );

? ? }

/**

? ? * 創建Attachment

*/

? ? @Test

? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")

public void testTaskAttachment(){

Map variables = Maps.newHashMap();

? ? ? ? //可以在此處傳遞參數,在流程文件中通過${message}的方式接收參數,流程引擎會自動將其替換成設置的參數

? ? ? ? variables.put("message","測試信息");

? ? ? ? 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)));

? ? }

/**

? ? * 創建Comment 查詢事件信息

? ? */

? ? @Test

? ? @Deployment(resources ="processes/testProcess-task.bpmn20.xml")

public void testTaskComment(){

Map variables = Maps.newHashMap();

? ? ? ? //可以在此處傳遞參數,在流程文件中通過${message}的方式接收參數,流程引擎會自動將其替換成設置的參數

? ? ? ? variables.put("message","測試信息");

? ? ? ? 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.addComment(task.getId(),task.getProcessInstanceId(),"這是我的評論");

? ? ? ? taskService.addComment(task.getId(),task.getProcessInstanceId(),"這還是我的評論");

? ? ? ? //查詢評論

? ? ? ? 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)));

? ? }

}

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,646評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,595評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,560評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,035評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,814評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,224評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,301評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,444評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,988評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,804評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,998評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,544評論 5 360
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,237評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,665評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,927評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,706評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,993評論 2 374

推薦閱讀更多精彩內容

  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,785評論 18 139
  • 一、前言 最近因為工作需要,需要搭建工作流平臺。經過研究后覺得使用activiti6.0作為平臺搭建技術。現將學...
    chaogge閱讀 1,884評論 0 2
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,859評論 0 1
  • 情, 在這里, 已被世間的塵埃湮沒, 殤, 在這里, 是那么的平常, 既無法愈合, 又不肯生長。 風吹不散的, 是...
    北月半反閱讀 304評論 10 5
  • 1 今天坐地鐵,我仔細觀察了一下周圍的乘客,他們都有一個共同的動作——看手機。 玩游戲,刷朋友圈,微博…… 有的人...
    非你莫屬陳鵬飛閱讀 260評論 0 0