官术网_书友最值得收藏!

2.3 BPM相關標準

BPM的發展過程中,在基于Web服務的XML執行語言方面進行過很多探索,如BPEL、BPMN等語言標準。BPEL是一種基于XML的、用于描寫業務過程的編程語言,是一種用于產品間交換的標準。業務過程中的各步驟則由Web服務實現。BPMN是一種基于流程圖的通用可視化標準,提供通用、易于理解的流程符號。BPMN在業務流程設計與業務流程實現之間搭建了一座標準化橋梁。目前,國內市場上的BPM產品多采用的BPMN 2.0標準。

2.3.1 BPMN 2.0概述

BPMN 2.0是OMG于2011年推出的一種業務流程建模通用語言標準,是對BPMN 1.0的重定義。BPMN 2.0相對于BPMN 1.0、XPDL、BPML及BPEL等規范最大的區別是定義了規范的執行語義和格式,利用標準圖元描述真實業務發生過程,保證同一業務流程在不同的工作流引擎下的執行結果是一致的。制定BPMN 2.0標準的一個目的是提供一種能夠創建簡單易懂業務流程模型的機制,以處理復雜的業務流程。為此,BPMN 2.0定義了豐富的元素,并對這些元素進行了分類,使用戶能夠輕松識別,從而讀懂并理解模型。掌握了BPMN 2.0基本元素,就掌握了BPMN 2.0的核心。BPMN 2.0基本元素分類及符號如表2.1和表2.2所示。

表2.1 BPMN 2.0基本元素分類

表2.2 BPMN 2.0基本元素符號

圖2.4使用BPMN 2.0中的圖形符號創建了一個簡單請假流程示例,主要由事件、活動、網關、順序流這4種基本元素構成。

圖2.4 簡單請假流程示例

流程定義文件擴展名一般為.bpmn.xml或者.bpmn20.xml,可以看出BPMN 2.0實際上基于XML表示業務流程。使用文本編輯器可以打開該請假流程示例的流程定義文件,其中內容如下:

<?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:xsd="http://www.w3.org/2001/XMLSchema"
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/processdef"> <process id="process_simple" name="請假流程" isExecutable="true"> <startEvent id="startEvent1"/> <userTask id="leave_apply" name="請假申請" activiti:assignee="${initiator}"
activiti:formKey="simple_form"/> <sequenceFlow id="sf1" sourceRef="startEvent1" targetRef="leave_apply"/> <userTask id="leader_approval" name="領導審批" activiti:assignee="${leader}"
activiti:formKey="simple_form"/> <sequenceFlow id="sf2" sourceRef="leave_apply" targetRef="leader_approval"/> <exclusiveGateway id="gateway1"/> <sequenceFlow id="sf3" sourceRef="leader_approval" targetRef="gateway1"/> <serviceTask id="holiday_management" name="假期管理"/> <endEvent id="endEvent1"/> <sequenceFlow id="sf4" sourceRef="holiday_management" targetRef="endEvent1"/> <sequenceFlow id="sf5" name="通過" sourceRef="gateway1"
targetRef="holiday_management"> <conditionExpression xsi:type="tFormalExpression"> <![CDATA[${task_領導審批_outcome=='agree'}]]></conditionExpression> </sequenceFlow> <sequenceFlow id="sf6" name="駁回" sourceRef="gateway1" targetRef="leave_apply"> <conditionExpression xsi:type="tFormalExpression"> <![CDATA[${task_領導審批_outcome=='disagree'}]]></conditionExpression> </sequenceFlow> </process> <bpmndi:BPMNDiagram id="BPMNDiagram_qj"> <bpmndi:BPMNPlane bpmnElement="qj" id="BPMNPlane_qj"> <bpmndi:BPMNShape bpmnElement="startEvent1" id="BPMNShape_startEvent1"> <omgdc:Bounds height="30.0" width="30.0" x="100.0" y="163.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="leave_apply" id="BPMNShape_leave_apply"> <omgdc:Bounds height="80.0" width="100.0" x="175.0" y="138.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="leader_approval" id="BPMNShape_leader_approval"> <omgdc:Bounds height="80.0" width="100.0" x="320.0" y="138.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="gateway1" id="BPMNShape_gateway1"> <omgdc:Bounds height="40.0" width="40.0" x="465.0" y="158.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="holiday_management" id="BPMNShape_holiday_management"> <omgdc:Bounds height="80.0" width="100.0" x="570.0" y="138.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNShape bpmnElement="endEvent1" id="BPMNShape_endEvent1"> <omgdc:Bounds height="28.0" width="28.0" x="715.0" y="164.0"/> </bpmndi:BPMNShape> <bpmndi:BPMNEdge bpmnElement="sf5" id="BPMNEdge_sf5"> <omgdi:waypoint x="504.57089552238807" y="178.42910447761193"/> <omgdi:waypoint x="570.0" y="178.18587360594796"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sf1" id="BPMNEdge_sf1"> <omgdi:waypoint x="130.0" y="178.0"/> <omgdi:waypoint x="175.0" y="178.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sf4" id="BPMNEdge_sf4"> <omgdi:waypoint x="670.0" y="178.0"/> <omgdi:waypoint x="715.0" y="178.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sf2" id="BPMNEdge_sf2"> <omgdi:waypoint x="275.0" y="178.0"/> <omgdi:waypoint x="320.0" y="178.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sf6" id="BPMNEdge_sf6"> <omgdi:waypoint x="485.5" y="158.5"/> <omgdi:waypoint x="485.5" y="110.0"/> <omgdi:waypoint x="225.0" y="110.0"/> <omgdi:waypoint x="225.0" y="138.0"/> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge bpmnElement="sf3" id="BPMNEdge_sf3"> <omgdi:waypoint x="420.0" y="178.2164502164502"/> <omgdi:waypoint x="465.4130434782609" y="178.41304347826087"/> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> </definitions>

