流程變量
//設置流程變量4種方式
//①:在流程啓動的時候設置流程變量
//runtimeService.startProcessInstanceByKey(processDefinitionKey, variables);
//②:在完成流程的時候設置流程變量
//taskService.complete(taskId, variables);
//③:使用runtimeService設置流程變量 ③和④的選擇:你獲取executionId或者taskId,哪一個獲取方便就使用哪一個
// runtimeService.setVariable(executionId, variableName, value);//設置一個變量
// runtimeService.setVariables(executionId, variables);//設置多個變量
//④:使用taskService設置流程變量
// taskService.setVariable(taskId, variableName, value);//設置一個變量
// taskService.setVariables(taskId, variables);//設置多個變量
//獲取流程變量有2種方式
//①:使用runtimeService獲取流程變量
// runtimeService.getVariables(executionId);//獲取所有的變量
// runtimeService.getVariables(executionId, variableNames);//獲取多個
// runtimeService.getVariable(executionId, variableName);//獲取一個,但是需要自己強轉類型
// runtimeService.getVariable(executionId, variableName, variableClass);//獲取一個,帶有泛型,不用強轉
//②:使用taskService獲取流程變量
// taskService.getVariables(taskId);//獲取所有的變量
// taskService.getVariables(taskId, variableNames);//獲取多個
// taskService.getVariable(taskId, variableName);//獲取一個,但是需要自己強轉類型
// taskService.getVariable(taskId, variableName, variableClass);//獲取一個,帶有泛型,不用強轉
順序流
順序流是連接兩個流程節點的連線,代表一個節點的出口。流程執行完一個節點後,會沿着節點的所有外出順序流繼續執行。 就是說,BPMN 2.0默認的行爲就是併發的: 兩個外出順序流會創造兩個單獨的,併發流程分支。
順序流主要由4個屬性組成:
Id: 唯一標示,用來區分不同的順序流
sourceRef:連線的源頭節點ID
targetRef:連線的目標節點ID
name(可選):連線的名稱,不涉及業務,主要用於顯示。多出口原則要設置。
說明:
1)結束節點沒有出口
其他節點有一個或多個出口。如果有一個出口,則代表是一個單線流程;如果有多個出口,則代表是開啓併發流程。
3.3.2. 分支流程-流程圖
3.3.3. 公共代碼抽取
package cn.itsource.activiti.day02;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.TaskService;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
public class BaseBpmn {
private ProcessEngine processEngine=ProcessEngines.getDefaultProcessEngine();
//自己類和子類都可能使用:使用protected修飾
protected RepositoryService repositoryService = processEngine.getRepositoryService();
protected RuntimeService runtimeService = processEngine.getRuntimeService();
protected TaskService taskService = processEngine.getTaskService();
/**
*
* @param name 部署流程的名字
* @param resourceName 加載資源的名字前綴
* @return
*/
protected Deployment deploy(String name, String resourceName) {
//創建核心
//獲取服務
//做事情
// this.getClass().getClassLoader().getResourceAsStream("LeaveFlow.bpmn");從classpath下面加載
// this.getClass().getResourceAsStream("/LeaveFlow.bpmn");//從classpath下面加載
// this.getClass().getResourceAsStream("LeaveFlow.bpmn");//從當前類當前包加載(採納)
// this.getClass().getResourceAsStream("./LeaveFlow.bpmn");//從當前類當前包加載(採納)
String resourceNameBpmn=resourceName+".bpmn";
String resourceNamePng=resourceName+".png";
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
deploymentBuilder.name(name)
.addInputStream(resourceNameBpmn, this.getClass().getResourceAsStream(resourceNameBpmn))
.addInputStream(resourceNamePng, this.getClass().getResourceAsStream(resourceNamePng));
Deployment deployment = deploymentBuilder.deploy();
return deployment;
}
/**
*
* @param processDefinitionKey 啓動流程的定義的key
*/
protected ProcessInstance startProcess(String processDefinitionKey) {
return runtimeService.startProcessInstanceByKey(processDefinitionKey);
}
/**
* 在一個流程實例中,一個辦理人只有一個唯一的任務
* @param processInstanceId 流程實例id
* @param assignee 辦理人
* @return
*/
protected Task queryPersonalTask(String processInstanceId, String assignee) {
return taskService.createTaskQuery()
.processInstanceId(processInstanceId)
.taskAssignee(assignee)
.singleResult();
}