1. 程式人生 > >Activity工作流框架

Activity工作流框架

fontsize work 兩個 database data- 流程設計 size 開源 參數

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
  1. package activity.demo.test;
  2. import java.util.List;
  3. import org.activiti.engine.ProcessEngine;
  4. import org.activiti.engine.ProcessEngineConfiguration;
  5. import org.activiti.engine.ProcessEngines;
  6. import org.activiti.engine.impl.juel.ExpressionFactoryImpl.Profile;
  7. import org.activiti.engine.repository.Deployment;
  8. import org.activiti.engine.repository.DeploymentBuilder;
  9. import org.activiti.engine.repository.ProcessDefinition;
  10. import org.activiti.engine.repository.ProcessDefinitionQuery;
  11. import org.activiti.engine.runtime.ProcessInstance;
  12. import org.activiti.engine.task.Task;
  13. import org.activiti.engine.task.TaskQuery;
  14. import org.junit.Test;
  15. import org.junit.validator.PublicClassValidator;
  16. public class HelloWorld {
  17. // 使用框架的自動建表功能(不提供配置文件)
  18. @Test
  19. public void testCreateTablesAutomaticallyWithoutConfigFiles() {
  20. // 創建流程引擎配置對象
  21. ProcessEngineConfiguration config = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
  22. // 設置jdbc連接參數信息
  23. config.setJdbcDriver("com.mysql.jdbc.Driver");
  24. config.setJdbcUrl("jdbc:mysql:///eam-mirror");
  25. config.setJdbcUsername("root");
  26. config.setJdbcPassword("root");
  27. // 設置自動建表
  28. config.setDatabaseSchemaUpdate("true");
  29. // 使用配置對象創建流程引擎對象,創建對象過程中會自動建表
  30. ProcessEngine processEngine = config.buildProcessEngine();
  31. }
  32. // 使用框架的自動建表功能(提供配置文件)
  33. @Test
  34. public void testCreateTablesAutomaticallyWithConfigFiles() {
  35. ProcessEngineConfiguration config = ProcessEngineConfiguration
  36. .createProcessEngineConfigurationFromResource("activiti-context.xml", "processEngineConfiguration");
  37. ProcessEngine pe = config.buildProcessEngine();
  38. }
  39. // 使用框架的自動建表功能(提供配置文件---使用默認配置)
  40. @Test
  41. public void testCreateTablesAutomatically() {
  42. ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
  43. }
  44. ProcessEngine pe = ProcessEngines.getDefaultProcessEngine();
  45. // 將設計的流程圖部署到數據庫中
  46. @Test
  47. public void testDeploy() {
  48. // 創建部署構建器對象,用於加載流程定義文件(UserInfoAudit.bpmn,UserInfoAudit.myProcess.png),部署流程定義
  49. DeploymentBuilder deploymentBuilder = pe.getRepositoryService().createDeployment();
  50. deploymentBuilder.addClasspathResource("UserInfoAudit.bpmn");
  51. Deployment deployment = deploymentBuilder.deploy();
  52. System.out.println(deployment.getId());
  53. }
  54. // 查詢流程定義
  55. @Test
  56. public void testQueryProcessDefinition() {
  57. // 流程定義查詢對象,用於查詢流程定義表----act_re_procdef
  58. ProcessDefinitionQuery query = pe.getRepositoryService().createProcessDefinitionQuery();
  59. // 添加過濾條件,取最新版本
  60. query.latestVersion();
  61. // query.processDefinitionId(processDefinitionId)
  62. // query.processDefinitionKey(processDefinitionKey);
  63. // 添加排序條件
  64. query.orderByProcessDefinitionVersion().desc();
  65. // 添加分頁條件
  66. // query.listPage(firstResult, maxResults);
  67. // 查詢所有流程
  68. List<ProcessDefinition> processDefinitionList = query.list();
  69. for (ProcessDefinition pd : processDefinitionList) {
  70. System.out.println(pd.getId());
  71. }
  72. }
  73. // 根據流程定義啟動流程實例----操作的數據表:act_ru_execution act_ru_task
  74. @Test
  75. public void testStartProcess(){
  76. String processDefinitionId = "UserAuditProcess:2:504";
  77. //根據流程實例ID去啟動流程
  78. ProcessInstance pInstance = pe.getRuntimeService().startProcessInstanceById(processDefinitionId);
  79. System.out.println(pInstance.getId());
  80. }
  81. //查詢任務列表
  82. @Test
  83. public void testQueryTaskList(){
  84. //創建任務查詢對象,查詢表act_ru_task
  85. TaskQuery query = pe.getTaskService().createTaskQuery();
  86. String assignee ="張三";
  87. //添加過濾條件
  88. query.taskAssignee(assignee);
  89. //排序
  90. query.orderByTaskCreateTime().desc();
  91. List<Task> taskList = query.list();
  92. for(Task task : taskList){
  93. System.out.println("taskId:"+task.getId()+",taskName:"+task.getName());
  94. }
  95. }
  96. //辦理任務
  97. //辦理個人任務,操作的表是act_ru_execution,act_ru_task
  98. @Test
  99. public void testExecuteTask(){
  100. String taskId= "604";
  101. pe.getTaskService().complete(taskId);
  102. }
  103. }


7.Activity框架學習指南 技術分享

Activity工作流框架