1. CMMN Design & Implementation Notes

1.1. CMMN Specification Issues (and interpretations) 

During the course of implementing a working CMMN engine based on CMMN specification version 1.0, a number of specification issues (omissions, ambiguities) were identified.

1.1.1. ManualActivationRule

The item control is called ManualActivationRule. The symbol is modeled after a tape recorder play button. Having the symbol on a model element means that there is a manual activation rule configured for the element. By naming (and table 5.40 in the spec), a rule evaluating to 'true' means manual activation. Not specifying a rule should, according to the specification (figure 5.12) also evaluate to a value of 'true'. This leads to the situation where both of the following tasks have manual activation. This looks like a contradiction and is confusing for modelers as they, in order to configure automatic activation, must define a manual activation rule that resolves to false.

manualActivation

We decided to handle this differently. In the current implementation, a missing manual activation rule defaults to false, meaning automatic activation. Thus, the task on the left auto starts. Another advantage of this is that all missing plan item controls (manual activation, repetition, required) default to false in the case of a missing rule.

1.1.2. Sentry Evaluation

The order and logic related to the evaluation of sentries of a CMMN model is not at all specified in CMMN specification version 1.0. Because of this, the runtime-evaluation of CMMN models in our implementation is likely to differ from other vendors.

1.1.3. Implementing the RepetitionRule

The specification is not clear on how to handle the repetition rule in combination with sentry AND-conditions (multiple on-parts creating an AND condition an a sentry). Our implementation is based on an algorithm that distinguishes between current and past event transitions.

1.1.4. On-Parts and Repetition (Multiplicity)

The specification is not clear on how to handle plan item or case file item on-parts that refer to potentially multiple runtime instances. Our implementation is based on an "at least one" approach.

1.1.5. RepetitionRule Evaluation Dilemma

Another problem in the area of the repetition property is related to the evaluation of the rule’s expression. Sectioni 7.6.4 in CMMN specification 1.0 states that the rule is evaluated at the point of instantiation of the repeatable plan item and that the value of the evaluation is maintained throughout the life-cycle of the plan item. This however can lead to an ambiguity. Consider the following setup:

  • We have a repeatable task that connects via an entry sentry and case file item on-part to a case file item (e.g. the 'create' transition).

  • The case starts. An instance of the repeatable plan item is created. Its repetition rule is evaluated. Lets say to 'true'.

  • Now a case file item instance is created. The run-time engine checks the repetition flag of the plan item, sees that it is 'true' and creates another instance of the plan item.

  • At this point, the repetition rule of the new plan item is evaluated. let’s say it evaluates to 'false'.

  • Now another case file item instance is created. The problem now is that we have two plan item instances in the run-time model of the engine holding different values - the first plan item says 'repeat', the second plan item says 'do not repeat'. Which one should be taken?

1.1.6. The sentryRef Dilemma

The following is a legal diagram fragment:

exitSentries

The modeler’s intention in this example is: The ExitSentry of Task 2 has a PlanItemOnPart referring to Task 1 having a sentryRef pointing to the ExitSentry of Task 1. The meaning: Task 1 exiting via the one ExitSentry triggers the exit of Task 2. The problem: just by looking at the diagram, it is not clear which ExitSentry holds the PlanItemOnPart. There should be an arrow or some other symbol indicating the direction of the connector (the PlanItemOnPart).

1.1.7. Event Listeners and Stage Completion

Section 7.6.1 doesn’t take Event Listeners into consideration. In the current implementation and in contrast to the specification, Event Listeners (whether they have occurred or not) do not prevent a stage from completing. They are neutral with respect to stage completion evaluation.

Following the specification, a stage with an event listener in state Available does not complete (unless we consider the stage’s auto-complete flag). For example, if a stage contains a single event listener in state Available, the stage does not complete unless we set the stage’s auto-complete flag. In most modeling situations, this forces us set a stage to auto-completion as soon as we use an event listener in the stage. By treating event listeners as neutral, as in the current implementation, we gain modeling flexibility in the sense that we can still use (or not use) the auto-completion flag in order to model some more meaningful condition of a stage.

