Activiti之對使用者任務簽收辦理操作

2021-08-28 06:44:11 字數 3730 閱讀 3383

下文先介紹下使用者任務的辦理相關操作

使用者任務分類:

分為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...