Activiti 學習筆記 小結
/**更新請假狀態,啟動流程例項,讓啟動的流程例項關聯業務*/
@Override
public void saveStartProcess(WorkflowBean workflowBean) {
//1:獲取請假單ID,使用請假單ID,查詢請假單的物件LeaveBill
Long id = workflowBean.getId();
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
//2:更新請假單的請假狀態從0變成1(初始錄入-->稽核中)
leaveBill.setState(1);
//3:使用當前物件獲取到流程定義的key(物件的名稱就是流程定義的key)
String key = leaveBill.getClass().getSimpleName();
/**
* 4:從Session中獲取當前任務的辦理人,使用流程變數設定下一個任務的辦理人
* inputUser是流程變數的名稱,
* 獲取的辦理人是流程變數的值
*/
Map<String, Object> variables = new HashMap<String,Object>();
variables.put("inputUser", SessionContext.get().getName());//表示惟一使用者
/**
* 5: (1)使用流程變數設定字串(格式:LeaveBill.id的形式),通過設定,讓啟動的流程(流程例項)關聯業務
(2)使用正在執行物件表中的一個欄位BUSINESS_KEY(Activiti提供的一個欄位),讓啟動的流程(流程例項)關聯業務
*/
//格式:LeaveBill.id的形式(使用流程變數)
String objId = key+"."+id;
variables.put("objId", objId);
//6:使用流程定義的key,啟動流程例項,同時設定流程變數,同時向正在執行的執行物件表中的欄位BUSINESS_KEY新增業務資料,同時讓流程關聯業務
runtimeService.startProcessInstanceByKey(key,objId,variables);
}
/**二:已知任務ID,查詢ProcessDefinitionEntiy物件,從而獲取當前任務完成之後的連線名稱,並放置到List<String>集合中*/
@Override
public List<String> findOutComeListByTaskId(String taskId) {
//返回存放連線的名稱集合
List<String> list = new ArrayList<String>();
//1:使用任務ID,查詢任務物件
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任務ID查詢
.singleResult();
//2:獲取流程定義ID
String processDefinitionId = task.getProcessDefinitionId();
//3:查詢ProcessDefinitionEntiy物件
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity) repositoryService.getProcessDefinition(processDefinitionId);
//使用任務物件Task獲取流程例項ID
String processInstanceId = task.getProcessInstanceId();
//使用流程例項ID,查詢正在執行的執行物件表,返回流程例項物件
ProcessInstance pi = runtimeService.createProcessInstanceQuery()//
.processInstanceId(processInstanceId)//使用流程例項ID查詢
.singleResult();
//獲取當前活動的id
String activityId = pi.getActivityId();
//4:獲取當前的活動
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);
//5:獲取當前活動完成之後連線的名稱
List<PvmTransition> pvmList = activityImpl.getOutgoingTransitions();
if(pvmList!=null && pvmList.size()>0){
for(PvmTransition pvm:pvmList){
String name = (String) pvm.getProperty("name");
if(StringUtils.isNotBlank(name)){
list.add(name);
}
else{
list.add("預設提交");
}
}
}
return list;
}
批註部分:
/**指定連線的名稱完成任務*/
@Override
public void saveSubmitTask(WorkflowBean workflowBean) {
//獲取任務ID
String taskId = workflowBean.getTaskId();
//獲取連線的名稱
String outcome = workflowBean.getOutcome();
//批註資訊
String message = workflowBean.getComment();
//獲取請假單ID
Long id = workflowBean.getId();
/**
* 1:在完成之前,新增一個批註資訊,向act_hi_comment表中新增資料,用於記錄對當前申請人的一些稽核資訊
*/
//使用任務ID,查詢任務物件,獲取流程流程例項ID
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任務ID查詢
.singleResult();
//獲取流程例項ID
String processInstanceId = task.getProcessInstanceId();
/**
* 注意:新增批註的時候,由於Activiti底層程式碼是使用:
* String userId = Authentication.getAuthenticatedUserId();
CommentEntity comment = new CommentEntity();
comment.setUserId(userId);
所有需要從Session中獲取當前登入人,作為該任務的辦理人(稽核人),對應act_hi_comment表中的User_ID的欄位,不過不新增稽核人,該欄位為null
所以要求,新增配置執行使用Authentication.setAuthenticatedUserId();新增當前任務的稽核人
* */
Authentication.setAuthenticatedUserId(SessionContext.get().getName());
taskService.addComment(taskId, processInstanceId, message);
/**
* 2:如果連線的名稱是“預設提交”,那麼就不需要設定,如果不是,就需要設定流程變數
* 在完成任務之前,設定流程變數,按照連線的名稱,去完成任務
流程變數的名稱:outcome
流程變數的值:連線的名稱
*/
Map<String, Object> variables = new HashMap<String,Object>();
if(outcome!=null && !outcome.equals("預設提交")){
variables.put("outcome", outcome);
}
//3:使用任務ID,完成當前人的個人任務,同時流程變數
taskService.complete(taskId, variables);
//4:當任務完成之後,需要指定下一個任務的辦理人(使用類)-----已經開發完成
/**
* 5:在完成任務之後,判斷流程是否結束
如果流程結束了,更新請假單表的狀態從1變成2(稽核中-->稽核完成)
*/
ProcessInstance pi = runtimeService.createProcessInstanceQuery()//
.processInstanceId(processInstanceId)//使用流程例項ID查詢
.singleResult();
//流程結束了
if(pi==null){
//更新請假單表的狀態從1變成2(稽核中-->稽核完成)
LeaveBill bill = leaveBillDao.findLeaveBillById(id);
bill.setState(2);
}
}
/**獲取批註資訊,傳遞的是當前任務ID,獲取歷史任務ID對應的批註*/
@Override
public List<Comment> findCommentByTaskId(String taskId) {
List<Comment> list = new ArrayList<Comment>();
//使用當前的任務ID,查詢當前流程對應的歷史任務ID
//使用當前任務ID,獲取當前任務物件
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任務ID查詢
.singleResult();
//獲取流程例項ID
String processInstanceId = task.getProcessInstanceId();
// //使用流程例項ID,查詢歷史任務,獲取歷史任務對應的每個任務ID
// List<HistoricTaskInstance> htiList = historyService.createHistoricTaskInstanceQuery()//歷史任務表查詢
// .processInstanceId(processInstanceId)//使用流程例項ID查詢
// .list();
// //遍歷集合,獲取每個任務ID
// if(htiList!=null && htiList.size()>0){
// for(HistoricTaskInstance hti:htiList){
// //任務ID
// String htaskId = hti.getId();
// //獲取批註資訊
// List<Comment> taskList = taskService.getTaskComments(htaskId);//對用歷史完成後的任務ID
// list.addAll(taskList);
// }
// }
list = taskService.getProcessInstanceComments(processInstanceId);
return list;
}
/**使用請假單ID,查詢歷史批註資訊*/
@Override
public List<Comment> findCommentByLeaveBillId(Long id) {
//使用請假單ID,查詢請假單物件
LeaveBill leaveBill = leaveBillDao.findLeaveBillById(id);
//獲取物件的名稱
String objectName = leaveBill.getClass().getSimpleName();
//組織流程表中的欄位中的值
String objId = objectName+"."+id;
/**1:使用歷史的流程例項查詢,返回歷史的流程例項物件,獲取流程例項ID*/
// HistoricProcessInstance hpi = historyService.createHistoricProcessInstanceQuery()//對應歷史的流程例項表
// .processInstanceBusinessKey(objId)//使用BusinessKey欄位查詢
// .singleResult();
// //流程例項ID
// String processInstanceId = hpi.getId();
/**2:使用歷史的流程變數查詢,返回歷史的流程變數的物件,獲取流程例項ID*/
HistoricVariableInstance hvi = historyService.createHistoricVariableInstanceQuery()//對應歷史的流程變數表
.variableValueEquals("objId", objId)//使用流程變數的名稱和流程變數的值查詢
.singleResult();
//流程例項ID
String processInstanceId = hvi.getProcessInstanceId();
List<Comment> list = taskService.getProcessInstanceComments(processInstanceId);
return list;
}
/**1:獲取任務ID,獲取任務物件,使用任務物件獲取流程定義ID,查詢流程定義物件*/
@Override
public ProcessDefinition findProcessDefinitionByTaskId(String taskId) {
//使用任務ID,查詢任務物件
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任務ID查詢
.singleResult();
//獲取流程定義ID
String processDefinitionId = task.getProcessDefinitionId();
//查詢流程定義的物件
ProcessDefinition pd = repositoryService.createProcessDefinitionQuery()//建立流程定義查詢物件,對應表act_re_procdef
.processDefinitionId(processDefinitionId)//使用流程定義ID查詢
.singleResult();
return pd;
}
/**
* 二:檢視當前活動,獲取當期活動對應的座標x,y,width,height,將4個值存放到Map<String,Object>中
map集合的key:表示座標x,y,width,height
map集合的value:表示座標對應的值
*/
@Override
public Map<String, Object> findCoordingByTask(String taskId) {
//存放座標
Map<String, Object> map = new HashMap<String,Object>();
//使用任務ID,查詢任務物件
Task task = taskService.createTaskQuery()//
.taskId(taskId)//使用任務ID查詢
.singleResult();
//獲取流程定義的ID
String processDefinitionId = task.getProcessDefinitionId();
//獲取流程定義的實體物件(對應.bpmn檔案中的資料)
ProcessDefinitionEntity processDefinitionEntity = (ProcessDefinitionEntity)repositoryService.getProcessDefinition(processDefinitionId);
//流程例項ID
String processInstanceId = task.getProcessInstanceId();
//使用流程例項ID,查詢正在執行的執行物件表,獲取當前活動對應的流程例項物件
ProcessInstance pi = runtimeService.createProcessInstanceQuery()//建立流程例項查詢
.processInstanceId(processInstanceId)//使用流程例項ID查詢
.singleResult();
//獲取當前活動的ID
String activityId = pi.getActivityId();
//獲取當前活動物件
ActivityImpl activityImpl = processDefinitionEntity.findActivity(activityId);//活動ID
//獲取座標
map.put("x", activityImpl.getX());
map.put("y", activityImpl.getY());
map.put("width", activityImpl.getWidth());
map.put("height", activityImpl.getHeight());
return map;
}
本文部分內容整理自itcast講義,在此表示感謝。
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
相關文章
- Activiti 學習筆記一到六小結筆記
- activiti學習筆記二筆記
- activiti學習筆記(四)managementService筆記
- Activiti 學習筆記七:連線(SequenceFlow)筆記
- Activiti 學習筆記五:流程變數筆記變數
- Activiti工作流基礎學習筆記筆記
- Activiti 學習筆記12:分配個人任務筆記
- Activiti 學習筆記13:分配組任務筆記
- Activiti學習筆記三:管理流程定義筆記
- Activiti學習筆記一:建立資料庫表筆記資料庫
- Activiti 學習筆記八:排他閘道器(ExclusiveGateWay)筆記Gateway
- Activiti 學習筆記六:流程執行歷史記錄筆記
- Activiti 學習筆記九:並行閘道器(parallelGateWay)筆記並行ParallelGateway
- Activiti學習筆記二:簡單順序流演示demo筆記
- 微信小程式學習筆記微信小程式筆記
- react小書學習筆記React筆記
- Activiti 學習筆記11:接收活動(receiveTask,即等待活動)筆記
- Activiti 學習筆記14:工作流定義的角色組筆記
- Activiti 學習筆記四:流程例項、任務的執行筆記
- 小魚JCL學習筆記(一)筆記
- 提升小波的學習筆記筆記
- Redux 學習總結筆記Redux筆記
- LDAP學習筆記總結LDA筆記
- Go 結構 學習筆記Go筆記
- live555學習筆記15-RTCPInstance類小結筆記TCP
- Python自然語言處理學習筆記(57):小結Python自然語言處理筆記
- 小程式學習筆記(未完待續)筆記
- 微信小程式入門學習筆記微信小程式筆記
- GO 學習筆記->結構體Go筆記結構體
- 學習筆記900天總結筆記
- 資料結構學習筆記資料結構筆記
- 學習筆記800天總結筆記
- PL/SQL學習筆記-總結SQL筆記
- Activiti 基礎概念 筆記筆記
- struts2學習筆記–執行緒安全問題小結筆記執行緒
- Python自然語言處理學習筆記(66):7.7 小結Python自然語言處理筆記
- Activiti 學習筆記十:開始活動節點(判斷流程是否結束及查詢歷史)筆記
- 微信小程式開發學習筆記[4]微信小程式筆記