1.1.8. Discretionary Items and Sentries

5.4.9.2 of the specification mentions entry and exit criteria with respect to discretionary items as supported.Figure 5.12 states that DiscretionaryItems are not associated with Sentries. Entry and exit criteria references are modeled in the XML (XSD) only on PlanItems. Not on DiscretionaryItems. This renders DiscretionaryItems not very useful.. The current implementation of the CMMN engine does not support sentries on Discretionary Items.

1.1.9. Parameters

Formal modeling of CMMN Parameters is not yet included in the current CMMN implementation. We left it out due to time constraints and due to the fact that the CMMN specification doesn’t support parameter mappings for HumanTasks.

As an alternative to the CMMN modeling framework for Parameters, a simple generic run-time parameter concept was implemented. This custom parameter concept does not interfere with the CMMN specification and can co-exist with any formal CMMN Parameters implementation that may follow in the future. It works as described in section Parameters on page CMMN Extensions.

1.2. CMMN Extensions 

1.2.1. Custom Attributes

An arbitrary map of custom String/String properties can be edited during design time and stored on select CMMN elements:

The map is serialized to JSON and stored under attribute customAttributes in the XML. The purpose of these properties is to enable CMMN extensions like the ManualRepetition extension described below. Customer extensions of the transition call-back methods can also make use of these properties to implement custom logic based on design-time properties.

The elements for which custom attributes are supported are:

  • Case (CasePlanModel)

  • Stage

  • ProcessTask

  • HumanTask

  • CaseTask

  • Milestone

  • UserEventListener

  • TimerEventListener

  • CaseFileItem (stored in 'caseFileItemDefinition' XML element)

Except for the CaseFileItem, the customAttribute is stored as part of the item’s PlanItemDefinition.

1.2.2. Manual Repetition

The CMMN repetiion rule allows to create multiple instances of a given model plan item. The creation of a new instance of a plan item is controlled by sentries. Only a Sentry triggering on a plan item may lead to the creation of a new instance of the plan item.

By introducing the Manual Repetition extension, it is now possible to manually trigger the creation of a new instance of a plan item. For this to work, a plan item must be configured as follows:

  • The manual activation rule must resolve to true

  • The repetition rule must resolve to true

If this is the case, a plan item can repeatedly be created by means of an action button under Available Actions in the case HTML template.

Manual Repetition is not only supported for plan items but also for discretionary items.

The CMMN specification 1.0 states, that a plan item’s repetition expression is evaluated at the point of the plan item’s creation (transition to AVAILABLE) and maintained throughout the life cycle of the plan item. In the context of the Manual Repetition extension, this rule has been adjusted. The engine now evaluates the rule on demand, i.e. each time a new plan item instance may potentially be created, the rule is evaluated. This happens, for example, during the sentry evaluation loop, or as a plan item does a MANUAL_START transition.

1.2.3. Repetition of User Events and External Events (User event listener, Event listener)

User events and external events support a custom property manualRepetition (simply named Repetition in the VIS properties editor). The value can be any back-end condition. If the condition evaluates to true, a new user event instance is created upon occurrence. This allows the modeler to create a user event button in the GUI which remains visible and can be invoked multiple times.

1.2.4. Cross-Stage PlanItemOnParts

There is no conceptual reason to disallow plan item on-parts referring to plan items outside the sentry’s stage (as CMMN spec 1.0 does). The current implementation of the CMMN engine allows such connections. For example, the CMMN engine evaluates the following model correctly:

crossStagePlanItemOnParts

1.2.5. Parameters

Every plan item which can be modeled with an entry sentry automatically receives a standardized input parameter map during run-time. The map contains key/value pairs of type String/String according to the following semantic:

  • A single entry in this map represents a single input parameter.

  • Each parameter represents a source plan item ID, namely the plan item ID of each on-part (PlanItemOnPart or CaseFileItemOnPart) that triggered (started or enabled) the target plan item.

  • A map entry key holds the source plan item model ID.

  • A map entry value holds the source plan item’s run-time client ID.

