1. 程式人生 > >工作流筆記第三天_流程實例

工作流筆記第三天_流程實例

asc etc 一個 can helloword time system sel inpu

0、流程實例的表

-- 流程實例,執行對象,任務
-- 1、解析.bpmn後得到的流程定義規則的信息,工作流系統就是按照流程定義的規則執行的。
select * FROM act_ru_execution; -- 正在執行的執行對象表
select * FROM act_hi_procinst; -- 流程實例的歷史表
select * FROM act_ru_task; -- 正在執行的任務表(只有節點是UserTask的時候,該表中存在數據)
select * FROM act_hi_taskinst; -- 任務歷史表(只有節點是UserTask的時候,該表中存在數據)
select * FROM act_hi_actinst; -- 所有活動節點的歷史表

1、結論:

(1)如果是單例流程(沒有分支和聚合),那麽流程實例ID和執行對象ID是相同的;

(2)一個流程實例只有一個,執行對象可以有多個技術分享

技術分享

技術分享

代碼實現:

package itheima.processDefinition;

import java.io.InputStream;
import java.util.List;
import java.util.zip.ZipInputStream;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.history.HistoricTaskInstance;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.task.Task;
import org.junit.Test;

public class ProcessInstance {
// 獲得工作流引擎對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();

/* 部署流程定義(從zip中部署流程定義)

把helloWord.bpmn和helloWord.png壓縮成helloWord.zip放在src/main/resources/diagrams文件夾下

*/
@Test
public void deloymentProcessDefinitionFromZip() {
// 根據反射獲取zip文件轉換成對應的流
InputStream in = this.getClass().getClassLoader().getResourceAsStream("diagrams/helloWord.zip");
// 創建流對象
ZipInputStream zipInputStream = new ZipInputStream(in);
// 部署對象
Deployment deploy = processEngine.getRepositoryService()// 與流程定義相關的service
.createDeployment()// 創建部署對象
.name("helloWord入門程序")// 添加部署名稱
.addZipInputStream(zipInputStream)// 指定zip格式的文件完成部署
.deploy();// 完成部署;
System.out.println("部署id:" + deploy.getId());
System.out.println("部署名稱:" + deploy.getName());
}

/* 啟動流程實例 */
@Test
public void startProcessInstance() {
// 流程定義的key
String processDefinitionKey = "helloWord";
org.activiti.engine.runtime.ProcessInstance processInstance = processEngine.getRuntimeService()// 與正在執行的流程實例和流程對象有關的service
.startProcessInstanceByKey(processDefinitionKey);
// 使用流程定義的key啟動流程實例,key與helloWord.bpmn中的id值相同
System.out.println("流程實例id:" + processInstance.getId());
System.out.println("流程定義id:" + processInstance.getProcessDefinitionId());
}

/* 完成我的任務 */
@Test
public void completeMyTask() {
// 任務id
String taskId = "1002";
processEngine.getTaskService()// 獲取與正在執行任務的service
.complete(taskId);
System.out.println("完成任務,任務編號是:" + taskId);
}

/* 查詢當前人的個人任務 */
@Test
public void findMyPersonalTask() {
String assignee = "王五";
List<Task> list = processEngine.getTaskService()// 獲取與正在執行任務的service
.createTaskQuery()// 創建任務查詢對象
.taskAssignee(assignee)// 指定個人任務查詢,指定辦理人
// .taskCandidateUser(candidateUser)//組任務的辦理人查詢
// .processDefinitionId("helloWord:1:704")// 按照流程定義id查詢
// .executionId("801")//按照執行對象id查詢
// .processInstanceId("801")// 流程實例id查詢
.orderByTaskCreateTime().asc()// 按照任務創建時間的升序排列
// .singleResult()//唯一結果集
.list(); // 返回結果集列表
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任務id:" + task.getId());
System.out.println("任務名稱:" + task.getName());
System.out.println("任務的創建時間:" + task.getCreateTime());
System.out.println("任務的辦理人:" + task.getAssignee());
System.out.println("流程實例id:" + task.getProcessInstanceId());
System.out.println("執行對象id:" + task.getExecutionId());
System.out.println("流程定義id:" + task.getProcessDefinitionId());
}
}
}

/* 查詢流程狀態(判斷流程正在執行還是已經結束) */
@Test
public void isProcessEnd() {
String processInstanceId = "801";
org.activiti.engine.runtime.ProcessInstance singleResult = processEngine.getRuntimeService()
.createProcessInstanceQuery()// 創建流程實例查詢對象
.processInstanceId(processInstanceId)// 根據流程實例id查詢
.singleResult();// 返回唯一結果集
if (singleResult != null) {
System.out.println("流程還沒有執行結束。");
} else {
System.out.println("流程已經執行結束!");
}
}

/* 查詢歷史任務 */
@Test
public void queryHistoryTask() {
String taskAssignee = "張三";
List<HistoricTaskInstance> list = processEngine.getHistoryService()// 創建於歷史有關的服務對象
.createHistoricTaskInstanceQuery()// 創建查詢歷史任務實例對象
.taskAssignee(taskAssignee)// 辦理任務的人
.list();
if (list != null && list.size() > 0) {
for (HistoricTaskInstance his : list) {
System.out.println(his.getProcessInstanceId() + " " + his.getAssignee() + " "
+ his.getTaskDefinitionKey() + " " + his.getName() + " " + his.getStartTime() + " "
+ his.getEndTime() + " " + his.getDurationInMillis());
}
}
}

/* 查詢歷史流程實例 */
@Test
public void queryHistoryProcessInstance() {
String processInstanceId = "801";
HistoricProcessInstance his = processEngine.getHistoryService()// 創建於歷史相關的服務對象
.createHistoricProcessInstanceQuery()// 創建查詢流程實例對象
.processInstanceId(processInstanceId).singleResult();
if (his != null) {
System.out.println(his.getId() + " " + his.getProcessDefinitionId() + " " + his.getStartTime()
+ " " + his.getEndTime() + " " + his.getDurationInMillis());
}
}
}

工作流筆記第三天_流程實例