' md2gost BPMN 2.0 macros for PlantUML ' Notation: OMG BPMN 2.0.2 (formal/2013-12-09), Ch. 7 graphical elements, ' Ch. 10 Process (events, activities, gateways), Ch. 9 Collaboration (pools, message flow). ' PlantUML cannot attach boundary events to the activity border or draw a true ' double-circle; thickness + stereotypes approximate start / intermediate / end. ' Gateways use hexagon — in this renderer it reads as a BPMN diamond. ' ' Usage (scheme ```bpmn / ```uml-bpmn wraps @startuml + this include): ' Pool(company, "Компания") { ' Lane(op, "Оператор") { ' Start(s) ' UserTask(t, "Проверить") ' XOR(gw) ' End(e) ' Flow(s, t) ' Flow(t, gw) ' CondFlow(gw, e, "нет") ' } ' } !ifndef BPMN_PUML !define BPMN_PUML hide stereotype skinparam shadowing false skinparam linetype polyline skinparam nodesep 28 skinparam ranksep 42 skinparam defaultTextAlignment center skinparam wrapWidth 140 skinparam ArrowColor #212121 skinparam Padding 2 ' --------------------------------------------------------------------------- ' Sprites (event / task markers, BPMN 2.0 Table 7.2–7.4) ' --------------------------------------------------------------------------- sprite $bpmnMsg [16x11/16] { 0000000000000000 0FFFFFFFFFFFFFF0 0F000000000000F0 0FF0000000000FF0 0F0FF000000FF0F0 0F000FFFFFF000F0 0F0000FFFF0000F0 0F000000000000F0 0F000000000000F0 0FFFFFFFFFFFFFF0 0000000000000000 } sprite $bpmnMsgFill [16x11/16] { 0000000000000000 0FFFFFFFFFFFFFF0 0FFFFFFFFFFFFFF0 0FFFFFFFFFFFFFF0 0FFFFFFFFFFFFFF0 0FFF0FFFFFF0FFF0 0FF000FFFF000FF0 0F00000FF00000F0 0F000000000000F0 0FFFFFFFFFFFFFF0 0000000000000000 } sprite $bpmnTimer [16x10/16] { 000000FFFF000000 0000FF0000FF0000 000F000FF000F000 00F0000FF0000F00 00F0000FF0000F00 00F0000FFFF00F00 00F0000000000F00 000F00000000F000 0000FF0000FF0000 000000FFFF000000 } sprite $bpmnError [16x9/16] { 0000000FF0000000 000000FF00000000 00000FFFFF000000 0000FF0000000000 000FFFFF00000000 000000FF00000000 00000FF000000000 0000FF0000000000 000FF00000000000 } sprite $bpmnSignal [16x8/16] { 00000000F0000000 0000000FFF000000 000000FF0FF00000 00000FF000FF0000 0000FF00000FF000 000FF0000000FF00 00FF000000000FF0 0FFFFFFFFFFFFFFF } sprite $bpmnSignalFill [16x8/16] { 00000000F0000000 0000000FFF000000 000000FFFFF00000 00000FFFFFFF0000 0000FFFFFFFFF000 000FFFFFFFFFFF00 00FFFFFFFFFFFFF0 0FFFFFFFFFFFFFFF } sprite $bpmnTerminate [16x9/16] { 00000FFFFFF00000 000FFFFFFFFFF000 00FFFFFFFFFFFF00 0FFFFFFFFFFFFFF0 0FFFFFFFFFFFFFF0 0FFFFFFFFFFFFFF0 00FFFFFFFFFFFF00 000FFFFFFFFFF000 00000FFFFFF00000 } sprite $bpmnEscalation [16x9/16] { 00000000F0000000 0000000FFF000000 000000FF0FF00000 00000FF000FF0000 0000FFFFFFFFF000 000000F000F00000 000000F000F00000 000000F000F00000 000000FFFFF00000 } sprite $bpmnComp [16x7/16] { 00F0000F00000000 0FF000FF00000000 FFF00FFF00000000 FFFF0FFFF0000000 FFF00FFF00000000 0FF000FF00000000 00F0000F00000000 } sprite $bpmnLink [16x7/16] { 0000000000000000 00000000000F0000 00000000000FF000 0FFFFFFFFFFFFF00 00000000000FF000 00000000000F0000 0000000000000000 } sprite $bpmnCond [16x10/16] { 0FFFFFFFFFF00000 0F00000000FF0000 0F00000000F0F000 0F00000000FFF000 0F00FFFF0000F000 0F0000000000F000 0F00FFFF0000F000 0F0000000000F000 0F00FFFF0000F000 0FFFFFFFFFFFF000 } sprite $bpmnMulti [16x8/16] { 00000000F0000000 000000FF0FF00000 00000F00000F0000 0000F0000000F000 000F000000000F00 000F000000000F00 0000F0000000F000 00000FFFFFFF0000 } sprite $bpmnParMulti [16x9/16] { 00000FFFFFF00000 000FF000000FF000 00F0000FF0000F00 0F00000FF00000F0 0F00FFFFFFFF00F0 0F00000FF00000F0 00F0000FF0000F00 000FF000000FF000 00000FFFFFF00000 } sprite $bpmnCancel [16x11/16] { 0FF0000000000FF0 00FF00000000FF00 000FF000000FF000 0000FF0000FF0000 00000FF00FF00000 000000FFFF000000 00000FF00FF00000 0000FF0000FF0000 000FF000000FF000 00FF00000000FF00 0FF0000000000FF0 } sprite $bpmnUser [16x10/16] { 000000FFFF000000 00000FFFFFF00000 00000FFFFFF00000 000000FFFF000000 0000000000000000 0000FFFFFFFF0000 000FF000000FF000 000FF000000FF000 000FF000000FF000 000FF000000FF000 } sprite $bpmnService [16x9/16] { 000000FFFF000000 0000FFF00FFF0000 000FF0FFFF0FF000 00FF00FFFF00FF00 00F0000000000F00 00FF00FFFF00FF00 000FF0FFFF0FF000 0000FFF00FFF0000 000000FFFF000000 } sprite $bpmnScript [16x9/16] { 0FFFFFFFFFF00000 0F00000000FF0000 0F00000000F0F000 0F00FFFF00FFF000 0F0000000000F000 0F00FFFF0000F000 0F0000000000F000 0F00FFFF0000F000 0FFFFFFFFFFFF000 } sprite $bpmnManual [16x7/16] { 000000000FF00000 00000000FFFF0000 0000FF0FF0FF0000 000FFFFFFFFFF000 000FFFFFFFFFF000 0000FFFFFFFF0000 00000FFFFFF00000 } sprite $bpmnRule [16x7/16] { 0FFFFFFFFFFFFFF0 0F000F000F0000F0 0FFFFFFFFFFFFFF0 0F000F000F0000F0 0FFFFFFFFFFFFFF0 0F000F000F0000F0 0FFFFFFFFFFFFFF0 } sprite $bpmnPlusBox [12x9/16] { FFFFFFFFFFFF F0000000000F F0000FF0000F F0000FF0000F F0FFFFFFFF0F F0000FF0000F F0000FF0000F F0000000000F FFFFFFFFFFFF } sprite $bpmnLoop [16x7/16] { 0000FFFFFF000000 000F000000F00000 00F000000000000F 0F00000000000FF0 0F000000000F0000 00F0000000F00000 000FFFFFF0000000 } sprite $bpmnAdhoc [16x5/16] { 0000000000000000 0FF0000FFF000FF0 000FF0F000FF0000 00000F00000F0000 0000000000000000 } sprite $bpmnMIPar [13x5/16] { 00F000F000F00 00F000F000F00 00F000F000F00 00F000F000F00 00F000F000F00 } sprite $bpmnMISeq [13x7/16] { 0000000000000 0FFFFFFFFFFF0 0000000000000 0FFFFFFFFFFF0 0000000000000 0FFFFFFFFFFF0 0000000000000 } ' --------------------------------------------------------------------------- ' Skin (colours are conventional, not mandated by the spec) ' --------------------------------------------------------------------------- skinparam circle<> { BackgroundColor #C8E6C9 BorderColor #2E7D32 BorderThickness 1.5 FontSize 10 } skinparam circle<> { BackgroundColor #C8E6C9 BorderColor #2E7D32 BorderThickness 1.5 BorderStyle dashed FontSize 10 } skinparam circle<> { BackgroundColor #FFF3E0 BorderColor #EF6C00 BorderThickness 2 FontSize 10 } skinparam circle<> { BackgroundColor #FFE0B2 BorderColor #E65100 BorderThickness 2 FontSize 10 } skinparam circle<> { BackgroundColor #FFCDD2 BorderColor #B71C1C BorderThickness 3.5 FontSize 10 } skinparam circle<> { BackgroundColor #FFF3E0 BorderColor #EF6C00 BorderThickness 2 FontSize 9 } skinparam circle<> { BackgroundColor #FFF3E0 BorderColor #EF6C00 BorderThickness 2 BorderStyle dashed FontSize 9 } skinparam hexagon<> { BackgroundColor #FFF8E1 BorderColor #F9A825 BorderThickness 1.5 FontSize 12 } skinparam rectangle<> { RoundCorner 22 BackgroundColor #FFFFFF BorderColor #1565C0 BorderThickness 1.4 FontSize 11 } skinparam rectangle<> { RoundCorner 22 BackgroundColor #FAFAFA BorderColor #1565C0 BorderThickness 1.4 FontSize 11 } skinparam rectangle<> { RoundCorner 22 BackgroundColor #FFFFFF BorderColor #0D47A1 BorderThickness 3 FontSize 11 } skinparam rectangle<> { RoundCorner 22 BackgroundColor #FAFAFA BorderColor #0D47A1 BorderThickness 2.5 FontSize 11 } skinparam rectangle<> { RoundCorner 22 BackgroundColor #FAFAFA BorderColor #6A1B9A BorderThickness 1.4 BorderStyle dashed FontSize 11 } skinparam rectangle<> { RoundCorner 0 BackgroundColor #F5F5F5 BorderColor #212121 BorderThickness 1.6 FontSize 12 FontStyle bold } skinparam rectangle<> { RoundCorner 0 BackgroundColor #FFFFFF BorderColor #757575 BorderThickness 1 FontSize 11 } skinparam rectangle<> { RoundCorner 0 BackgroundColor #EEEEEE BorderColor #212121 BorderThickness 1.6 FontSize 12 FontStyle bold } skinparam rectangle<> { RoundCorner 8 BackgroundColor transparent BorderColor #9E9E9E BorderThickness 1.2 BorderStyle dashed FontSize 10 } skinparam file<> { BackgroundColor #E3F2FD BorderColor #1565C0 FontSize 10 } skinparam database<> { BackgroundColor #E8F5E9 BorderColor #2E7D32 FontSize 10 } skinparam note { BackgroundColor #FFFDE7 BorderColor #F9A825 FontSize 10 } ' --------------------------------------------------------------------------- ' Internals ' --------------------------------------------------------------------------- !unquoted procedure $bpmnCircle($alias, $stereo, $icon, $label) !if ($icon == "") !if ($label == "") circle " " as $alias <<$stereo>> !else circle "$label" as $alias <<$stereo>> !endif !else !if ($label == "") circle "<$$icon>" as $alias <<$stereo>> !else circle "<$$icon>\n$label" as $alias <<$stereo>> !endif !endif !endprocedure !unquoted procedure $bpmnGW($alias, $mark, $label) !if ($label == "") hexagon "$mark" as $alias <> !else hexagon "$mark\n$label" as $alias <> !endif !endprocedure !unquoted procedure $bpmnRect($alias, $stereo, $icon, $label, $marker="") !if ($icon == "") !if ($marker == "") rectangle "$label" as $alias <<$stereo>> !else rectangle "$label\n\n<$$marker>" as $alias <<$stereo>> !endif !else !if ($marker == "") rectangle "<$$icon> $label" as $alias <<$stereo>> !else rectangle "<$$icon> $label\n\n<$$marker>" as $alias <<$stereo>> !endif !endif !endprocedure ' --------------------------------------------------------------------------- ' Swimlanes — BPMN 2.0 §9.2 Pool / §9.3 Lane ' Pool(...) { ... } Lane(...) { ... } ' --------------------------------------------------------------------------- !unquoted procedure Pool($alias, $label) rectangle "$label" as $alias <> !endprocedure !unquoted procedure Lane($alias, $label) rectangle "$label" as $alias <> !endprocedure !unquoted procedure BlackBoxPool($alias, $label) rectangle "$label" as $alias <> !endprocedure !unquoted procedure Participant($alias, $label) BlackBoxPool($alias, $label) !endprocedure !unquoted procedure Group($alias, $label) rectangle "$label" as $alias <> !endprocedure ' --------------------------------------------------------------------------- ' Start events — §10.5.2 (None, Message, Timer, Conditional, Signal, Error, ' Escalation, Multiple, Parallel Multiple). Error/Escalation only in event sub-process. ' --------------------------------------------------------------------------- !unquoted procedure Start($alias, $label="") $bpmnCircle($alias, "bpmnStart", "", $label) !endprocedure !unquoted procedure StartEvent($alias, $label="") Start($alias, $label) !endprocedure !unquoted procedure StartMessage($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnMsg", $label) !endprocedure !unquoted procedure StartTimer($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnTimer", $label) !endprocedure !unquoted procedure StartCondition($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnCond", $label) !endprocedure !unquoted procedure StartConditional($alias, $label="") StartCondition($alias, $label) !endprocedure !unquoted procedure StartSignal($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnSignal", $label) !endprocedure !unquoted procedure StartError($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnError", $label) !endprocedure !unquoted procedure StartEscalation($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnEscalation", $label) !endprocedure !unquoted procedure StartMultiple($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnMulti", $label) !endprocedure !unquoted procedure StartParallelMultiple($alias, $label="") $bpmnCircle($alias, "bpmnStart", "bpmnParMulti", $label) !endprocedure !unquoted procedure StartNI($alias, $label="") $bpmnCircle($alias, "bpmnStartNI", "", $label) !endprocedure !unquoted procedure StartMessageNI($alias, $label="") $bpmnCircle($alias, "bpmnStartNI", "bpmnMsg", $label) !endprocedure !unquoted procedure StartTimerNI($alias, $label="") $bpmnCircle($alias, "bpmnStartNI", "bpmnTimer", $label) !endprocedure !unquoted procedure StartSignalNI($alias, $label="") $bpmnCircle($alias, "bpmnStartNI", "bpmnSignal", $label) !endprocedure ' --------------------------------------------------------------------------- ' Intermediate catching / throwing — §10.5.4 ' --------------------------------------------------------------------------- !unquoted procedure Intermediate($alias, $label="") $bpmnCircle($alias, "bpmnInter", "", $label) !endprocedure !unquoted procedure CatchMessage($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnMsg", $label) !endprocedure !unquoted procedure ThrowMessage($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnMsgFill", $label) !endprocedure !unquoted procedure CatchTimer($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnTimer", $label) !endprocedure !unquoted procedure CatchSignal($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnSignal", $label) !endprocedure !unquoted procedure ThrowSignal($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnSignalFill", $label) !endprocedure !unquoted procedure CatchError($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnError", $label) !endprocedure !unquoted procedure CatchEscalation($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnEscalation", $label) !endprocedure !unquoted procedure ThrowEscalation($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnEscalation", $label) !endprocedure !unquoted procedure CatchCondition($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnCond", $label) !endprocedure !unquoted procedure CatchLink($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnLink", $label) !endprocedure !unquoted procedure ThrowLink($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnLink", $label) !endprocedure !unquoted procedure CatchCompensation($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnComp", $label) !endprocedure !unquoted procedure ThrowCompensation($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnComp", $label) !endprocedure !unquoted procedure CatchCancel($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnCancel", $label) !endprocedure !unquoted procedure CatchMultiple($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnMulti", $label) !endprocedure !unquoted procedure ThrowMultiple($alias, $label="") $bpmnCircle($alias, "bpmnThrow", "bpmnMulti", $label) !endprocedure !unquoted procedure CatchParallelMultiple($alias, $label="") $bpmnCircle($alias, "bpmnInter", "bpmnParMulti", $label) !endprocedure ' --------------------------------------------------------------------------- ' Boundary events — interrupting (solid) / non-interrupting (dashed). Attach() ' --------------------------------------------------------------------------- !unquoted procedure BoundaryMessage($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnMsg", $label) !endprocedure !unquoted procedure BoundaryTimer($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnTimer", $label) !endprocedure !unquoted procedure BoundaryError($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnError", $label) !endprocedure !unquoted procedure BoundaryEscalation($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnEscalation", $label) !endprocedure !unquoted procedure BoundarySignal($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnSignal", $label) !endprocedure !unquoted procedure BoundaryCancel($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnCancel", $label) !endprocedure !unquoted procedure BoundaryCompensation($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnComp", $label) !endprocedure !unquoted procedure BoundaryCondition($alias, $label="") $bpmnCircle($alias, "bpmnBoundary", "bpmnCond", $label) !endprocedure !unquoted procedure BoundaryMessageNI($alias, $label="") $bpmnCircle($alias, "bpmnBoundaryNI", "bpmnMsg", $label) !endprocedure !unquoted procedure BoundaryTimerNI($alias, $label="") $bpmnCircle($alias, "bpmnBoundaryNI", "bpmnTimer", $label) !endprocedure !unquoted procedure BoundaryEscalationNI($alias, $label="") $bpmnCircle($alias, "bpmnBoundaryNI", "bpmnEscalation", $label) !endprocedure !unquoted procedure BoundarySignalNI($alias, $label="") $bpmnCircle($alias, "bpmnBoundaryNI", "bpmnSignal", $label) !endprocedure !unquoted procedure BoundaryConditionNI($alias, $label="") $bpmnCircle($alias, "bpmnBoundaryNI", "bpmnCond", $label) !endprocedure !unquoted procedure Attach($activity, $event) $activity -[hidden]down- $event !endprocedure !unquoted procedure Attach_R($activity, $event) $activity -[hidden]right- $event !endprocedure ' --------------------------------------------------------------------------- ' End events — §10.5.3 (None, Message, Error, Escalation, Cancel, Compensation, ' Signal, Multiple, Terminate) ' --------------------------------------------------------------------------- !unquoted procedure End($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "", $label) !endprocedure !unquoted procedure EndEvent($alias, $label="") End($alias, $label) !endprocedure !unquoted procedure EndMessage($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnMsgFill", $label) !endprocedure !unquoted procedure EndError($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnError", $label) !endprocedure !unquoted procedure EndEscalation($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnEscalation", $label) !endprocedure !unquoted procedure EndCancel($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnCancel", $label) !endprocedure !unquoted procedure EndCompensation($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnComp", $label) !endprocedure !unquoted procedure EndSignal($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnSignalFill", $label) !endprocedure !unquoted procedure EndMultiple($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnMulti", $label) !endprocedure !unquoted procedure EndTerminate($alias, $label="") $bpmnCircle($alias, "bpmnEnd", "bpmnTerminate", $label) !endprocedure !unquoted procedure Terminate($alias, $label="") EndTerminate($alias, $label) !endprocedure ' --------------------------------------------------------------------------- ' Activities — §10.3 Task types + markers (loop, MI, compensation, ad-hoc) ' --------------------------------------------------------------------------- !unquoted procedure Task($alias, $label, $type="none", $marker="") !if ($type == "user") $bpmnRect($alias, "bpmnTask", "bpmnUser", $label, $marker) !elseif ($type == "service") $bpmnRect($alias, "bpmnTask", "bpmnService", $label, $marker) !elseif ($type == "script") $bpmnRect($alias, "bpmnTask", "bpmnScript", $label, $marker) !elseif ($type == "manual") $bpmnRect($alias, "bpmnTask", "bpmnManual", $label, $marker) !elseif ($type == "send") $bpmnRect($alias, "bpmnTask", "bpmnMsgFill", $label, $marker) !elseif ($type == "receive") $bpmnRect($alias, "bpmnTask", "bpmnMsg", $label, $marker) !elseif ($type == "rule") $bpmnRect($alias, "bpmnTask", "bpmnRule", $label, $marker) !elseif ($type == "businessrule") $bpmnRect($alias, "bpmnTask", "bpmnRule", $label, $marker) !else $bpmnRect($alias, "bpmnTask", "", $label, $marker) !endif !endprocedure !unquoted procedure UserTask($alias, $label, $marker="") Task($alias, $label, "user", $marker) !endprocedure !unquoted procedure ServiceTask($alias, $label, $marker="") Task($alias, $label, "service", $marker) !endprocedure !unquoted procedure ScriptTask($alias, $label, $marker="") Task($alias, $label, "script", $marker) !endprocedure !unquoted procedure ManualTask($alias, $label, $marker="") Task($alias, $label, "manual", $marker) !endprocedure !unquoted procedure SendTask($alias, $label, $marker="") Task($alias, $label, "send", $marker) !endprocedure !unquoted procedure ReceiveTask($alias, $label, $marker="") Task($alias, $label, "receive", $marker) !endprocedure !unquoted procedure BusinessRuleTask($alias, $label, $marker="") Task($alias, $label, "rule", $marker) !endprocedure !unquoted procedure LoopTask($alias, $label) Task($alias, $label, "none", "bpmnLoop") !endprocedure !unquoted procedure SubProcess($alias, $label) $bpmnRect($alias, "bpmnSubProcess", "", $label, "bpmnPlusBox") !endprocedure !unquoted procedure SubProcessExpanded($alias, $label) rectangle "$label" as $alias <> !endprocedure !unquoted procedure CallActivity($alias, $label) $bpmnRect($alias, "bpmnCall", "", $label, "bpmnPlusBox") !endprocedure !unquoted procedure Transaction($alias, $label) $bpmnRect($alias, "bpmnTransaction", "", $label, "bpmnPlusBox") !endprocedure !unquoted procedure EventSubProcess($alias, $label) rectangle "$label" as $alias <> !endprocedure !unquoted procedure AdHocSubProcess($alias, $label) $bpmnRect($alias, "bpmnSubProcess", "", $label, "bpmnAdhoc") !endprocedure ' --------------------------------------------------------------------------- ' Gateways — §10.6 (Exclusive, Parallel, Inclusive, Complex, Event-Based) ' --------------------------------------------------------------------------- !unquoted procedure Exclusive($alias, $label="") $bpmnGW($alias, "×", $label) !endprocedure !unquoted procedure XOR($alias, $label="") Exclusive($alias, $label) !endprocedure !unquoted procedure Xor($alias, $label="") Exclusive($alias, $label) !endprocedure !unquoted procedure Gateway($alias, $label="") Exclusive($alias, $label) !endprocedure !unquoted procedure Parallel($alias, $label="") $bpmnGW($alias, "+", $label) !endprocedure !unquoted procedure AND($alias, $label="") Parallel($alias, $label) !endprocedure !unquoted procedure And($alias, $label="") Parallel($alias, $label) !endprocedure !unquoted procedure Inclusive($alias, $label="") $bpmnGW($alias, "○", $label) !endprocedure !unquoted procedure OR($alias, $label="") Inclusive($alias, $label) !endprocedure !unquoted procedure Or($alias, $label="") Inclusive($alias, $label) !endprocedure !unquoted procedure ComplexGW($alias, $label="") $bpmnGW($alias, "*", $label) !endprocedure !unquoted procedure Complex($alias, $label="") ComplexGW($alias, $label) !endprocedure !unquoted procedure EventBased($alias, $label="") $bpmnGW($alias, "◇", $label) !endprocedure !unquoted procedure EventBasedGateway($alias, $label="") EventBased($alias, $label) !endprocedure !unquoted procedure ExclusiveEventBased($alias, $label="") $bpmnGW($alias, "◇", $label) !endprocedure !unquoted procedure ParallelEventBased($alias, $label="") $bpmnGW($alias, "⊕", $label) !endprocedure ' --------------------------------------------------------------------------- ' Connecting objects — §8.4.13 Sequence Flow, Message Flow, Association ' Default = slash; conditional = mini-diamond (label prefixes as stand-in) ' --------------------------------------------------------------------------- !unquoted procedure Flow($from, $to, $label="") !if ($label == "") $from --> $to !else $from --> $to : $label !endif !endprocedure !unquoted procedure Flow_R($from, $to, $label="") !if ($label == "") $from -right-> $to !else $from -right-> $to : $label !endif !endprocedure !unquoted procedure Flow_L($from, $to, $label="") !if ($label == "") $from -left-> $to !else $from -left-> $to : $label !endif !endprocedure !unquoted procedure Flow_D($from, $to, $label="") !if ($label == "") $from -down-> $to !else $from -down-> $to : $label !endif !endprocedure !unquoted procedure Flow_U($from, $to, $label="") !if ($label == "") $from -up-> $to !else $from -up-> $to : $label !endif !endprocedure !unquoted procedure SequenceFlow($from, $to, $label="") Flow($from, $to, $label) !endprocedure !unquoted procedure CondFlow($from, $to, $cond) $from --> $to : ◇ $cond !endprocedure !unquoted procedure DefaultFlow($from, $to, $label="") !if ($label == "") $from --> $to : ╱ !else $from --> $to : ╱ $label !endif !endprocedure !unquoted procedure MessageFlow($from, $to, $label="") !if ($label == "") $from ..> $to !else $from ..> $to : $label !endif !endprocedure !unquoted procedure MessageFlow_R($from, $to, $label="") !if ($label == "") $from -[dashed]right-> $to !else $from -[dashed]right-> $to : $label !endif !endprocedure !unquoted procedure Assoc($from, $to, $label="") !if ($label == "") $from .. $to !else $from .. $to : $label !endif !endprocedure !unquoted procedure Association($from, $to, $label="") Assoc($from, $to, $label) !endprocedure !unquoted procedure DataAssoc($from, $to, $label="") !if ($label == "") $from ..> $to !else $from ..> $to : $label !endif !endprocedure ' --------------------------------------------------------------------------- ' Data / artifacts — §7.1.1.7 Data, Group, Text Annotation ' --------------------------------------------------------------------------- !unquoted procedure DataObject($alias, $label) file "$label" as $alias <> !endprocedure !unquoted procedure DataInput($alias, $label) file "▷ $label" as $alias <> !endprocedure !unquoted procedure DataOutput($alias, $label) file "$label ▷" as $alias <> !endprocedure !unquoted procedure Collection($alias, $label) file "$label\n<$bpmnMIPar>" as $alias <> !endprocedure !unquoted procedure DataStore($alias, $label) database "$label" as $alias <> !endprocedure !unquoted procedure Annotation($alias, $text) note "$text" as $alias !endprocedure !unquoted procedure TextAnnotation($alias, $text) Annotation($alias, $text) !endprocedure ' --------------------------------------------------------------------------- ' Layout helpers ' --------------------------------------------------------------------------- !unquoted procedure Lay_R($from, $to) $from -[hidden]right-> $to !endprocedure !unquoted procedure Lay_L($from, $to) $from -[hidden]left-> $to !endprocedure !unquoted procedure Lay_D($from, $to) $from -[hidden]down-> $to !endprocedure !unquoted procedure Lay_U($from, $to) $from -[hidden]up-> $to !endprocedure !procedure BPMN_HORIZONTAL() left to right direction !endprocedure !procedure BPMN_VERTICAL() top to bottom direction !endprocedure !procedure BPMN_ORTHO() skinparam linetype ortho !endprocedure !procedure BPMN_POLYLINE() skinparam linetype polyline !endprocedure !procedure BPMN_LEGEND() legend right BPMN 2.0 |= Элемент |= Смысл | | тонкий круг | Start Event | | двойная толщина | Intermediate | | жирный круг | End Event | | ● внутри конца | Terminate | | скруглённый прямоугольник | Activity / Task | | ромб × | Exclusive (XOR) | | ромб + | Parallel (AND) | | ромб ○ | Inclusive (OR) | | ромб ◇ | Event-Based | | сплошная стрелка | Sequence Flow | | пунктир | Message Flow | | ╱ | Default Flow | | ◇ на стрелке | Conditional Flow | endlegend !endprocedure !endif