This map is available to developers of plan item extensions via the TransitionData parameter. In edoras one Work Items, the map is available to modelers under variable name _triggerItems.

Example:

humanTasks

As task B-ID is started or enabled, it will receive the following input parameter map:

"_triggerItems" : {
  "A-ID" -> "A-ID's client ID, i.e. Work Item ID"
}

Current limitation: only the trigger items leading to the start/enable of the target plan item are included in the _triggerItems map. If we have a sentry with multiple on-parts, only the on-parts whose transition triggers the enable/enable event on the target plan item are included.

2. CMMN Developer Documentation

2.1. Integrating Custom Extension Code 

There are two ways to call custom extension code from a running CMMN case:

  1. Invoke custom code by means of a service task (by evaluating a runtime expression) [Note: This feature is in planning]

  2. Provide low-level custom implementations for plan item transitions.

The following sections describe the two options in more detail:

2.1.1. Execute custom code by means of a Service Task

Service tasks are available in the palette and can be placed into the model like any task. By means of a runtime expression configured on the service task, arbitrary code can be executed as the runtime representation of the task starts. [This functionality is in planning and not yet available.]

2.1.2. Provide custom implementations for plan item transitions

This is a very flexible and powerful yet low-level way of integrating custom Java code into a case model. Using this approach, the complete edoras one implementation of the CMMN engine can be replaced with custom implementation code. Replacing or extending a select sub-set of the existing implementation classes is possible too. In order to introduce a custom transition handler for a given plan item, the following steps are necessary:

  1. Define a bean with name cmmnExtensions implementing interface CmmnExtensions or extending DefaultCmmnExtensions.

  2. In your CmmnExtensions class, implement the method of you choice to return your handler implementation. E.g. implement method getOccurExtension(..) to return your implementation of an OccurHandler.

  3. Your implementation of the handler must extend the appropriate abstract handler (e.g. the OccurHandler) and implement the handler method responding to the handler’s plan item transition. (The occur method for the OccurHandler - there is a consistent naming pattern for the handlers and their methods.)

It is possible to selectively return handlers. The methods in interface CmmnExtensions all have the same signature: they receive

  • the type of plan item for which to return the custom handler

  • an arbitrary string. The string is called extensionType and can be provided in your model as a custom property with name extensionType. (E.g. define the custom attribute (key/value pair) extensionType=MyExtension on your model element)

Based on these parameters you can decide which custom handler implementation (if any) you want to return. By returning null, the default edoras one handler implementation will be used.

If you decide to return a custom handler, you have the option to completely replace the default implementation or to invoke your handler code before or after the default implementation code. Check out method getExtensionPoint() in class BaseHandler. If you don’t override getExtensionPoint(), your code will replace the default implementation code.

Please refer to the table on page Standard CMMN State Transition Implementations in order to get an overview of the available default edoras one implementation handlers and their purpose.

2.2. Standard CMMN State Transition Implementations 

The edoras one CMMN engine implementation is split into two parts:

  • A generic CMMN engine implmenentation

  • Edoras one integration code

The edoras one integration code is implemented per PlanItem type and CMMN transition type. The following table outlines which particular integration methods are provided for the various plan item types and transitions. The table also shows the purpose of the available edoras one implementations.

The main goal of the table is to support edoras one customer code developers in the task of implementing CMMN extensions. The table shows which standard implementations are available. Based on the table, developers of extensions can decide which hooks they want to extend or override.

Empty cells in the table mean that there is no edoras one implementation needed. There is code executed for the cell (transition and plan item type) within the CMMN state model, however, there is no need to take an action on edoras one Work Items.

CasePlanModel Stage HumanTask ProcessTask CaseTask Milestone UserEventListener

create

