下文先介紹下使用者任務的辦理相關操作
使用者任務分類:
分為4中狀態:未簽收/待辦理、已簽收/辦理中、執行中/辦理中、已完成/已辦結
首先,我們要了解下 taskservice 這個服務的作用:
從類 org.activiti.engine.impl.serviceimpl 繼承的字段
所有已實現的介面:taskservice
taskservice taskservice = processengine.gettaskservice();
這邊定義了幾個通用的變數:
string userid = "ypp";
string usergroup = new string["ypp1","ypp101"];
那麼流程開啟之後,如何能讓下乙個辦理人取得待辦任務呢?
通過下面幾種的方法,將取得指定簽收人/辦理人的待辦資料
單人待簽收/待辦理
listtasks = taskservice.createtaskquery().taskcandidateuser(userid).list();
使用者組待簽收/待辦理
listtasks = taskservice.createtaskquery().taskcandidategroup(usergroup).list();
進行簽收操作,也就是將要接收辦理這個任務
這邊可以使用迴圈,也可以通過其他方法,常用的是先載入乙個任務待辦列表到頁面上,簽收任務傳遞後台乙個taskid
task.getid() = taskid
// 完成簽收這個時候就任務task的assignee屬性就有了值
taskservice.claim(task.getid(), userid);
已經簽收過的任務列表,某種意義上我理解為真正的辦理人
listtasks = taskservice.createtaskquery().taskassignee(userid).list();
通過 1、未簽收/待辦理 中取得需要辦理的任務task之後
// 呼叫 task.getid() = taskid 完成任務的辦理,taskservice服務自動流轉到下乙個辦理節點
taskservice.complete(task.getid());
// taskservice.complete()方法 提供了過載,提供了3種方式供你選擇
complete(string taskid)
complete(string taskid, mapvariables)
complete(string taskid, mapvariables, boolean localscope)
如果更深的了解如何流轉的,可以檢視原始碼
任務並不一定要先簽收再辦理,可以直接到待辦理中,而不是待簽收中
可以把
taskservice.claim(task.getid(), userid);
替換為
setassignee(string taskid, string userid);
經過以上步驟,任務已經在辦理中狀態了。
任務的已完成(呼叫過complete方法)是指當前待辦的任務狀態,而非整個流程例項的完成狀態
流程中資料使用到 historyservice 服務
查詢指定使用者發起的流程 (流程歷史 使用者發起 )
下面的3種方法:
historyservice.createhistoricprocessinstancequery()
.finished()
.startedby(name)
.orderbyprocessinstancestarttime()
.desc()
.listpage(firstresult, maxresults);
查詢指定使用者參與的流程資訊 (流程歷史 使用者參與 )
historyservice.createhistoricprocessinstancequery()
.involveduser(name)
.orderbyprocessinstancestarttime()
.desc()
.listpage(firstresult, maxresults);
查詢指定流程的任務流轉路徑 (流程歷史 任務流轉路經)
historyservice.createhistorictaskinstancequery()
.processinstanceid(processinstanceid)
.orderbyhistorictaskinstanceendtime()
.asc()
.list();
檢視流程是否完整的執行完畢方法也有好幾種:
for (historicactivityinstance hai : hais)
//檢視act_ru_task表
long long = taskservice.createtaskquery().processinstanceid("processinstanceid").taskid("taskid").count();
//如果long為空,那麼也是辦結了
taskservice.createtaskquery()查詢條件是可選的
可以是taskservice.createtaskquery().processinstanceid("processinstanceid");
taskservice.createtaskquery().taskid("taskid");
或者其他更多條件
流程在流轉中對於當前辦理人/組和簽收人/組來說,都是可以進行動態調整變化的
需要對程式進行特殊處理,新增監聽或者其他方法
得到使用者組待簽收
taskservice taskservice = processengine.gettaskservice();
單人待簽收
listtasks = taskservice.createtaskquery().taskcandidateuser(userid).list();
listtasks = taskservice.createtaskquery().taskcandidategroup(usergroup).list();
for (task task : tasks)
//得到使用者待辦
tasks = taskservice.createtaskquery().taskassignee(userid).list();
for (task task : tasks)
//順便檢視歷史看看
historyservice historyservice = processengine.gethistoryservice();
historicprocessinstance historicprocessinstance = historyservice.createhistoricprocessinstancequery()
.processinstanceid(procid)
.singleresult();
Activiti使用者任務分配
原始出處 作者資訊和本宣告。否則將追究法律責任。一 前言 上篇博文 activiti工作流引擎使用者管理 中已介紹了如何自定義自己的使用者管理模組。然而困惱大多數新手的另乙個問題 如何將任務分配給有層級關係的組織結構使用者呢?例如,我只想把任務分配給我上級部門的領導審批,而上級部門的任務又只分配給指...
activiti5使用者任務分配
使用者任務分配辦理人 1.使用者任務可以直接分配給乙個使用者,這可以通過humanperformer元素定義。humanperformer定義需要乙個 resourceassignmentexpression 來實際定義使用者 eg kermit 任務只有乙個使用者的時候在activiti中,使用者...
Activiti工作流之任務
回顧 activiti工作流之簡介與環境搭建 activiti工作流之流程部署和相關操作 activiti工作流之任務的執行 查詢 完成 activiti工作流之流程變數 activiti工作流之歷史查詢 activiti工作流之流程分支 activiti工作流之閘道器 11張表 select fr...