activiti高級

流程變量
//設置流程變量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();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章