API方法說明
流程模型操作
一般先定義一個流程模型,也就是通過界面拖拉拽一個圖形流程出來,然後保存。這個數據就是流程模型數據
創建模型
repositoryService.newModel()
....
repositoryService.saveModel()
分頁查詢模型
repositoryService.createModelQuery().listPage(firstResult,maxResults)
// 查詢總數
repositoryService.createModelQuery().count()
刪除模型
repositoryService.deleteModel()
部署模型
repository.createDeployment().name().deploy();
流程定義操作
通過zip部署流程
@Test
public void deployProcessByZip() throws FileNotFoundException {
// 流程部署 參與的表 act_re_procdef act_ge_bytearry act_re_deployment
// 加斜槓代表從classpah的根目錄裏面找文件
InputStream inputStream = this.getClass().getResourceAsStream("/processes/processes.zip");
// 部署流程
ZipInputStream zipInputStream = new ZipInputStream(inputStream);
// 保存act_re_deployment
Deployment deployment = repositoryService.createDeployment()
.name("請假流程009")
.addZipInputStream(zipInputStream)
.deploy();
System.out.println("部署成功,流程部署id:" + deployment.getId());//57501
}
分頁查詢流程部署信息
@Test
public void queryDeployment(){
List<Deployment> deployments = repositoryService.createDeploymentQuery().listPage(0, 4);
for (Deployment deployment : deployments) {
System.out.println("部署id:"+deployment.getId());
System.out.println("部署名稱:"+deployment.getName());
System.out.println("部署時間:"+deployment.getDeploymentTime());
}
}
分頁查詢流程定義信息
@Test
public void queryProcessDef(){
List<ProcessDefinition> processDefinitions = repositoryService.createProcessDefinitionQuery().listPage(0, 4);
for (ProcessDefinition processDefinition : processDefinitions) {
System.out.println("流程定義id:"+processDefinition.getId());
System.out.println("流程定義名稱:"+processDefinition.getName());
System.out.println("流程定義bmp:"+processDefinition.getResourceName());
System.out.println("流程定義png:"+processDefinition.getDiagramResourceName());
System.out.println("部署id:"+processDefinition.getDeploymentId());
System.out.println("流程定義版本:"+processDefinition.getVersion());
}
}
刪除流程部署信息
同時刪除流程定義
@Test
public void deleteDeploy(){
// 根據部署id刪除流程定義,如果當前部署id有對應的流程定義運行的流程實例運行,那麼會報錯
repositoryService.deleteDeployment("1");
// 級聯刪除表,會刪除正在執行的流程數據以及act_ru_*和act_hi_*裏面的數據
// repositoryService.deleteDeployment("1",true);
}
查詢流程定義圖片
@Test
public void queryProcessDragram() throws Exception {
//根據流程定義id查詢流程定義的圖片
InputStream processDiagram = repositoryService.getProcessDiagram("helloWorld:1:4");
File file = new File("./demo.png");
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(file));
int len = 0;
byte[] bys = new byte[1024];
while((len = processDiagram.read(bys))!=0){
bufferedOutputStream.write(bys,0,len);
bufferedOutputStream.flush();
}
bufferedOutputStream.close();
processDiagram.close();
System.out.println("輸出預覽流程定義圖片");
}
1.4.3 流程實例、任務操作
流程模型部署以後,對應生成流程定義。
一次部署,可以產生多條流程定義;
對應的表是act_re_deployment、 act_re_procdef
啓動流程
@Test
public void startProcessDef() {
// (1)通過processInstanceId啓動
//ProcessInstance processInstance = runtimeService.startProcessInstanceById();
// (2) 通過processInstanceKey啓動
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("helloWorld");
// (3)設置業務主鍵並通過processInstanceId啓動流程,(重要,業務id)
// ProcessInstance startProcessInstanceById(String processDefinitionId, String businessKey);
// 獲取流程實例id
System.out.println("流程實例id:" + processInstance.getId());
}
查詢個人任務
@Test
public void queryTask(){
// 分頁查詢張三需要辦理的業務
List<Task> tasks = taskService.createTaskQuery().taskCandidateOrAssigned("張三").listPage(0, 4);
for (Task task : tasks) {
System.out.println("任務id:"+task.getId());
System.out.println("任務名稱:"+task.getName());
System.out.println("任務辦理人:"+task.getAssignee());
System.out.println("流程定義id:"+task.getProcessDefinitionId());
System.out.println("流程實例id:"+task.getProcessInstanceId());
System.out.println("執行實例id:"+task.getExecutionId());
}
}
辦理任務
@Test
public void completeTask(){
// 完成任務id爲12505的任務
taskService.complete("12505");
}
判斷流程是否結束
@Test
public void isComplete(){
//判斷流程實例對象是否還存在,不存在則已經結束
//備註:流程中所有任務完成後,流程實例表中的該流程數據全部會刪除,則查詢該流程實例返回的應該是空對象。
ProcessInstanceQuery processInstanceQuery = runtimeService.createProcessInstanceQuery().processInstanceId("12501");
if(processInstanceQuery!=null){
System.out.println("流程未結束");
}else{
System.out.println("流程已結束");
}
}
分頁查詢正在執行的流程
@Test
public void queryRunningProcessInstance(){
// 分頁查詢流程實例
List<ProcessInstance> processInstances = runtimeService.createProcessInstanceQuery().listPage(0, 4);
for (ProcessInstance processInstance : processInstances) {
System.out.println("執行實例id:"+processInstance.getId());
System.out.println("流程定義id:"+processInstance.getProcessDefinitionId());
System.out.println("流程部署id:"+processInstance.getDeploymentId());
}
}
查詢歷史流程實例
@Test
public void queryHisotyProcess(){
List<HistoricProcessInstance> historicProcessInstances = historyService.createHistoricProcessInstanceQuery().listPage(0, 4);
for (HistoricProcessInstance historicProcessInstance : historicProcessInstances) {
System.out.println("執行實例id:"+historicProcessInstance.getId());
System.out.println("流程定義id:"+historicProcessInstance.getProcessDefinitionId());
System.out.println("部署id:"+historicProcessInstance.getDeploymentId());
System.out.println("流程定義名稱:"+historicProcessInstance.getProcessDefinitionName());
System.out.println("流程定義版本:"+historicProcessInstance.getProcessDefinitionVersion());
}
}
查詢歷史流程任務
/**
* 查詢歷史流程任務
*/
@Test
public void queryHistoryTask(){
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery().list();
for (HistoricTaskInstance historicTaskInstance : list) {
System.out.println("任務id:"+historicTaskInstance.getId());
System.out.println("任務名稱:"+historicTaskInstance.getName());
System.out.println("辦理人:"+historicTaskInstance.getAssignee());
System.out.println("執行實例id:"+historicTaskInstance.getExecutionId());
System.out.println("流程定義id:"+historicTaskInstance.getProcessDefinitionId());
System.out.println("流程實例id:"+historicTaskInstance.getProcessInstanceId());
System.out.println("任務創建時間:"+historicTaskInstance.getCreateTime());
System.out.println("任務持續:"+historicTaskInstance.getDurationInMillis());
System.out.println(">>>>>>>>>>");
}
}
流程變量操作
啓動流程並設置變量
@Test
public void startProcessAndSetVariable() {
Map<String, Object> map = new HashMap<>(10);
map.put("請假天數", 5);
// 通過流程定義id啓動流程並設置流程變量
// runtimeService.startProcessInstanceById("helloWorld:1:4",map);
// 通過流程定義key啓動流程並設置流程變量
runtimeService.startProcessInstanceByKey("helloWorld", map);
}
通過執行實例id設置變量
@Test
public void runSetVariableByExecutionId(){
Map<String, Object> map = new HashMap<>(10);
map.put("請假天數", 10);
runtimeService.setVariables("17503",map);
}
通過任務id設置變量
@Test
public void setVariableByTaskId(){
Map<String, Object> map = new HashMap<>(10);
map.put("請假原因", "病假");
taskService.setVariables("17506",map);
}
獲取變量值
@Test
public void getVariable(){
//通過執行實例id和key獲取流程變量請假原因的值
String reason = (String)runtimeService.getVariable("17501","請假原因");
System.out.println(reason);
}
查詢歷史的流程變量
@Test
public void getVariableByHistory(){
// 通過執行實例id
List<HistoricVariableInstance> list = historyService.createHistoricVariableInstanceQuery().executionId("17501").list();
for (HistoricVariableInstance historicVariableInstance : list) {
System.out.println("變量名稱:"+historicVariableInstance.getVariableName());
System.out.println("變量值:"+historicVariableInstance.getValue());
}
}
歷史流程操作
分頁查詢歷史流程實例
@Test
public void queryHistoryProcess(){
List<HistoricProcessInstance> list = historyService.createHistoricProcessInstanceQuery()
//查詢已完成的
.finished()
.processDefinitionId("helloWorld:1:4")
.orderByProcessInstanceDuration().desc()
.listPage(0, 10);
for (HistoricProcessInstance historicProcessInstance : list) {
System.out.println("歷史流程實例id:"+historicProcessInstance.getId());
System.out.println("流程定義id:"+historicProcessInstance.getProcessDefinitionId());
System.out.println("部署id:"+historicProcessInstance.getDeploymentId());
System.out.println("開始節點id:"+historicProcessInstance.getStartActivityId());
System.out.println("結束節點id:"+historicProcessInstance.getEndActivityId());
System.out.println("結束時間:"+historicProcessInstance.getEndTime());
System.out.println("耗費時間:"+historicProcessInstance.getDurationInMillis());
System.out.println("====================");
}
}
查詢歷史活動
@Test
public void queryHistoryActiviti() {
List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
.processDefinitionId("helloWorld:1:4")
.finished()
.orderByHistoricActivityInstanceEndTime()
.desc()
.listPage(0, 10);
for (HistoricActivityInstance historicActivityInstance : list) {
System.out.println("id:" + historicActivityInstance.getId());
System.out.println("流程執行:" + historicActivityInstance.getExecutionId());
System.out.println("流程定義id:" + historicActivityInstance.getProcessDefinitionId());
System.out.println("流程實例id:" + historicActivityInstance.getProcessInstanceId());
System.out.println("活動id:" + historicActivityInstance.getActivityId());
System.out.println("活動類型:" + historicActivityInstance.getActivityType());
System.out.println("活動名稱:" + historicActivityInstance.getActivityName());
System.out.println("辦理人:" + historicActivityInstance.getAssignee());
System.out.println("開始時間:" + historicActivityInstance.getStartTime());
System.out.println("結束時間:" + historicActivityInstance.getEndTime());
System.out.println("持續時間:" + historicActivityInstance.getDurationInMillis());
System.out.println("==========================");
}
}
查詢歷史任務
@Test
public void queryHistoryTask(){
// 查詢劉備曾經辦理的任務
List<HistoricTaskInstance> list = historyService.createHistoricTaskInstanceQuery()
.finished()
.taskAssignee("劉備")
.listPage(0, 10);
for (HistoricTaskInstance historicTaskInstance : list) {
System.out.println("任務id:"+historicTaskInstance.getId());
System.out.println("任務名稱:"+historicTaskInstance.getName());
System.out.println("辦理人:"+historicTaskInstance.getAssignee());
System.out.println("創建時間:"+historicTaskInstance.getCreateTime());
System.out.println("結束時間:"+historicTaskInstance.getEndTime());
System.out.println("流程實例id:"+historicTaskInstance.getProcessInstanceId());
System.out.println("流程定義id:"+historicTaskInstance.getProcessDefinitionId());
System.out.println("執行實例id:"+historicTaskInstance.getExecutionId());
System.out.println("持續時間:"+historicTaskInstance.getDurationInMillis());
System.out.println("=======================");
}
}
參考說明
https://www.activiti.org/userguide/#chapterApi