assignee:任務執行人,設置系統中的“登錄名”(loginName)。
candidateUsers:任務執行人,可以填寫多個。
candidateGroups:任務執行組,可以填寫多個,設置系統中的“角色英文名(enname)”。
assignee和candidateUsers的區別是:assignee不需要簽收任務,直接可執行任務;candidateUsers為競爭方式分配任務,被指定人待辦中都有壹條任務,誰先簽收誰就獲得任務的執行權。
taskService.setAssignee(String taskId, String userId);
taskService.claim(String taskId, String userId);
taskService.setOwner(String taskId, String userId);
關於上面三個方法的區別:
setAssignee和claim兩個的區別是在認領任務時,claim會檢查該任務是否已經被認領,如果被認領則會拋出ActivitiTaskAlreadyClaimedException 而setAssignee不會進行這樣的檢查。其他方面兩個方法效果壹致。
setOwner和setAssignee的區別在於
setOwner實在代理任務時使用,代表著任務的歸屬者,而這時,setAssignee代表的時代理辦理者,
舉個例子來說,公司總經理現在有個任務taskA,去核實壹下本年度的財務報表,他現在又很忙沒時間,於是將該任務委托給其助理進行辦理,此時,就應該這麽做:
taskService.setOwner(taskA.getId(), 總經理.getId());
taskService.setAssignee/claim(taskA.getId(), 助理.getId());
act_hi_taskinst表兩個字段:
DELEGATION_和OWENER_
DELEGATION_值變化為PENDING,表示此任務為正在執行的委托任務;
DELEGATION_值變化為 RESOLVED,表示此任務為被解決的委托任務;
所以任務在被委托人執行時必須
taskService.resolveTask(task.getId(),taskVariables);//解決委托
taskService.complete(task.getId(), taskVariables);//完成任務
否則容易報錯A delegated task cannot be completed, but should be resolved instead.
OWENR_字段設置用於查詢委任人的委托任務
在執行taskService.addComment前,需要設置批註的所屬人Authentication.setAuthenticatedUserId(userId);
在流程啟動實例之前,設置啟動者identityService.setAuthenticatedUserId(userId);
然後流程設計模型可在流程開始節點設置變量,以供之後的環節使用
級聯刪除會把流程實例流程歷史全部物理清空。
非級聯刪除,必須保證沒有流程實例
二者雖然都能查詢到任務實例。但是前者只能查詢歷史環節,就算act_hi_taskinst有數據未完成當前環節也不能查出