Activiti框架學習記錄-02
本篇主要是Activiti工作流框架的學習記錄,以及對於該框架的基本使用和一些淺顯的理解:
- 1、工作流框架Activiti中的幾個重要對象
- 2、Activiti中對於歷史數據的查詢
- 3、Activiti中對於流程數據的設置
1、工作流框架Activiti中的幾個重要對象
查詢對象
DeploymentQuery:查詢部署表act_re_deployment
ProcessDefinitionQuery:查詢流程定義表act_re_procdef
ProcessInstanceQuery:查詢流程實例表act_ru_execution
TaskQuery:查詢任務表act_ru_task幾個和表對應的對象(接口)
Deployment:對應查詢部署表act_re_deployment
ProcessDefinition:對應流程定義表act_re_procdef
ProcessInstance:對應流程實例表act_ru_execution
Task:對應任務表act_ru_task幾個Service對象
RepositoryService:部署流程定義,查詢流程定義,查詢流程定義文件名稱等靜態資源信息
RuntimeService:啓動流程實例,查詢流程實例,刪除流程實例
TaskService:查詢任務、辦理任務
HistoryService:查詢歷史數據
IdentityService:操作用戶表和組表
2、工作流框架Activiti中對於歷史數據的查詢
1)準備工作(在Activiti框架學習記錄-01中已經有比較詳細的描述):
畫圖:
流程引擎定義:
// 提供了門面做任何操作都會需要使用到該對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
- 流程定義:
// 部署流程定義
@Test
public void test1() {
// 門面設計模式
// 流程定義
DeploymentBuilder deploymentBuilder =
processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("com/yq/activiti/history/history.bpmn");
deploymentBuilder.addClasspathResource("com/yq/activiti/history/history.png");
deploymentBuilder.deploy();
}
- 流程實例:
// 啓動流程實例
@Test
public void test2() {
// 流程圖ID
String processDefinitionKey = "lssj";
// 根據key啓動實例會保證版本的最新的性質
processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey);
}
- 辦理任務:
//辦理任務
@Test
public void test3() {
String taskId = "904"; //任務ID
// 辦理任務
processEngine.getTaskService().complete(taskId);
}
2)歷史數據查詢:
- 查詢歷史流程實例
// 查詢歷史流程實例
@Test
public void test4() {
// act_hi_procinst
// 流程實例歷史查詢
HistoricProcessInstanceQuery query =
processEngine.getHistoryService().createHistoricProcessInstanceQuery();
List<HistoricProcessInstance> instances =
query.list();
for (HistoricProcessInstance historicProcessInstance : instances) {
System.out.println(historicProcessInstance.getId() +
"\t" + historicProcessInstance.getStartTime() +
"\t" + historicProcessInstance.getEndTime());
}
}
- 查詢歷史任務數據
// 歷史任務數據
@Test
public void test5() {
// act_hi_taskinst
// 歷史任務數據查詢
HistoricTaskInstanceQuery query =
processEngine.getHistoryService().createHistoricTaskInstanceQuery();
List<HistoricTaskInstance> instances =
query.list();
//在真正的系統排序是相當重要的一個亮點功能
query.orderByProcessInstanceId();
query.orderByHistoricTaskInstanceStartTime().asc();
for (HistoricTaskInstance historicTaskInstance : instances) {
System.out.println(historicTaskInstance.getId() +
"\t" + historicTaskInstance.getName() +
"\t" + historicTaskInstance.getStartTime() +
"\t" + historicTaskInstance.getEndTime());
}
}
- 查詢歷史活動數據
@Test
public void test6() {
//歷史活動實例查詢對象,查詢表:act_hi_actinst
HistoricActivityInstanceQuery query =
processEngine.getHistoryService().createHistoricActivityInstanceQuery();
query.orderByProcessInstanceId();
query.orderByHistoricActivityInstanceStartTime().asc();
List<HistoricActivityInstance> instances = query.list();
for (HistoricActivityInstance historicActivityInstance : instances) {
System.out.println(historicActivityInstance.getProcessInstanceId() +
"\t" + historicActivityInstance.getActivityName());
}
}
3、工作流框架Activiti中對於流程數據的設置
1)準備工作(在Activiti框架學習記錄-01中已經有比較詳細的描述):
- 代碼準備工作
// 提供了門面做任何操作都會需要使用到該對象
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
// 部署流程定義
@Test
public void test1() {
// 門面設計模式
// 流程定義
DeploymentBuilder deploymentBuilder =
processEngine.getRepositoryService().createDeployment();
deploymentBuilder.addClasspathResource("com/yq/activiti/variable/variable.bpmn");
deploymentBuilder.addClasspathResource("com/yq/activiti/variable/variable.png");
deploymentBuilder.deploy();
}
2)流程數據設置
//設置流程變量的方法一:啓動流程實例時候進行設置
@Test
public void test2() {
String processDefinitionKey = "qjlc";
Map<String, Object> variables = new HashMap<String, Object>();
variables.put("key1", "vaule1");
variables.put("key2", 1500);
variables.put("username", "王虎");//從session中獲取當前登錄用戶的名稱
ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceByKey(processDefinitionKey,variables);
System.out.println(instance.getId());
}
//設置流程變量方法二:辦理任務同時設置任務變量(比較合理的一個方法)
@Test
public void test3() {
String taskId = "1804";
Map<String,Object> variables = new HashMap<String, Object>();
variables.put("qjts", 5);
variables.put("qjyy", "不想上班");
variables.put("qjr", new User(1, "admin", 24));
processEngine.getTaskService().complete(taskId,variables);
}
//設置流程變量方法三:RuntiomeService的Set方法進行設置
@Test
public void test4() {
String executionId = "1301";//流程實例ID
String variableName = "k3";//流程變量名稱
String variableValue= "v3";//流程變量value
//設置流程變量,設置流程變量的兩種方式
processEngine.getRuntimeService().
setVariable(executionId, variableName, variableValue);
Map<String,Object> variables = new HashMap<String, Object>();
variables.put("k4", "v4");
processEngine.getRuntimeService().
setVariables(executionId, variables);
}
//設置流程變量方式四:TaskService的set方法設置
public void test5() {
String taskId = "1002"; //任務ID
//設置一個流程變量
processEngine.getTaskService().setVariable(taskId, "qjsj", 5);
}
2)流程數據獲取
//獲取流程變量方式一:使用RuntimeService的get方法獲取
@Test
public void test6() {
String executionId = "1701";
//獲取一個流程變量
User user = (User) processEngine.getRuntimeService().getVariable(executionId, "qjr");
System.out.println(user);
//獲取多個流程變量
Map<String, Object> variables = processEngine.getRuntimeService().getVariables(executionId);
Set<String> keySet = variables.keySet();
for (String key : keySet) {
Object value = variables.get(key);
System.out.println(key + "-->" + value);
}
}
//獲取流程變量方式二:使用TaskSErvice的get方式獲取
@Test
public void test7() {
String taskId = "1905";
//獲取一個流程變量
User user = (User) processEngine.getTaskService().getVariable(taskId, "qjr");
System.out.println(user);
//獲取當前任務所在流程實例(801)範圍內所有的流程變量
Map<String ,Object> variables = processEngine.getTaskService().getVariables(taskId);
Set<String> keySet = variables.keySet();
for (String key : keySet) {
Object value = variables.get(key);
System.out.println(key + "-->" + value);
}
}