1.ProcessEngine 最核心的類,其他類都需借助它
ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
getDefaultProceeEngine方法時會自動加載classpath下名為activiti.cfg.xml文件
該對象可獲取各個service

2.RepositoryService
是Activiti的倉庫服務(wù)類。所謂的倉庫指流程定義文檔的兩個文件:bpmn文件和流程圖片。
(1)創(chuàng)建
RepositoryService repositoryService = processEngine.getRepositoryService();
(2)可以產(chǎn)生DeploymentBuilder,用來定義流程部署的相關(guān)參數(shù)
DeploymentBuilder deploymentBuilder = repositoryService.createDeployment();
(3)刪除流程定義
repositoryService.deleteDeployment(deploymentId);
3.RuntimeService
是activiti的流程執(zhí)行服務(wù)類。可以從這個服務(wù)類中獲取很多關(guān)于流程執(zhí)行相關(guān)的信息。
4.TaskService
是activiti的任務(wù)服務(wù)類??梢詮倪@個類中獲取任務(wù)的信息。
5.HistoryService
是activiti的查詢歷史信息的類。在一個流程執(zhí)行完成后,這個對象為我們提供查詢歷史信息。
6.ProcessDefinition
流程定義類??梢詮倪@里獲得資源文件等。
7.ProcessInstance
代表流程定義的執(zhí)行實例。如范冰冰請了一天的假,她就必須發(fā)出一個流程實例的申請。一個流程實例包括了所有的運行節(jié)點。我們可以利用這個對象來了解當前流程實例的進度等信息。流程實例就表示一個流程從開始到結(jié)束的最大的流程分支,即一個流程中流程實例只有一個。
8.Execution
Activiti用這個對象去描述流程執(zhí)行的每一個節(jié)點。在沒有并發(fā)的情況下,Execution就是同ProcessInstance。流程按照流程定義的規(guī)則執(zhí)行一次的過程,就可以表示執(zhí)行對象Execution。
9.helloword
(1)畫流程圖

2.png
(2)部署流程定義
Deployment deployment = processEngine.getRepositoryService()//與流程定義和部署對象相關(guān)的Service
.createDeployment()//創(chuàng)建一個部署對象
.name("測試Helloword")//添加部署的名稱
.addClasspathResource("diagrams/helloworld.bpmn")//從classpath的資源中加載,一次只能加載一個文件
.addClasspathResource("diagrams/helloworld.png")//從classpath的資源中加載,一次只能加載一個文件
.deploy();//完成部署
(3)啟動實例
@Test
public void startProcessInstance() {
//流程定義的key
String processDefinitionKey = "helloworld1";
//與正在執(zhí)行的流程實例和執(zhí)行對象相關(guān)的Service
//使用流程定義的key啟動流程實例,key對應(yīng)helloworld.bpmn文件中id的屬性值,使用key值啟動,默認是按照最新版本的流程定義啟動
ProcessInstance pi = processEngine.getRuntimeService()
.startProcessInstanceByKey(processDefinitionKey);
//流程實例ID 101
System.out.println("流程實例ID:" + pi.getId());
//流程定義ID helloworld:1:4
System.out.println("流程定義ID:" + pi.getProcessDefinitionId());
}
(4)查看我的個人任務(wù)
String assignee = "張三";
List<Task> list = processEngine.getTaskService()//與正在執(zhí)行的任務(wù)管理相關(guān)的Service
.createTaskQuery()//創(chuàng)建任務(wù)查詢對象
.taskAssignee(assignee)//指定個人任務(wù)查詢,指定辦理人
.list();
if (list != null && list.size() > 0) {
for (Task task : list) {
System.out.println("任務(wù)ID:" + task.getId());
System.out.println("任務(wù)名稱:" + task.getName());
System.out.println("任務(wù)的創(chuàng)建時間:" + task.getCreateTime());
System.out.println("任務(wù)的辦理人:" + task.getAssignee());
System.out.println("流程實例ID:" + task.getProcessInstanceId());
System.out.println("執(zhí)行對象ID:" + task.getExecutionId());
System.out.println("流程定義ID:" + task.getProcessDefinitionId());
System.out.println("########################################################");
}
}
(5) 完成任務(wù)
//任務(wù)ID
String taskId = "1202";
//與正在執(zhí)行的任務(wù)管理相關(guān)的Service
processEngine.getTaskService()
.complete(taskId);
System.out.println("完成任務(wù):任務(wù)ID:" + taskId);