工做流Activity框架入門(一)

Activity工做流入門

1. 工做流概念

工做流(Workflow),就是「業務過程的部分或總體在計算機應用環境下的自動化」,它主要解決的是「使在多個參與者之間按照某種預約義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現」。java

 

工做流管理系統(Workflow Management System, WfMS)是一個軟件系統,它完成工做量的定義和管理,並按照在系統中預先定義好的工做流邏輯進行工做流實例的執行。工做流管理系統不是企業的業務系統,而是爲企業的業務系統的運行提供了一個軟件的支撐環境。mysql

 

2. Activiti簡介

Activiti5是由Alfresco軟件在2010年5月17日發佈的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工做流、服務協做等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基於Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的項目架構師,它特點是提供了eclipse插件,開發人員能夠經過插件直接繪畫出業務流程圖。sql

Activiti框架底層有數據庫提供支持,根據版本不一樣,表的數量不一致,activiti5.13有23張表。底層使用mybatis操做數據庫,開發人員不須要本身編寫sql數據庫

Jbpm4.4底層也有數據庫支持,18張表。 底層使用hibernate操做數據庫。mybatis

 

Activiti的後臺是有數據庫的支持,全部的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。架構

1) ACT_RE_*: 'RE'表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。框架

2) ACT_RU_*: 'RU'表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程當中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表能夠一直很小速度很快。eclipse

3) ACT_ID_*: 'ID'表示identity。 這些表包含身份信息,好比用戶,組等等。異步

4) ACT_HI_*: 'HI'表示history。 這些表包含歷史數據,好比歷史流程實例, 變量,任務等等。ide

5) ACT_GE_*: 通用數據, 用於不一樣場景下。


3. 安裝插件(流程設計器插件)

第一步:解壓zip文件到eclipse中的dropins目錄中


第二步:重啓eclipse,勾選save選項


第三步:使用插件設計流程圖


4.手動建立數據庫表

Activity自帶建表腳本,選擇手動建表的話,只須要選取對應數據庫的腳本便可,裏面包含的Create、upgrade和drop相關腳本(upgrade腳本是用於工做流版本升級時候用的),固然Activity也支持自動建表,能夠參考下面的DEMO,可是不建議自動建表,本案例用的是mysql,因此我選取的是mysql的腳本




建立後應該能夠看到有23張表,本教程使用的是Activity5.13

5.自定義流程

右擊工程->NEW->Other->Activity->Activity Diagram,新建一個工做流模板

而後就能夠開始拖拉控件設計流程了,設計好的流程,只要經過發佈操做,就能夠自動在數據庫插入相應數據,可參考下面demo,如下是一個簡單的流程:

6.入門Demo

package activity.demo.test;

import java.util.List;

import org.activiti.engine.ProcessEngine;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.ProcessEngines;
import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.junit.Test;
import org.junit.validator.PublicClassValidator;


public class HelloWorld {
	// 使用框架的自動建表功能(不提供配置文件)
	@Test
	public void testCreateTablesAutomaticallyWithoutConfigFiles() {
		// 建立流程引擎配置對象
		ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
		// 設置jdbc鏈接參數信息
		config.setJdbcDriver("com.mysql.jdbc.Driver");
		config.setJdbcUrl("jdbc:mysql:///eam-mirror");
		config.setJdbcUsername("root");
		config.setJdbcPassword("root");
		// 設置自動建表
		config.setDatabaseSchemaUpdate("true");
		// 使用配置對象建立流程引擎對象,建立對象過程當中會自動建表
		ProcessEngine processEngine = config.buildProcessEngine();
	}

	// 使用框架的自動建表功能(提供配置文件)
	@Test
	public void testCreateTablesAutomaticallyWithConfigFiles() {
		ProcessEngineConfiguration config = ProcessEngineConfiguration
				.createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration");
		ProcessEngine pe = config.buildProcessEngine();
	}

	// 使用框架的自動建表功能(提供配置文件---使用默認配置)
	@Test
	public void testCreateTablesAutomatically() {
		ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
	}

	ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();

	// 將設計的流程圖部署到數據庫中
	@Test
	public void testDeploy() {
		// 建立部署構建器對象,用於加載流程定義文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定義
		DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
		deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");
		Deployment deployment = deploymentBuilder.deploy();
		System.out.println(deployment.getId());
	}

	// 查詢流程定義
	@Test
	public void testQueryProcessDefinition() {
		// 流程定義查詢對象,用於查詢流程定義表----act_re_procdef
		ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
		// 添加過濾條件,取最新版本
		query.latestVersion();
		// query.processDefinitionId(processDefinitionId)
		// query.processDefinitionKey(processDefinitionKey);
		// 添加排序條件
		query.orderByProcessDefinitionVersion().desc();

		// 添加分頁條件
		// query.listPage(firstResult, maxResults);

		// 查詢全部流程
		List<ProcessDefinition> processDefinitionList = query.list();
		for (ProcessDefinition pd : processDefinitionList) {
			System.out.println(pd.getId());
		}

	}
	// 根據流程定義啓動流程實例----操做的數據表:act_ru_execution act_ru_task
	@Test
	public void testStartProcess(){
		String processDefinitionId = "UserAuditProcess:2:504";
		//根據流程實例ID去啓動流程
		ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
		System.out.println(pInstance.getId());
	}
	
	//查詢任務列表
	@Test
	public void testQueryTaskList(){
		//建立任務查詢對象,查詢表act_ru_task
		TaskQuery query = pe.getTaskService().createTaskQuery();
		String assignee ="張三";
		//添加過濾條件
		query.taskAssignee(assignee);
		//排序
		query.orderByTaskCreateTime().desc();
		List<Task> taskList = query.list();
		for(Task task : taskList){
			System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());
		}
	}
	//辦理任務
	//辦理我的任務,操做的表是act_ru_execution,act_ru_task
	@Test
	public void testExecuteTask(){
		String taskId= "604";
		pe.getTaskService().complete(taskId);
	}
	
}


7.Activity框架學習指南
相關文章
相關標籤/搜索