Creates and starts a Case Work Item for the CMMN case represented by the CasePlanModel.

enable

manualStart

Starts the HumanTask (see 'start').

Starts the ProcessTask (see 'start').

Starts the CaseTask (see 'start').

start

Creates and starts the Task Work Item referenced by the HumanTask. The Task is based on an AdHoc Task Definition. AdHoc Task Definitions for HumanTasks are created during deployment of the CMMN Case model.

Creates and starts a Process Work Item.

Creates and starts a new CMMN StateModel for the Case referenced by the CaseTask. This leads to 'create' of the CaseTask’s CasePlanModel.

occur

complete

Completes the Case Work Item (archives the case).

exit

Sets the sub-state of the HumanTask work object to INTERRUPTED.

Cancels the process.

Terminates the case represented by the CaseTask.

fault

reactivate

terminate

Completes the Case Work Item.

Terminates the case represented by the CaseTask.

Case auto-completion handling

After having applied an external event to a StateModel (like after applying a state transition), a StateModel’s auto-completion is evaluated. If a StateModel completes due to auto-completion (or otherwise is considered exited/terminated), and if the StateModel represents a CaseTask, then a suitable transition (complete, exit or terminate) is triggered in the parent Case for the CaseTask that was just completed/exited/terminated.

2.3. REST API

2.3.1. Available CMMN REST Calls

Plan Item Transition
/rest/cmmn/CAS/{caseClientId}/{sourcePlanItemId}/{planItemTransition}/planItemTransition (method GET)

Trigger a transition on a plan item and subsequently re-evaluate the state model.

Plan Item Transition with Form Data
/rest/cmmn/CAS/{caseClientId}/{sourcePlanItemId}/{planItemTransition}/planItemTransitionWithFormData (method PUT)

Similar to the method above, but allows to pass form data in the request body. For example, this call is used to manually start a task with an init form.

Case File Item Transition
/rest/cmmn/CAS/{caseClientId}/{caseFileItemId}/{caseFileItemTransition}/caseFileItemTransition (method GET)

Trigger a transition on a case file item and subsequently re-evaluate the state model.

Case File Item Transition with Form Data
/rest/cmmn/CAS/{caseClientId}/{caseFileItemId}/{caseFileItemTransition}/caseFileItemTransitionWithFormData (method PUT)

Similar to the method above, but allows to pass form data in the request body. For example, this call is used to manually create a case file item of type edorasDataItem.

Discretionary Item Planning
/rest/cmmn/CAS/{caseClientId}/{sourcePlanItemId}/discretionaryItemPlanning (method GET)

Plan a discretionary item (move it from the planning table into the run-time model by creating a corresponding plan item in the run-time model).

State Update
/rest/cmmn/CAS/{caseClientId}/stateUpdate (method GET)

This re-evaluates the state model (entry criteria, exit criteria, applicability rules, auto-completion of stages). Calling this method makes sense when you have a state change in the back-end which is used in a back-end expression in your CMMN model and you want the back-end expression to be re-evaluated.

Current States
/rest/cmmn/CAS/{caseClientId}/currentStates (method GET)

Gets a JSON array of the model’s current states (milestones and stages).

Available Actions
/rest/cmmn/CAS/{caseClientId}/availableActions (method GET)

Gets a JSON array of the model’s available actions.

2.3.2. Description of REST Call Parameters

{caseClientId}

The edoras case Work Object ID.

{sourcePlanItemId}

The model element ID of the item. Append #N (where N is the instance number) to address a particular plan item instance (e.g. of a repeatable plan item). The hash must be URL encoded (# = %23). If you pass a sourcePlanItemId without instance suffix, the engine will always find the instance with the highest index (i.e. the instance created most recently).

If there exists a work object for the plan item of interest, you can also pass the edoras Work Object ID.

{planItemTransition}

The transition to apply (the names of enum PlanItemTransition)

{caseFileItemId}

