Activity工作流框架
Activity工作流入門
1. 工作流概念
工作流(Workflow),就是“業務過程的部分或整體在計算機應用環境下的自動化”,它主要解決的是“使在多個參與者之間按照某種預定義的規則傳遞文檔、信息或任務的過程自動進行,從而實現某個預期的業務目標,或者促使此目標的實現”。
工作流管理系統(Workflow Management System, WfMS)是一個軟件系統,它完成工作量的定義和管理,並按照在系統中預先定義好的工作流邏輯進行工作流實例的執行。工作流管理系統不是企業的業務系統,而是為企業的業務系統的運行提供了一個軟件的支撐環境。
2. Activiti簡介
Activiti5是由Alfresco軟件在2010年5月17日發布的業務流程管理(BPM)框架,它是覆蓋了業務流程管理、工作流、服務協作等領域的一個開源的、靈活的、易擴展的可執行流程語言框架。Activiti基於Apache許可的開源BPM平臺,創始人Tom Baeyens是JBoss jBPM的項目架構師,它特色是提供了eclipse插件,開發人員可以通過插件直接繪畫出業務流程圖。
Activiti框架底層有數據庫提供支持,根據版本不同,表的數量不一致,activiti5.13有23張表。底層使用mybatis操作數據庫,開發人員不需要自己編寫sql
Jbpm4.4底層也有數據庫支持,18張表。 底層使用hibernate操作數據庫。
Activiti的後臺是有數據庫的支持,所有的表都以ACT_開頭。 第二部分是表示表的用途的兩個字母標識。 用途也和服務的API對應。
1) ACT_RE_*: ‘RE‘表示repository。 這個前綴的表包含了流程定義和流程靜態資源 (圖片,規則,等等)。
2) ACT_RU_*: ‘RU‘表示runtime。 這些運行時的表,包含流程實例,任務,變量,異步任務,等運行中的數據。 Activiti只在流程實例執行過程中保存這些數據, 在流程結束時就會刪除這些記錄。 這樣運行時表可以一直很小速度很快。
3) ACT_ID_*: ‘ID‘表示identity。 這些表包含身份信息,比如用戶,組等等。
4) ACT_HI_*: ‘HI‘表示history。 這些表包含歷史數據,比如歷史流程實例, 變量,任務等等。
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
[java] view plain copy- 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框架學習指南
Activity工作流框架