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

Activiti5工作流程框架

一、工作流簡介 1.什麼是工作流?
簡單的理解就是工作的流程,這裡的流程指的是,完成一個企業中具體業務的一系列工作步驟,所有的步驟合在一起就是業務從開始到結束的流轉過程。
從計算機系統的角度來講,工作流系統表示:業務過程的部分和整體在計算機應用環境的自動化操作。
2.工作流的三大要素 ①這個過程要做什麼? ②經過多少個步驟? ③每個步驟是由誰來做,做什麼,怎麼做? 3.工作流系統的組成
流程定義工具:定義流程(畫流程圖) 表單定製工具:要提交的資料的表單的定製(可以用建立一個(html form)表單的表單形式替代)
工作流引擎: 工作流框架的核心,驅動著流程的流程,流程的資料共享,資料儲存,流程的版本迭代....
管理監控工具
:監控每一個流程的運轉,管理每一個流程;
開發API:暴露給開發人員的api; 4.工作流需要解決的問題
    1)、流程的自動化流程控制
    2)、流程資料的儲存(歷史記錄,歷史資料的儲存);
    3)、流程版本的更替;(維護流程的版本更替);
    4)、流程執行期間資料的共享等;
流程都具有一定的通用性;流程框架抽取流程的通用性,來統一管理和維護流程;
5.工作流的相關概念 ①流程定義:(ProcessDefinition):
    流程的定義:流程圖。表示一個流程的資訊;一個流程定義(如:請假流程圖)
②流程例項:(ProcessInstance):
    啟動一個流程:稱為建立一個流程的例項;無數個流程例項(如員工提交的請假單審批流程)
③流程變數:(ProcessVariable):
    流程執行提交的資料,共享的資料,等;
④任務:(Task)
    每一步需要完成的工作算是一個任務;(每一個流程執行都需要完成自己的流程規定的任務)
⑤開始、結束(Start 、End)
    每一個流程只有一個入口,無數的出口;(正常結束的出口,異常結束的出口等)
⑥閘道器(Gateway):
    流程的分支節點(判斷節點);決定下一步走哪兒;

6.工作流產品 ①JBPM ②OSWorkFlow ③Shark ④信雅達 ⑤普元工作流 ⑥Activiti5 7.ProcessEngine ProcessEngine這個類是Activiti5的核心,所有的服務都需要通過ProcessEngine來建立,該類是執行緒安全的
Activiti5的持久化層採用的是Mybatis,這樣移植性好,底層Spring+MyBatis;
Activiti5主要包括7個Service,這些Service都是通過ProcessEngine建立
repositoryService(持久化服務)
runtimeService(執行時服務)
formService(表單服務)
identityService(身份資訊)
taskService(任務服務)
historyService(歷史資訊)
managementService(管理定時任務)
8.Activiti5框架表結構 Activiti使用到的表都是ACT_開頭的。
ACT_RE_*: ‘RE’表示repository(儲存),RepositoryService介面所操作的表。帶此字首的表包含的是靜態資訊,如,流程定義,流程的資源(圖片,規則等)。
ACT_RU_*: ‘RU’表示runtime,執行時表-RuntimeService。這是執行時的表儲存著流程變數,使用者任務,變數,職責(job)等執行時的資料。Activiti只儲存例項執行期間的執行時資料,當流程例項結束時,將刪除這些記錄。這就保證了這些執行時的表小且快。
ACT_ID_*: ’ID’表示identity (組織機構),IdentityService介面所操作的表。使用者記錄,流程中使用到的使用者和組。這些表包含標識的資訊,如使用者,使用者組,等等。
ACT_HI_*: ’HI’表示history,歷史資料表,HistoryService。就是這些表包含著流程執行的歷史相關資料,如結束的流程例項,變數,任務,等等
ACT_GE_*: 全域性通用資料及設定(general),各種情況都使用的資料。
act_ge_bytearray二進位制資料表
act_ge_property屬性資料表儲存整個流程引擎級別的資料,初始化表結構時,會預設插入三條記錄,
act_hi_actinst歷史節點表
act_hi_attachment歷史附件表
act_hi_comment歷史意見表
act_hi_identitylink歷史流程人員表
act_hi_detail歷史詳情表,提供歷史變數的查詢
act_hi_procinst歷史流程例項表
act_hi_taskinst歷史任務例項表
act_hi_varinst歷史變量表
act_id_group使用者組資訊表
act_id_info使用者擴充套件資訊表
act_id_membership使用者與使用者組對應資訊表
act_id_user使用者資訊表
act_re_deployment部署資訊表
act_re_model流程設計模型部署表
act_re_procdef流程定義資料表
act_ru_event_subscr  throwEvent、catchEvent時間監聽資訊表
act_ru_execution執行時流程執行例項表
act_ru_identitylink執行時流程人員表,主要儲存任務節點與參與者的相關資訊
act_ru_job執行時定時任務資料表
act_ru_task執行時任務節點表
act_ru_variable執行時流程變數資料表
9.流程框架的標準 Business Process Management (BPM). 工作流管理系統
BPMN 2.0:Business Process Modeling Notation(中文:業務流程建模與標註)
OMG組織維護業務流程建模規範,以後所有流程框架繪製流程圖都遵循這個規範;
二、流程框架的操作 1)、設計流程:畫流程圖;