流程定義文件的根元素是definitions,該元素至少需要包含xmlns和targetNamespace兩個屬性,xmlns用于聲明默認命名空間,targetNamespace用于聲明目標命名空間。這些屬性值通常表示為固定的URI。每個流程定義文件都必須要包含這些屬性。此外,每個流程定義文件都包含BPMN業務流程和流程圖形化展示兩部分,分別對應根元素definitions的兩個子元素:process和BPMNDiagram。

子元素process代表一個真正的業務流程定義。definitions可以包含多個process,不過建議只包含一個,以簡化流程定義開發和維護的難度。process元素有3個屬性:id、name和isExecutable。屬性id是必填項,是業務流程的標識,用以啟動一個流程實例;屬性name用于定義業務流程名稱;屬性isExecutable用于定義流程是否可執行。

使用BPMN定義的元素都包含在process元素下,在上述請假流程示例的流程定義文件中,process元素包括1個開始事件(startEvent)、2個用戶任務(userTask)、1個排他網關(exclusiveGateway)、1個服務任務(serviceTask)、1個結束事件(endEvent)和6個順序流(sequenceFlow)。工作流引擎在執行業務流程時會讀取這部分內容來獲取業務流程規則。

BPMNDiagram定義了業務流程模型的布局,包括每個BPMN元素的位置和大小等信息。流程設計工具可以根據BPMNDiagram中的描述信息繪制可視化流程圖,讓用戶直觀地理解業務流程。

2.3.2 BPMN 2.0結構

在BPMN 2.0基本元素中,要重點掌握事件、活動、網關這3類流對象。它們是BPMN 2.0的核心結構,如圖2.5所示。

圖2.5 BPMN 2.0核心結構

1.事件

事件主要分為開始事件、中間事件、邊界事件和結束事件。

開始事件是流程的起點,定義流程如何啟動,以及顯示的圖標類型。在流程定義文件中,開始事件類型由子元素聲明定義。根據不同的觸發條件,可將開始事件分為不同類型,如表2.3所示。

表2.3 依觸發條件劃分的開始事件類型

結束事件標志著流程或子流程中其一個分支結束。結束事件總是拋出型事件。這意味著當流程執行到達結束事件時,會拋出一個結果,結果類型由事件內部自帶的填充圖標表示。在流程定義文件中,結束事件類型由子元素聲明定義。根據不同的觸發條件,可將結束事件分為不同類型,如表2.4所示。

表2.4 依觸發條件劃分的結束事件類型

開始事件和結束事件之間發生的事件統稱為中間事件。中間事件會影響流程的流轉路徑,但不會啟動或直接終止流程。按照其特性,中間事件可以分為中間捕獲事件和中間拋出事件兩類。當流程執行到中間捕獲事件時,它會一直處于待觸發狀態,直到接收特定信息時被觸發;當流程執行到中間拋出事件時,它會被自動觸發并拋出相應的結果或者信息。中間事件類型如表2.5所示。

表2.5 中間事件類型

邊界事件是一種特殊的中間事件,依附在活動上。邊界事件永遠不會拋出。這意味著當活動運行時,邊界事件將監聽特定類型的觸發器。當工作流引擎捕獲到邊界事件時,會終止活動,并沿該事件的外出順序流繼續執行。根據不同的觸發條件,可將邊界事件分為不同類型,如表2.6所示。

表2.6 依觸發條件劃分的邊界事件類型

2.活動

活動是業務流程定義的核心元素,是業務流程中執行的工作或任務的統稱。在工作流中所有具備生命周期狀態的元素可以稱為“活動”。

活動既可以是流程的基本處理單元(如人工任務、服務任務等),也可以是組合單元(如調用活動、嵌套子流程等)。

活動表示為圓角矩形。活動類型如表2.7所示。

表2.7 活動類型

3.網關

網關用于控制順序流在流程中的匯聚和發散。從其名稱可以看出,它具備網關門控機制。網關與活動一樣,能夠使用或生成額外的令牌,可以有效控制給定流程的執行語義。兩者的主要區別在于,網關不代表正在完成的“工作”,它對正在執行的流程的運行成本、時間等的影響為零。

網關可以定義所有類型的業務流程序列流行為,如決策/分支(獨占、包含和復雜)、合并、分叉和加入等。網關表示為菱形,雖然菱形傳統上用于表示排他性決策,但BPMN 2.0擴展了菱形行為,所有類型的網關都有一個內部指示器或標記來表明正在使用的網關類型。網關類型如表2.8所示。

表2.8 網關類型

主站蜘蛛池模板: 乐清市| 定陶县| 聂荣县| 青冈县| 闽清县| 长海县| 莆田市| 台州市| 通许县| 乡城县| 突泉县| 瓦房店市| 蕉岭县| 正镶白旗| 彩票| 怀集县| 专栏| 盐源县| 栾川县| 宜都市| 大城县| 建德市| 嘉善县| 芜湖县| 河北区| 宁津县| 江安县| 克什克腾旗| 太仓市| 南安市| 谷城县| 保靖县| 阿拉尔市| 环江| 克拉玛依市| 邯郸市| 耿马| 偃师市| 泰州市| 巴林左旗| 镇原县|