The model element ID of the case file item. Append #N (where N is the instance number) to address a particular case file item instance. The hash must be URL encoded (# = %23). If there exists a work object for the case file item of interest, you can also pass the edoras Work Object ID.

{caseFileItemTransition}

The transition to apply (the names of enum CaseFileItemTransition). Currently only CREATE and UPDATE are supported.

3. CMMN User Documentation

3.1. Current Feature Overview 

This page describes the scope of the initial edoras one CMMN engine implementation.

Important: When running CMMN cases, make sure the case template is selected (make sure your URL starts with /case.html#…​). If not, simply edit it in the browser’s address bar and reload the page.

3.1.1. Plan Items and Case File Items

Stages

A case can be structured by using stages. Stages can be nested. As of sprint 85, stages can be visuaized in the case template. See CMMN Stage and Milestone Visualization.

Plan Fragments

Plan fragments can be put into a model. They allow to group individual plan items. Plan fragments do now have a run-time representation and no associated functionality other than to provide a means to enclose a bunch of plan items.

ProcessTasks

edoras one process tasks can be placed in a model and wired up using connectors and sentries. Input/output is handled via case variables only (see Parameters, below)

HumanTasks

Ad-hoc human tasks can be placed in a model and wired up using connectors and sentries. Input/output is handled via case variables only (see Parameters, below).

Human tasks have an init form and a work form. The work form is the main form. Where applicable, the init form is used (e.g. when starting a human task with manual activation from the case actions menu).

CaseTasks

Case tasks can be placed in a model and wired up using connectors and sentries.

Case File Items

Case file items can be placed in a model. Currently only the definitionType edorasDataItem is supported. These types of case file items are represented by their own run-time edoras work item. For these case file items, an init form and a work form can be defined. New case file items can be created via the Case Actions menu (in the case of case file items that have the necessary multiplicity property).

Milestones

Milestones can be placed in a model and configured via sentries. Reached milestones are visible in the case template. As of sprint 85, additional options for milestone visibility is available. See CMMN Stage and Milestone Visualization.

UserEvents

Support for UserEvents. As of sprint 84, user event listeners can be configured to be invoked more than once. See See CMMN Extensions (Repetition of User Events).

TimerEvents

Support for TimerEvents is not yet implemented. Consider modeling timer events with the help of activiti ProcessTasks.

Generic events

External system events can be modeled by means of a generic event listener symbol. Such events can be triggered by means of a REST call.

3.1.2. HTML template

The existing case.html template is supported. In particular the areas:

Active Work Items - For active human tasks and active work items from process tasks and case tasks.

Case File Items - For created case file items

Case Actions - For the starting of tasks with manual activation and for the creation of case file items (according to their multiplicity property)

3.1.3. Sentries and Events

Sentry If-conditions are supported (evaluated in the context of the case).

Connectors to tasks and stages are supported (plan item on-parts). Supported transitions:

  • CREATE

  • ENABLE

  • MANUAL_START

  • START

  • COMPLETE

  • EXIT

  • TERMINATE

Transitions DISABLE and RE-ENABLE are not yet supported. Neither are transitions SUSPEND, RESUME, PARENT-SUSPEND, PARENT-RESUME. CLOSE (on the level of the case) is not supported. Instead, once a case reaches COMPLETED or TERMINATED, it is archived (edoras one ARCHIVED state).

The events

  • FAULT

  • REACTIVATE,

are supported on the level of the REST API and custom transition implementations (extension code) for plan items (except the case itself). There is currently no GUI support or visual feed-back available for these transitions and resulting states.

The transition

  • OCCUR

is supported for Milestones and Event listeners:

Connectors to case file items are also supported (case file item on-parts). Supported transitions:

  • CREATE

  • UPDATE

3.1.4. Roles

Support for CMMN roles is not implemented. Support for Human Task access rights with edoras one is planned.

3.1.5. Parameters

The configuration of formal CMMN parameters is not yet supported. Information can be passed via case variables. There is an extension in planning which covers certain types of parameters. See CMMN Extensions.

3.1.6. Discretionary Items and planning

Discretionary items planning has been partially implemented. However, support in the modeler and the Case Template (case.html) has been removed due to the limited value of the current implementation. The whole planning aspect will be re-addressed at a future point in time.

3.1.7. PlanItem properties

Repetition - the Repetition property is supported, including the dynamic evaluation of an expression to determine the property value. If repetition == true, new plan item instances are created depending on entry sentry evaluation.

Manual activation - the ManualActivation property is supported, including the dynamic evaluation of an expression to determine the property value. For manual activation items, menu entries are made available in the Case Actions menu for the starting of these items.

Required - the Required property is supported, including the dynamic evaluation of an expression to determine the property value. The Required property is relevant for the determination of a Stage’s completion status (AutoComplete flag on the Stage).

Blocking - By default, tasks are blocking, meaning their transition to COMPLETE is triggered by an event outside of the case engine (i.e. by a case worker explicitly completing a HumanTask). By modeling a task as non-blocking, the engine immediately completes the task after START (or MANUAL_START).

Autocomplete - the Autocomplete property is supported for stages.

3.1.8. Custom PlanItem properties

Custom properties (name/value pairs, both simple strings) are supported for the Case (casePlanModel), stages, and the three types of tasks (human, process, case).

Custom properties are needed to extend or qualify the execution semantics in the context of client integration projects

3.2. CMMN Stage and Milestone Visualization 

3.2.1. Intro

CMMN has a concept for stages and milestones. They somewhat overlap but don’t have exactly the same lifecycle. This story describes on how they will be visualized within the case template at runtime and how they can be configured / modeled within a CMMN case model.

3.2.2. Visualization options for stages and milestones

A stage can have the following visualization options (they might change over the lifecycle of the case):

  • Available, active or completed, but hidden in the case template (e.g. the CMMN model contains the stage, but it is not showed in the case template)

  • Available and shown in the case template, but not active at the moment

  • Active and shown in the case template

  • Completed and shown in the case template (completed means, the stage has been active and has been completed)

A milestone can have the following visualization options (they might change over the lifecycle of the case):

  • Available or reached but hidden in the case template

  • Available but not yet reached and shown in the case template

  • Reached and shown in the case template

In addition to whether a state and milestone are rendered within the case template or not, there is a certain order on how they will be rendered. As the case model does not provide a flow-kind of modeling but is rather event and condition driven, the order of stages and milestones should explicitly be modeled within the CMMN case model.

3.2.3. Visualized states

The current implementation of the case templates only knows a concept named _availableStates, where milestones and stages are both rendered as states. States have three different options; available, active and completed managed with two boolean flags named isCurrentState and isCompleted.

3.2.4. First step implementation

As a first implementation due to simplicity and also to learn about the real-world requirements, the following new attributes should be supported within edoras vis CMMN case model.

New milestone attributes:

  • Available as visualized milestone → boolean, default is true

  • Available as visualized milestone (RT) → optional expression to define the availability of the milestone dynamically

  • Visualization order → integer

If the available flag is true or the expression resolves to true, the milestone is rendered as an available state using isCurrentState and isCompleted both set to false. As soon as the milestone has been reached, the flags are both set to true.

New stage attributes:

  • Available as visualized stage → boolean, default is true

  • Available as visualized stage (RT) → optional expression to define the availability of the stage dynamically

  • Visualization order → integer

If the available flag is true or the expression resolves to true, the stage is rendered as an available state using isCurrentState and isCompleted both set to false. As soon as the stage is active, isCurrentState is set to true, once the stage has been completed, the flag isCompleted is set to true as well.

3.2.5. Optional convenience dialog

As entering the visualization order might become quite cumbersome if the model contains a lot of stages and milestones, there might be an extra dialog to be reached at global model level (not on a single stage or milestone) to set the order of all stages and milestones in one single place.

The attribute should be added on the single element Case Plan Model which exists in all CMMN models exactly once. The name of the attribute is Phase visualizations and the attribute dialog is built the following way:

All stages and milestones in the case plan model appear as a single row in the dialog. Each row will have the following columns (the values are taken from the properties of each stage and milestone and saving the dialog will write them back as properties, so they can be edited directly by using this overview dialog or by editing the stage or milestone element):

  • 'Phase type' (might be 'Stage' or 'Milestone')

  • 'Phase name' (is set to the name of the stage or milestone)

  • 'Available' (checkbox / boolean mapped to the 'Available as visualized stage / milestone' property of the stage or milestone)

  • 'Available (RT)' (optional textfield mapped to the 'Available as visualized stage / milestone (RT)' property of the stage or milestone)

  • 'Visualization order' (is only shown and will be indirectly modified by moving the rows up and down to build the visualization order)

By moving rows up or down, the dialog is building up the visualization order for the stages and milestones and will modify the visualization order property accordingly. This allows an overview of the visualized stages and milestones and their order in the case template.

3.3. Modeling Options

3.3.1. CasePlanModel

Autocomplete

A case completes regardless of this option when there are no active children, no children waiting on a sentry, no children available for manual start, no discretionary items to plan and no un-triggered required milestones. With autocomplete enabled, there may be unplanned discretionary items and it will still complete. In addition, It will also complete if there are un-started manual activation children which are not required.

3.3.2. Stage

Autocomplete

A stage completes regardless of this option when there are no active children, no children waiting on a sentry, no children available for manual start, no discretionary items to plan and no un-triggered required milestones. With autocomplete enabled, there may be unplanned discretionary items and it will still complete. In addition, It will also complete if there are un-started manual activation children which are not required.

Required

When required, a stage is required to complete/exit once its entry criteria have fired (otherwise its parent stage won’t be able to complete). required is only relevant in combination with manual activation. Once started, a stage is always required to complete or exit, regardless of this option.

Manual activation

By default, a stage starts automatically once its entry criteria have fired. With manual activation evaluating to true, the stage must be manually started. The action button to start the stage becomes available as the stage’s entry criteria fire. Manual activation in combination with required has an impact on the auto-completion of the parent stage.

Repetition

With repetition evaluating to true, multiple instances of the stage can be created. A new instance is created each time its entry criteria fire. The custom property manualRepetition allows the user to create new instances by clicking an action button.

Discretionary

A discretionary stage is optional. If discretionary, the stage requires a user action to be promoted to a normal stage where it becomes subjected to the settings for manual activation, required and autocomplete. Sentries are currently not supported for discretionary items. To model an optional stage, consider using a normal stage that has manual activation and is not required.

3.3.3. All Tasks

Required

When required, a task is required to complete/exit once its entry criteria have fired (otherwise its parent stage won’t be able to complete). required is only relevant in combination with manual activation. Once started, a task is always required to complete or exit, regardless of this option.

Manual activation

By default, a task starts automatically once its entry criteria have fired. With manual activation evaluating to true, the task must be manually started. The action button to start the task becomes available as the task’s entry criteria fire. Manual activation in combination with required has an impact on the auto-completion of the parent stage.

Repetition

With repetition evaluating to true, multiple instances of the task can be created. A new instance is created each time its entry criteria fire. The custom property manualRepetition allows the user to create new instances by clicking an action button.

Discretionary

A discretionary task is optional. If discretionary, the task requires a user action to be promoted to a normal task where it becomes subjected to the settings for manual activation and required. Sentries are currently not supported for discretionary items. To model an optional task, consider using a normal task that has manual activation and is not required.

Blocking

Blocking is the default behavior. Use non-blocking if you want the task to immediately complete once it starts. Non-blocking can be used, for example, to model service tasks.

3.3.4. Milestone

Required

When required, a milestone is required to fire in order for its parent stage to complete.

Repetition

With repetition evaluating to true, multiple instances of the milestone can be created. A new instance is created each time its entry criteria fire.