2)、儲存流程:給資料庫中儲存繪製的流程圖(流程定義) 3)、匯出流程:實際上繪製的流程是一個xml檔案;bmpn規範;
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">   <process id="電話費報銷" name="話費報銷" isExecutable="true">     <startEvent id="startevent1" name="Start"></startEvent>     <userTask id="usertask1" name="部門經理審批"></userTask>     <sequenceFlow id="flow1" sourceRef="startevent1" targetRef="usertask1"></sequenceFlow>     <userTask id="usertask2" name="財務審批"></userTask>     <sequenceFlow id="flow2" sourceRef="usertask1" targetRef="usertask2"></sequenceFlow>     <userTask id="usertask3" name="總經理審批"></userTask>     <sequenceFlow id="flow3" sourceRef="usertask2" targetRef="usertask3"></sequenceFlow>     <endEvent id="endevent1" name="End"></endEvent>     <sequenceFlow id="flow4" sourceRef="usertask3" targetRef="endevent1"></sequenceFlow>   </process>   <bpmndi:BPMNDiagram id="BPMNDiagram_電話費報銷">     <bpmndi:BPMNPlane bpmnElement="電話費報銷" id="BPMNPlane_電話費報銷">       <bpmndi:BPMNShape bpmnElement="startevent1" id="BPMNShape_startevent1">         <omgdc:Bounds height="35.0" width="35.0" x="90.0" y="190.0"></omgdc:Bounds>       </bpmndi:BPMNShape>       <bpmndi:BPMNShape bpmnElement="usertask1" id="BPMNShape_usertask1">         <omgdc:Bounds height="55.0" width="105.0" x="170.0" y="180.0"></omgdc:Bounds>       </bpmndi:BPMNShape>       <bpmndi:BPMNShape bpmnElement="usertask2" id="BPMNShape_usertask2">         <omgdc:Bounds height="55.0" width="105.0" x="320.0" y="180.0"></omgdc:Bounds>       </bpmndi:BPMNShape>       <bpmndi:BPMNShape bpmnElement="usertask3" id="BPMNShape_usertask3">         <omgdc:Bounds height="55.0" width="105.0" x="470.0" y="180.0"></omgdc:Bounds>       </bpmndi:BPMNShape>       <bpmndi:BPMNShape bpmnElement="endevent1" id="BPMNShape_endevent1">         <omgdc:Bounds height="35.0" width="35.0" x="640.0" y="190.0"></omgdc:Bounds>       </bpmndi:BPMNShape>       <bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1">         <omgdi:waypoint x="125.0" y="207.0"></omgdi:waypoint>         <omgdi:waypoint x="170.0" y="207.0"></omgdi:waypoint>       </bpmndi:BPMNEdge>       <bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2">         <omgdi:waypoint x="275.0" y="207.0"></omgdi:waypoint>         <omgdi:waypoint x="320.0" y="207.0"></omgdi:waypoint>       </bpmndi:BPMNEdge>       <bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3">         <omgdi:waypoint x="425.0" y="207.0"></omgdi:waypoint>         <omgdi:waypoint x="470.0" y="207.0"></omgdi:waypoint>       </bpmndi:BPMNEdge>       <bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4">         <omgdi:waypoint x="575.0" y="207.0"></omgdi:waypoint>         <omgdi:waypoint x="640.0" y="207.0"></omgdi:waypoint>       </bpmndi:BPMNEdge>     </bpmndi:BPMNPlane>   </bpmndi:BPMNDiagram> </definitions> <process></process>規定整個流程的流轉;
<userTask ></userTask>規定使用者任務; <sequenceFlow></sequenceFlow>指定流轉方向等...
4)、流程部署:實際就是把流程的定義資訊(詳情)儲存到資料庫; 給資料儲存了流程定義
5)、啟動流程:按照流程定義啟動一次流程(流程例項)
6)、流程例項:流程框架控制自動流轉到下一步;
7)、簽收任務完成任務;完成以後,流程框架自動判斷來到下一步
8)、檢視歷史流程   
三、Activiti5框架的幾大元件

