(注:本文由廖貴賓翻譯,email:531622@qq.com,若引用請保留本申明和原鏈接)
10.2.8 循環特征 Loop Characteristics (原文 189頁)
活動節點(Activities)可以按指定順序重復執行,本質上就是循環(loop)。LoopCharacteristics的存在表明活動節點(Activity)支持循環行為。LoopCharacteristics 是一個抽象類。具體的子類明確定義各種不同的循環行為。
LoopCharacteristics 從類 BaseElement(見表8.5)繼承屬性和關聯。LoopCharacteristics並有擴展更多的屬性和關聯。然而,每個循環活動節點(Loop Activity)實例具有屬性的值可以是表達式(Expressions)。這些屬性值僅在循環活動節點(Loop Activity)被執行時才能被訪問。
圖10.45 顯示了活動節點(Activity)的循環特征(loop characteristics)的類圖,本圖包括了標准循環和多實例兩種類型。
循環特征(LoopCharacteristics)類從BaseElemnt類繼承屬性和關聯(如表8.5),但並沒有新增其它屬性和關聯。然而,一個循環活動(Loop Activity)的實例(instance)具有附加的屬性,見表10.27。
表10.27 - 循環活動(Loop Activity)的實例(instance)屬性
屬性名 |
用法描述 |
loopCounter:interger |
循環計數(LoopCounter)屬性用於運行時統計循環次數。由流程引擎自動更新。 |
標准循環特征(Standard Loop Characteristics)
標准循環特征類(StandardLoopCharacteristics)是基於一個布爾條件來決定是否繼續循環行為。只要布爾值為true,活動節點(Activity)就斷續循環。每次循環都可以對布爾值進行檢測,包括循環開始前和結束后都可以進行檢測。另外,循環計數可以用設定一個最大值(cap),循環計數的增加不能超過設定的最大值(cap)。
- 任務(Task)和子流程(Sub-Process)上的標准循環的圖標,是一個指向自身小箭頭。(如圖 10.46和圖10.47)。
- 循環圖標可以和補償(Compensation)圖標組合使用
標准循環特征類(StandardLoopCharacteristics)通過父類 LoopCharacteristics,繼承了BaseElement類的屬性和關聯(見圖8.5)。表10.28列出了標准循環特征類(StandardLoopCharacteristics)的新增的屬性和關聯。
表10.28 - StandardLoopCharacteristics元素的屬性和關聯表
屬性名 |
用法描述 |
testBefore:Boolean = false |
本標志用來控制對循環標志的檢測位置,在每次循環的循環體開始前檢測(testBefore=true),在循環體結束后檢測(testBefore=false)。 |
loopMaximun:interger[0..1] |
用於設定計數的最大值。 |
loopCondition:Expression[0..1] |
一個布爾的表達式,用於控制循環是否繼續。只要布爾值為true,活動節點(Activity)就繼續循環。循環行為可以不詳細描述,這意味着建模者可以簡單說明條件,這種情況下,循環不能被正式執行。 |
多實例特征(Multi-Instance Characteristics)
多實例特征類(MultiInstanceLoopCharacteristics)允許創建期望數量的活動節點(Activity)實例。這些節點可並行執行,也可按序執行。可以使用表達式來表示或計算希望的實例數量,也可應用數據驅動來得到相應的實例。這種情況下能用於操作數據集合的數據輸入(data input)需要詳細說明。集合中的元素數量決定着活動實例的數量。通過輸入數據關聯(Data Association)來產生數據輸入(data input)。建模者也能配置循環(loop)來控制標識(tokens)的產生。
- 用於任務和子流程的多實例(multi-instance)標記必須是三條豎短線。
- 如果多實例是並行執行的(屬性 isSequential = false),則用短線是豎着的(如圖10.48)。
- 如果多實例是串行執行的(屬性 isSequential = true),則用短線是橫着的(如圖10.49)。
- 多實例圖標可以和補償(Compensation)圖標組合使用。
多實例循環特性(MultiInstanceLoopCharacteristics)元素通過父類 LoopCharacteristics 元素從BaseElement(見表 8.5)繼承了屬性和關聯。表 10.29 列出了 多實例循環特性類(MultiInstanceLoopCharacteristics)新增的屬性和關聯。
表 10.29 - 多實例循環特性類(MultiInstanceLoopCharacteristics)的屬性和關聯
屬性名 |
用法描述 |
isSequential:Boolean = false |
本屬性標識活動實例節點是串行處理還是並行處理。 |
loopCardinality:Expression[0..1] |
數值表達式,用來決定要創建的活動實例的數量。一個活動實例對應於存儲在 ItemAwareElement 元素中數據集中的一個數據。 對於任務(Tasks),數據集應射到InputOutputSpecification中的 Data Input元素中。 對於子流程(Sub-Processes),數據集在子流程中上下文中的存有數據集的Data Object中。 為了初始化一個有效的活動實例(multi-instance)必須注明,loopCardinally表達式,或者注明loopDataInput, 二選一。 |
loopDataOutputRef: ItemAwareElement[0..1] |
ItemAwareElement 用來表示產生多實例的數據集。 對於任務(Tasks)該值應射到活動(Activity)中的InputOutputSpecification屬性中的Data Output中。 對於子流程(Sub-Process)該值應射到子流程上下文中的含有數據集的Data Object中。 |
inputDataItem:DataInput[0..1] |
是Data Input類型,是每個活動實例中存儲在 loopDataInput中的數據集中的一個數據。 在活動(Activity)的InputOutputSpecification中,這個Data Input 作為DataInputAssociation的數據源。這個Data Input的數據類型,必須是為 loopDataInput 定義的標量。 |
outputDataItem:DataOutput[0..1] |
是Data Output類型,用來關聯到存儲在 loopDataOutput中的集合中的單個數據元素。這個Data Output 能作為活動包含的InputOutputSpecificatio元素中的DataOutputAssociation關聯的目標。這個Data Output的數據類型,必須是為 loopDataOutput 定義的標量。 |
behavior: MultiInstanceBehavior = all { None | One | All | Complex } |
當活動實例中的完成事件發生時,Behavior屬性用來判斷循環是否完成的一個規則。它的取值可以為:None, One, All 和 Complex。分別代表以下行為:
對於為 None 和 One 的情況下,默認的SignalEventDefinition 事件會被多實例活動節點拋出,其中自動攜帶着事件發生的時間點。所有拋出的事件都會被多實例節點的邊界事件捕獲。 |
complexBehaviorDefinition: ComplexBehaviorDefinition[0..*] |
當behavior屬性設置為Complex時,該屬性用來控制什么時候產生什么事件(Evnets) |
completionCondition:Expression[0..1] |
該屬性定義一個產生布爾值輸出的表達式(Expression),當表達式值為true時,放棄所有的活動實例,並且產生結束標識。 |
oneBehaviorEventRef: EventDefinition[0..1] |
當behavior屬性設置為One,並且第一個活動實例節點已經完成時,該事件會被產生。 |
noneBehaviorEventRef: EventDefinition[0..1] |
當behavior屬性設置為None,並且某個活動實例節點已經完成時,該事件會被產生。 |
loopCounter:integer |
這個屬性只在內部生成的活動實例中有,用來記錄生成活動(Activity)的實例的順序。活動實例是按序生成的,當這個值為n,表示它是在第n個位置生成的。 |
numberOfInstances:integer |
這個屬性只在外部的多實例活動節點有,用來記錄多實例活動節點下,共生成了多少個活動實例。 |
numberOfActiveInstances:integer |
這個屬性只在外部的多實例活動節點有,用來表示多實例活動節點下,當前處於活動狀態的實例數量。對於按序執行的多實例活動,這個值不會大於1。 |
numberOfCompletedInstances:integer |
這個屬性只在外部的多實例活動節點有,用來表示多實例活動節點下,當前已經完成的活動實例數。 |
numberOfTerminatedInstances:integer |
這個屬性只在外部的多實例活動節點有,用來表示多實例活動節點下,當前被終止的活動實例數。numberOfTerminatedInstances加上numberOfCompletedInstances加上numberOfActiveInstances三個數的總和等於numberOfInstances |
復雜行為定義(Complex Behavior Definition)
當多實例活動(Multi-Instance Activity)設為Complex 方式時,ComplexBehaviorDefinition元素用來控制什么時候和哪個事件(Event)會被拋出。
ComplexBehaviorDefinition元素的屬性和關聯繼承自BaseElement(見表8.5),表10.31 列出了新增的屬性和關聯。
表10.31 – ComplexBehaviorDefinition 元素的屬性和關聯表
屬性名 |
用法描述 |
condition: Formal Expression |
這個屬性定義了一個布爾值的表達式,當表達式值為true時,停止(cancels)剩下的活動實例運行,並產生一個標准(token)。 |
event: ImplicitThrowEvent |
當 condition 表達式為true時,本屬性指定的事件將會被拋出,會被多實例活動(Multi-Instance Actitiy)的邊界事件 (boundary Event)捕獲。 |