ProcessEngine :流程框架的核心 ;獲取各大元件 activiti的七大元件:都是由流程引擎得到的; 以下為元件的獲取方式: ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();
RuntimeService runtimeService = processEngine.getRuntimeService();
RepositoryService repositoryService = processEngine.getRepositoryService();
TaskService taskService = processEngine.getTaskService();
ManagementService managementService = processEngine.getManagementService();
IdentityService identityService = processEngine.getIdentityService();
HistoryService historyService = processEngine.getHistoryService();
FormService formService = processEngine.getFormService();
四、Activiti5的使用 1.導包(Activiti5預設使用的是h2的記憶體資料庫,如果要使用mysql需要匯入響應的驅動包        <dependency>
            <groupId>org.activiti</groupId>
            <artifactId>activiti-engine</artifactId>
            <version>5.22.0</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.42</version>
        </dependency>
2.編寫流程框架配置檔案(檔名:activiti.cfg.xml) <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- id必須是這個名稱 --> <beanid="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> <!--資料庫的連線相關資訊 --> <propertyname="jdbcUrl"value="jdbc:mysql://localhost:3306/activiti"/> <propertyname="jdbcDriver"value="com.mysql.jdbc.Driver"/> <propertyname="jdbcUsername"value="root"/> <propertyname="jdbcPassword"value="123456"/> <!-- 第一次啟動創鍵資料庫;以後升級資料庫表結構 --> <propertyname="databaseSchemaUpdate"value="true"/> <propertyname="jobExecutorActivate"value="false"/> <propertyname="asyncExecutorEnabled"value="true"/> <propertyname="asyncExecutorActivate"value="false"/> <!--設定解決亂碼問題  --> <propertyname="activityFontName"value="微軟雅黑"></property> <propertyname="annotationFontName"value="微軟雅黑"></property> <propertyname="labelFontName"value="微軟雅黑"></property> </bean> </beans>
3.獲取流程引擎     publicstaticvoid main(String[] args) { //第一次獲取流程引擎會建立很多表         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();         System.out.println(engine.toString());     }

第一次建立資料表時,此表中會有三條記錄:  
五、在eclipse中使用activiti5繪製流程圖 1.安裝繪製流程圖的外掛
  2.部署流程(把流程定義(流程圖)儲存到資料庫中);每次部署產生一個【流程定義】 /**      * 部署專案      */ @Test publicvoidtestDeployement() {         ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();         RepositoryService repositoryService = engine.getRepositoryService();         Deployment deployment = repositoryService.createDeployment().addClasspathResource("話費報銷流程.bpmn").deploy();         System.out.println(deployment.getName());         System.out.println(deployment.getId());         System.out.println(deployment.getDeploymentTime());     }
資料庫效果:
act_ge_bytearray  act_re_deployment  act_re_procdef  id_:流程定義的唯一id;流程引擎自動生成的; rev_:資料庫樂觀鎖機制
category_:分類
name_:流程定義的名字
key_:流程定義的key
version_:流程的版本號
deployment_id:那次部署產生的這個流程定義
resource_name_:流程定義的xml檔案的名字;
dgrm_resource_name_:流程圖的檔案的名字;
其他等等的資訊... 每一個流程圖都有三個資料;

 同一個流程部署多次會產生多個版本;根據每一個流程圖的id來區分; 3.查詢流程部署資訊  /**      * 檢視資料庫的流程部署資訊      */ @Test publicvoid testQueryPdeployment() {         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();         RepositoryService repositoryService = processEngine.getRepositoryService();         DeploymentQuery deploymentQuery = repositoryService.createDeploymentQuery();         List<Deployment> list = deploymentQuery.list(); for (Deployment deployment : list) {             System.out.println("部署流程id"+deployment.getId());             System.out.println("部署流程名字"+deployment.getName());             System.out.println("部署流程時間"+deployment.getDeploymentTime());         }     } 4.查詢流程定義資訊 /**      * 檢視資料庫的流程定義資訊      */ @Test publicvoid testQueryPdefintion(){         ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();         RepositoryService repositoryService = processEngine.getRepositoryService(); //獲取資料庫中所有的流程定義資訊         List<ProcessDefinition> list = repositoryService.createProcessDefinitionQuery().list(); for (ProcessDefinition processDefinition : list) {             System.out.println("部署的定義目錄"+processDefinition.getCategory());             System.out.println("部署的定義id"+processDefinition.getDeploymentId());             System.out.println("部署的定義key"+processDefinition.getKey());             System.out.println("部署的定義name"+processDefinition.getName());

相關推薦

Activiti5工作流程框架

一、工作流簡介 1.什麼是工作流? 簡單的理解就是工作的流程,這裡的流程指的是,完成一個企業中具體業務的一系列工作步驟,所有的步驟合在一起就是業務從開始到結束的流轉過程。 從計算機系統的角度來講,工作流系統表示:業務過程的部分和整體在計算機應用環境的自動化操作。

SpringMVC框架工作流程

spring 映射 servle 生成 del 視圖解析 http 即將 pan 1、SpringMVC的基本工作流程 2、SpringMVC具體工作流程 1、用戶發送請求至前端控制器DispatcherServlet 2、DispatcherServlet收到請

RDIFramework.NET ━ .NET快速信息化系統開發框架工作流程組件介紹

質量 可定制 soa 發包 三方 種類 control eight 統計 RDIFramework.NET ━ .NET快速信息化系統開發框架 工作流程組件介紹 RDIFramework.net,基於.NET的快速信息化系統開發、整合框架,給用戶和開發者最佳的.Net框架

SpringMVC框架及基本工作流程詳解

req isp 需要 用戶 數據呈現 工作流 esp servle 組件映射 傳統原生的JSP+Servlet在開發上過程上雖然簡單明了,JSP頁面傳遞數據到Servlet,Servlet整理數據(邏輯開發)或者從數據庫提取數據接著再轉發到JSP頁面上,但是其似乎只能止步於

了解SpringMVC框架及基本工作流程

adapter AD pri 頁面 解決 pos 普通 url 重定向 轉自:http://www.cnblogs.com/xxzhuang/p/5940709.html   傳統原生的JSP+Servlet在開發上過程上雖然簡單明了,JSP頁面傳遞數據到Servlet,S

Yarn框架工作流程研究

ide 一段 lin 占用 記錄 park 純粹 單個 task 一、概述 將公司集群升級到Yarn已經有一段時間,自己也對Yarn也研究了一段時間,現在開始記錄一下自己在研究Yarn過程中的一些筆記。這篇blog主要主要從大體上說說Yarn的基本架構以及其各個

三大框架(ssh)學習——Struts2工作流程分析

Struts2工作流程分析   STRUTS2框架內部流程 1. 客戶端傳送請求的tomcat伺服器。伺服器接受,將HttpServletRequest傳進來。 2. 請求經過一系列過濾器(如:ActionContextCleanUp、SimeMesh等) 3. Fil

Scrapy框架爬蟲小說網工作流程

1.需求工具 pycharm 小說網的域名 (www.qisuu.com) 第一步—–建立檔案 建立成功後顯示如圖: 這裡寫圖片描述 第二步——將建立在桌面上的scrapy檔案用pycharm開啟: 這是建立成功後在pycharm中的顯示 這裡寫圖片

Java框架Mybatis的工作流程及原理

Mybatis簡介:        MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置

SpringMVC框架工作流程

1、 使用者向伺服器傳送請求 請求被 SpringMVC 的前端控制器 DispatcherServlet 截獲。 2、DispatcherServlet 對請求的 URL進行解析 得到 URI(請求資源識別符號),然後根據該 URI,呼叫 HandlerMap

RDIFramework.NET ━ .NET快速資訊化系統開發框架工作流程元件介紹

RDIFramework.NET ━ .NET快速資訊化系統開發框架 工作流程元件介紹 RDIFramework.NET,基於.NET的快速資訊化系統開發、整合框架,給使用者和開發者最佳的.Net框架部署方案。 1、RDIFramework.NET框架介紹   RDIFramework.NET,基於.

RDIFramework.NET ━ .NET快速資訊化系統開發框架工作流程元件Web業務平臺

RDIFramework.NET ━ .NET快速資訊化系統開發框架  工作流程元件Web業務平臺 接前兩篇: 1、RDIFramework.NET 工作流程元件介紹   RDIFramework.NET框架V2.8以下版本不包含工作流程元件,在實際使用過程中,很多客戶提出了讓我們在框架

RDIFramework.NET ━ .NET快速資訊化系統開發框架工作流程元件WinForm業務平臺

RDIFramework.NET ━ .NET快速資訊化系統開發框架 工作流程元件WinForm業務平臺    接上篇: 1、RDIFramework.NET 工作流程元件介紹   RDIFramework.NET框架V2.8以下版本不包含工作流程元件,在實際使用過程中,很多客戶提出了讓我

ORM框架--mybatis的基本工作流程

ORM:Object Relation Mapping:物件關係對映,通俗理解就是將一個物件相關屬性和資料庫資料進行關聯(對映),傳統我們對資料庫資料的操作可以通過ORM框架轉移到對物件的操作上來,這無疑有利於提高程式的開發效率和專案的可維護性,本質是對傳

開發數字貨幣教程DApp框架工具以及工作流程

區塊鏈愛好者(QQ:53016353)  DApp開發框架 雖然有上文提到的工具就可以進行開發了,但是使用社群大神們創造的框架會讓開發更容易。 Truffle and Embark. 是Truffle把我領進了門。在Truffle出現之前的那個夏天,我目睹了一幫有天分的學

Scrapy框架的學習(1.scrapy的概念以及scrapy的工作流程)

 scrapy的概念 1.為什麼要學習Scrapy?      因為會讓我們的爬蟲更快、更強 2.什麼是scrapy?      (1) Scrapy是一個為了爬取網站資料,提

Django框架工作流程(Python)

1、瀏覽器傳送請求request給web伺服器; 2、web伺服器將請求轉發給Django框架處理; (Django接收到第一個請求,會呼叫中介軟體的__init__方法,完成中介軟體的初始化

Activiti工作框架學習(二)——使用Activiti提供的API完成流程操作

可以在專案中加入log4j,將logj4.properties檔案拷入到src目錄下,這樣框架執行的sql就可以輸出到到控制檯,log4j提供的日誌級別有以下幾種: Fatal  error  warn  info  debug  trace 一、部署流程定義 1,在工程專

Activiti工作框架學習七:流程定義圖以及流程例項執行狀態圖

在實際生產中,我們除了需要檢視流程定義資訊的列表外,還需要檢視相應的流程定義圖,以及每個流程例項的執行狀態圖 流程定義圖 流程例項執行狀態圖,實際上流程例項執行狀態圖就是在流程定義圖的基礎上,查到該流程例項執行的當前任務節點,並根據此任務節點查出

Struts2框架及實現原理和工作流程

Struts2為提供了一個為使用者快速構建應用程式的平臺。 Struts2是基於OpenSymphony的網路工程框架。 Struts2實現模型檢視控制器(MVC)設計模式。 在Struts2的模型、檢視和控制器中分別實現了Action,result和FilterDispa