1. Modeler Overview

The modeler dashboard can be accessed by authorized users through the dashboard menu and is used to create and deploy workflow models for use within edoras one.

Before we look at the details of the modeler dashboard it will help to understand how models are related to the user dashboard.

Models are created edited in the modeler dashboard, and as long as they are only edited they are not visible in the user dashboard. When models are deployed, corresponding definitions are created. These definitions can be used in the user dashboard to create work objects of the new type.

1.1. Apps

An edoras one App contains a collection of different models that combine to define a specific workflow within edoras one.

An app can be created and then different models can be added and linked together as required. When the workflow is ready, it can be deployed to create the corresponding definitions which are used to execute the workflow, and it can then be tested.

Apps can be transferred between different edoras one installations using the Export and Import actions.

2. Model types

2.1. Form model

A form model defines a form that can be used by other workflow models to interact with the user. Each form contains a number of form fields arranged in a given layout. The fields in a form may contain predefined content, or may be bound to work object values at runtime, for example to allow the name and description of a document to be displayed and perhaps changed.

Typically two types of forms are used: init forms are used to initialize new work objects, and work forms are used to edit existing work objects.

Form models can be quickly checked by hovering over the form name, previewed within edoras one using the Preview action or edited in the edoras vis modeler using the Edit in modeler action. It is also possible to download the XML form definition using the Download action.

2.2. Task model

A task model is used to define a new type of user task. The init and work forms for a task are used to create and edit the task contents, and are set using the Edit Model action. The default candidate groups used for sharing can also be set, and the actions that will be allowed on this type of task can also be selected.

2.3. Document model

A document model is used to define a new type of document. As in the task model, the Edit Model action allows the init and work forms to be selected, as well as setting the candidate groups and allowed actions.

In addition a skeleton document can be set using the Upload skeleton action. If a skeleton document is provided then whenever a new document of this type is created it will be initialized with its own copy of the skeleton document. Placeholders can also be defined to insert dynamic text into the document copy.

2.4. Process model

A process model allows a full BPMN 2.0 process execution model to be defined. As for form models a process model can be previewed or edited in the modeler using the Edit in modeler action, and the process definition XML can also be downloaded.

2.5. Case model

A case model is used define a new type of case. A case serves as a container for other work objects and can be used to store shared context information for a given workflow.

When a new case is created, it is possible to start processes, create tasks or create documents and link these to the case automatically. This behaviour is defined using the Edit Model action.

2.6. Mail model

A mail model provides a template for mails that can be sent by a given workflow. The mail model contains the templates for mail subject and header, both of which can use edoras one backend expressions to fill in the template with dynamic information at the time that the mail is sent.

3. Working with Apps and models

3.1. Accessing the modeler dashboard

All users that are part of the modeler group will be able to access the modeler dashboard.

3.2. Importing Apps

An App can be imported into the system by creating a new App through the user interface, and then using the Import action within the app to upload and import a Zip file containing the models to be imported.

When models are imported, the model will be checked to see whether it is already present on the system. If it is not present, then it will be created in the current App. If it is already present within the current App then it will be updated from the import file. If it is already present but as part of a different App then an error will be shown.

If a new model is created from scratch it is assigned an unchangeable ID which is used to track the model across all systems where the model is installed, and it is this ID which is used to establish the relationship between the models on the system and the models in the import file.

If the Import as duplicate option is selected when an App is imported the models in the imported App will not be checked against the models already present. New models will be created that are unconnected with the originals. This can be useful for creating a completely new App, using an existing App as a starting point.

3.3. Model and App state

Both models and Apps have a state which changes as the models are edited and deployed. The available states are:

Table 1. Model states
State Applies to Description

active

Models, Apps

No pending changes. The model or App is currently deployed on the system.

inactive

Models

No pending changes. The model has been deactivated on the system.

pending

Models, Apps

The model or App contains changes that have not yet been deployed.

pending inactive

Models

The model will be deactivated on the system when it it next deployed.

3.4. Deploying an App

When an App is deployed, the models within that App will be checked for consistency. If a model has been deactivated but there are still references from other active models then it will not be possible to deploy the App. If the models are consistent then they will be deployed and corresponding definitions will be created. The users of the system will then be able to access the new workflow in the user dashboard.

Note that work objects and processes may already exist that were created using older versions of the model. These will not automatically be updated to use the new definitions: they will continue to use the definitions that were valid when they were created and will therefore not behave any differently after the new deployment.

3.5. Moving models between apps

All of the basic model types can be moved to another App as long as there are no outstanding references within the App that it is being moved from.

3.6. Duplicating apps

All basic model types can also be duplicated, making an exact copy with a new name. This can be very useful when several small variations of a complex model are required.

3.7. Sharing models

Models and apps may also be shared with different groups. By default all new models are shared with the modeler group, but in some circumstances it may be required for particular users to work on a particular set of models.

3.8. The System App

The administrator will also be able to see the System app in the modeler dashboard in addition to the Apps that can be seen by normal modeler users. This App contains a number of models that are required by the edoras one application and should normally not be changed.

4. Process Palette

This section describes the elements available in the process modelling palette of edoras one. Each modeling element and it’s corresponding attributes are described in detail below. Since edoras one is based on BPMN 2.0 huge parts of the modelling capabilities come from there. Currently, edoras one does not support the full BPMN 2.0 standard for execution. The process palette contains only the BPMN2.0 elements that are currently supported by the engine. Besides the BPMN 2.0 standard elements, edoras one provides some dedicated process activities that can be used within the processes. These edoras one specific activities are dedicated implementations of BPMN 2.0s generic service task. They are implemented using the custom extensions hook of BPMN 2.0 so if you import a process model to another system that supports BPMN 2.0 these activities are considered as generic service tasks.

There are several attributes, that are available for all modelling elements:

Table 2. Common attributes
Attribute Name Description

Name

The name of the element, displayed on the diagram. This attribute is not equal to the id of the element.

Documentation

Use this attribute to add any documentation / description to the element. The content of the element can not be displayed on the model graphics, but is exported to the BPMN 2.0 XML.

Custom Properties

Define arbitrary properties as key value pairs. The attribute is exported to the BPMN 2.0 XML and can be accessed at runtime.

Background Color

Specify the background color of the element in the diagram.

4.1. Start Event

A none start event technically means that the trigger for starting the process instance is unspecified. This means that the engine cannot anticipate when the process instance must be started.

startEvent
Figure 1. Graphical Representation
Table 3. Specific attributes
Attribute Name Attribute Type

Description

none

Any sub-process has always to start with a none start event.

4.2. Message start event

A message start event can be used to start a process instance using a named message. This effectively allows us to select the right start event from a set of alternative start events using the message name.

When deploying a process definition with one or more message start events, the following considerations apply:

  • The name of the message start event must be unique across a given process definition. A process definition must not have multiple message start events with the same name. edoras one throws an exception upon deployment of a process definition such that two or more message start events reference the same message of if two or more message start events reference messages with the same message name.

  • The name of the message start event must be unique across all deployed process definitions. edoras one throws an exception upon deployment of a process definition such that one or more message start events reference a message with the same name as a message start event already deployed by a different process definition.

  • Process versioning: Upon deployment of a new version of a process definition, the message subscriptions of the previous version are cancelled. This is also true for message events that are not present in the new version.

messageStartEvent
Figure 2. Graphical Representation
Table 4. Specific attributes
Attribute Name Description

none

4.3. End event

A none end event means that the result thrown when the event is reached is unspecified. As such, the engine will not do anything extra besides ending the current path of execution.

endEvent
Figure 3. Graphical Representation
Table 5. Specific attributes
Attribute Name Description

none

4.4. User Task

A user task is used to model work that needs to be done by a human actor. When the process execution arrives at such a user task, a new task is created in the task list of the user(s) or group(s) assigned to that task.

userTask
Figure 4. Graphical Representation
Table 6. Specific attributes
Attribute Name Description

Categories

attribute not recognized

LoopType

not yet supported

Owner

Set the owner of the task by selecting an existing user statically

Owner (RT)

Use a backend expression to evaluate the owner dynamically at runtime

Assignee

Set the assignee of the task by selecting an existing user statically

Assignee (RT)

Use a backend expression to evaluate the assignee dynamically at runtime

Candidate Users

Set the candidate users of the task by selecting existing users statically

Candidate Users (RT)

Use a backend expression to evaluate the candidate users dynamically at runtime

Candidate Groups

Set the candidate users of the task by selecting existing groups statically

Candidate Groups (RT)

Use a backend expression to evaluate the candidate groups dynamically at runtime

Priority

Set the priority of the task by using a literal or a backend expression. The priority is not currently not supported at runtime

Due Date

Set the due date of the task. The due date is currently not supported at runtime

FormRef

Select a form to be attached to the current task. You can also directly create a new form from here

Mail Attributes

Refer to Send Mail Service Task for the usage of these attributes. By using this attribute section, you cause the engine to additionally send an email when the task is created

4.5. Manual task

A Manual task defines a task that is external to the BPM engine. It is used to model work that is done by somebody, which the engine does not need to know of, nor is there a system or UI interface. For the engine, a manual task is handled as a pass-through activity, automatically continuing the process from the moment process execution arrives into it.

manualTask
Figure 5. Graphical Representation
Table 7. Specific attributes
Attribute Name Description

none

4.6. Create Case Service Task

The Create Case Service Task can be used to create a new case from within a process. Input data for the new case can be mapped and the newly created case can be referenced form the current case if needed.

createCaseServiceTask
Figure 6. Graphical Representation
Table 8. Specific attributes
Attribute Name Description

Case Model

Select a case model for the new case to be created

Init Variables

Specify additional variables that should be initialized during the creation of the new case

Case Name

Set the name of the new case using literals or backend expressions

CaseId Variable

specify a variable name where the id of the newly created case should be stored in the current case. This is optional

Categories

attribute not recognized

LoopType

not yet supported

4.7. Create case from subform service task

The create case from subform service Task is an itemization of the create case service task. Here you can specify a variable (subform) of the current workitem hierarchy as the input values for the new case instead of binding all input parameters manually.

createCaseServiceTask
Figure 7. Graphical Representation
Table 9. Specific attributes
Attribute Name Description

Case Model

Select a case model for the new case to be created

Init Variables

Specify additional variables that should be initialized during the creation of the new case

Case Name

Set the name of the new case using literals or backend expressions

CaseId Variable

specify a variable name where the id of the newly created case should be stored in the current case. This is optional

Subform Variable

Specify the variable name where the subform to create the new case from is bound to

Remove Subform Variable

If set to true, the variable of the subform will be removed from the data model after creating the case

Categories

attribute not recognized

LoopType

not yet supported

4.8. Create document service task

edoras one allows to enhance business processes with document creation service tasks. The create document service task creates a copy of the specified document template insid the current case. In case the document template is either a MS Word or Adobe PDF form, form fields will automatically be populated with execution data. Refer to Document Placeholders for more information.

createDocumentServiceTask
Figure 8. Graphical Representation
Table 10. Specific attributes
Attribute Name Description

Document Model

Select a document model for the new document to be created

Document Id Variable

specify a variable name where the id of the newly created document should be stored in the current case. This is optional

Categories

attribute not recognized

LoopType

not yet supported

4.9. Send Mail Service Task

edoras one allows to enhance business processes with automatic mail service tasks that send e-mails to one or more recipients, including support for cc, bcc, mail templates, … etc.

Note

See section Mail Server in the Operators Guide for information on configuring the mail server in an on-premise environment

sendMailServiceTask
Figure 9. Graphical Representation
Table 11. Specific attributes
Attribute Name Description

Categories

attribute not recognized

LoopType

not yet supported

Mail Model

This is a reference to a mail model in the current App. This model defines rich-text templates for the mail subject and body. Backend expressions in the mail model templates will be replaced when the mail is sent

Mail Recipient

The mail recipient is a required expression or literal that defines the email recipient (or multiple recipients)

Mail Reply-To

The mail reply-to is an optional expression that specify an explicit reply address. If no reply address is defined then the global system default will be used (which will vary from installation to installation)

Mail CC

Specify one or multiple CC recipients using literals or backend expressions. This attribute is optional

Mail Bcc

Specify one or multiple BCC recipients using literals or backend expressions. This attribute is optional

Mail Priority

An optional expression or literal that specifies the mail priority (usually an integer in the range 1 - 5)

Mail Headers

Specify additional mail headers. They will be applied before the message is sent

4.10. Invoke REST endpoint service task

The Invoke REST endpoint service task provides a generic client to call arbitrary REST endpoints. The task supports all HTTP operations, Basic Authentication, custom headers and different mime-types.

invokeRESTEndpointServiceTask
Figure 10. Graphical Representation
Table 12. Specific attributes
Attribute Name Description

Categories

attribute not recognized

LoopType

not yet supported

Protocol

Specify the protocol to use for the request. HTTP and HTTPS are supported

Request Type

Specify the type of the HTTP Request. GET, POST, PUT and DELETE are supported

Headers

Add additional HTTP message headers to your request

Request Body

Specify the message body that will be sent with the request. You can use backend expressions to include data from the data model within your message body structure. This can only be used with POST and PUT requests

Content Type

Define the content type header to be set within the request. This value will be overwritten if you have set a content type in the Header attribute

Host Name

The host name of the remote server (e.g. service.edorasware.com

Port Number

The port number of the remote server. If not specified, 80 is used

Request Path

Specify the path to the endpoint on the remote server. The path must start with a leading / You can use backend expressions to set the path dynamically at runtime based on values from the data model

Request Parameters

Specify the parameters that are passed as part of the request URL. Multiple parameters can be defined using the editor provided

Username

If the remote server requires basic authentication specify the username of the user you want to use for the request

Password

If the remote server requires basic authentication specify the password of the user you want to use for the request

Response Type

Select the format of the response of the REST call. Currently JSON and XML are supported

Set Variables

Map the response data to your data model. specify the variable name and use X-Path expressions to select the respecting value from the response

Overwrite if existing

Set to true if you want to overwrite the values of existing variables with the values from the REST calls response

4.11. Initialize variables service task

Use the initialize variables service task to initialize arbitrary variables in the current workitem hierarchy. You can use Expressions or literals to set the values of the variables.

initializeVariablesServiceTask
Figure 11. Graphical Representation
Table 13. Specific attributes
Attribute Name Description

Init Variables

Specify variable name and target workitem of the variable you want to initialize using literals. Use literals or backend expressions to specify the value of the variable

Overwirte if existing

If set to true, the values of already defined variables will be overwritten. Otherwise, already initialized variables are skipped

Categories

attribute not recognized

LoopType

not yet supported

4.12. Comment service task

Use the comment service task to add a comment to an arbitrary workitem reachable by the expression resolver. You can use templates similar to the ones in the send mail service Task to add formatted, structured comments.

commentServiceTask
Figure 12. Graphical Representation
Table 14. Specific attributes
Attribute Name Description

Comment Target Object

Use an expression that resolves to the workitem where the comment should be added to the comment-stream

Comment User

Specify a the user in whos name the comment is created using an expression

Comment Template

Select the template for the comment

Categories

attribute not recognized

LoopType

not yet supported

4.13. Sequence Flow

A sequence flow is the connector between two elements of a process. After an element is visited during process execution, all outgoing sequence flow will be followed. This means that the default nature of BPMN 2.0 is to be parallel: two outgoing sequence flow will create two separate, parallel paths of execution.

A sequence flow can have a condition defined on it. When a BPMN 2.0 activity is left, the default behavior is to evaluate the conditions on the outgoing sequence flow. When a condition evaluates to true, that outgoing sequence flow is selected. When multiple sequence flow are selected that way, multiple executions will be generated and the process will be continued in a parallel way.

Note

The above holds for BPMN 2.0 activities (and events), but not for gateways. Gateways will handle sequence flow with conditions in specific ways, depending on the gateway type.

Currently conditionalExpressions can only be used with Backend Expressions, detailed info about these can be found in section Expressions. The expression used should resolve to a boolean value, otherwise an exception is thrown while evaluating the condition.

All BPMN 2.0 tasks and gateways can have a default sequence flow. This sequence flow is only selected as the outgoing sequence flow for that activity if and only if none of the other sequence flow could be selected. Conditions on a default sequence flow are always ignored.

sequenceFlow
Figure 13. Graphical Representation
Table 15. Specific attributes
Attribute Name Description

Condition Type

Specify the condition type of the message flow. standard an conditional flow behave the same, but are displayed differently. Use a backend expression in the Condidtion Expression Attribute to specify the condition. If you set the condition type to Default, this flow is executed when no other flow condition evaluates to true

Condition Expression

A backend expression that must evaluate to a boolean value

4.14. Exclusive Gateway

An exclusive gateway (also called the XOR gateway or more technical the exclusive data-based gateway), is used to model a decision in the process. When the execution arrives at this gateway, all outgoing sequence flow are evaluated in the order in which they are defined. The sequence flow which condition evaluates to true (or which doesn’t have a condition set, conceptually having a true defined on the sequence flow) is selected for continuing the process.

Note

Note that the semantics of outgoing sequence flow is different to that of the general case in BPMN 2.0. While in general all sequence flow which condition evaluates to true are selected to continue in a parallel way, only one sequence flow is selected when using the exclusive gateway. In case multiple sequence flow have a condition that evaluates to true, the first one defined in the XML (and only that one!) is selected for continuing the process. If no sequence flow can be selected, an exception will be thrown.

exclusiveGateway
Figure 14. Graphical Representation
Table 16. Specific attributes
Attribute Name Description

none

4.15. Inclusive gateway

The inclusive gateway can be seen as a combination of an exclusive and a parallel gateway. Like an exclusive gateway you can define conditions on outgoing sequence flows and the inclusive gateway will evaluate them. But the main difference is that the inclusive gateway can take more than one sequence flow, like the parallel gateway. The functionality of the inclusive gateway is based on the incoming and outgoing sequence flow:

  • fork: all outgoing sequence flow conditions are evaluated and for the sequence flow conditions that evaluate to true the flows are followed in parallel, creating one concurrent execution for each sequence flow.

  • join: all concurrent executions arriving at the inclusive gateway wait in the gateway until an execution has arrived for each of the incoming sequence flows that have a process token. This is an important difference with the parallel gateway. So in other words, the inclusive gateway will only wait for the incoming sequence flows that will be executed. After the join, the process continues past the joining inclusive gateway.

Note that an inclusive gateway can have both fork and join behavior, if there are multiple incoming and outgoing sequence flow for the same inclusive gateway. In that case, the gateway will first join all incoming sequence flows that have a process token, before splitting into multiple concurrent paths of executions for the outgoing sequence flows that have a condition that evaluates to true.

inclusiveGateway
Figure 15. Graphical Representation
Table 17. Specific attributes
Attribute Name Description

none

4.16. Parallel gateway

Gateways can also be used to model concurrency in a process. The most straightforward gateway to introduce concurrency in a process model, is the Parallel Gateway, which allows to fork into multiple paths of execution or join multiple incoming paths of execution. The functionality of the parallel gateway is based on the incoming and outgoing sequence flow:

  • fork: all outgoing sequence flow are followed in parallel, creating one concurrent execution for each sequence flow.

  • join: all concurrent executions arriving at the parallel gateway wait in the gateway until an execution has arrived for each of the incoming sequence flow. Then the process continues past the joining gateway.

Note that a parallel gateway can have both fork and join behavior, if there are multiple incoming and outgoing sequence flow for the same parallel gateway. In that case, the gateway will first join all incoming sequence flow, before splitting into multiple concurrent paths of executions.

Note

An important difference with other gateway types is that the parallel gateway does not evaluate conditions. If conditions are defined on the sequence flow connected with the parallel gateway, they are simply neglected.

parallelGateway
Figure 16. Graphical Representation
Table 18. Specific attributes
Attribute Name Description

none

4.17. Call activity (subprocess)

BPMN 2.0 makes a distinction between a regular subprocess, often also called embedded subprocess, and the call activity, which looks very similar. From a conceptual point of view, both will call a subprocess when process execution arrives at the activity.

The difference is that the call activity references a process that is external to the process definition, whereas the subprocess is embedded within the original process definition. The main use case for the call activity is to have a reusable process definition that can be called from multiple other process definitions.

When process execution arrives in the call activity, a new execution is created that is a sub-execution of the execution that arrives in the call activity. This sub-execution is then used to execute the subprocess, potentially creating parallel child execution as within a regular process. The super-execution waits until the subprocess is completely ended, and continues the original process afterwards.

callActivity
Figure 17. Graphical Representation
Table 19. Specific attributes
Attribute Name Description

Categories

attribute not recognized

SubProcessRef

Select the subprocess to be called within the call activity

LoopType

not yet supported

In

Map input data to be passed from the parent (current) process to the subprocess while starting the subprocess

Out

Map output data to be passed form the subprocess to the parent process after the subprocess has finished

4.18. Subprocess

BPMN 2.0 makes a distinction between a regular subprocess, often also called embedded subprocess, and the call activity, which looks very similar. From a conceptual point of view, both will call a subprocess when process execution arrives at the activity.

The difference is that the call activity references a process that is external to the process definition, whereas the subprocess is embedded within the original process definition. The main use case for the call activity is to have a reusable process definition that can be called from multiple other process definitions.

A subprocess is executed within the scope of the parent process.

subprocess
Figure 18. Graphical Representation
Table 20. Specific attributes
Attribute Name Description

Categories

attribute not recognized

LoopType

not yet supported

4.19. Text Annotation

The Text Annotation is for documentation purpose only, it’s not evaluated by the engine. Use it to add textual explanations to an element of the process model. In contrast to the Documentation property of an element, the text annotation is also visible on the graphical representation of the process model.

textAnnotation
Figure 19. Graphical Representation
Table 21. Specific attributes
Attribute Name Description

none

4.20. Association

An association is represented with a dotted line. It is used to associate an artifact or text to a flow object, and can indicate some directionality using an open arrowhead (toward the artifact to represent a result, from the artifact to represent an input, and both to indicate it is read and updated). No directionality is used when the artifact or text is associated with a sequence or message flow (as that flow already shows the direction).

Note

edoras one currently only supports undirected associations

association
Figure 20. Graphical Representation
Table 22. Specific attributes
Attribute Name Description

none

4.21. Pool

Represents the organizational boundaries of a process, typically separating different organisations. A pool contains one or more lanes (like a real swimming pool). One process has to be executed within a pool. If the end-to-end process includes multiple pools, each pool has it’s own process flow. Communication between pools is handled by Message Flows. The pool in edoras one represents the system boundaries of edoras one.

pool
Figure 21. Graphical Representation
Table 23. Specific attributes
Attribute Name Description

isExecutable

Indicates if this pool is executable.

4.22. Collapsed pool

A collapsed pool hides internal detail from the viewer. It’s used to visulaize communication between the mail pool and an external system / organization that is not in the scope of the current project. The collapsed pool has no impact at execution time.

collapsedPool
Figure 22. Graphical Representation
Table 24. Specific attributes
Attribute Name Attribute Type

Description

none

4.23. Lane

Used to organise and categorise activities within a pool according to function or role, and depicted as a rectangle stretching the width or height of the pool. A lane contains the flow objects, connecting objects and artifacts.

lane
Figure 23. Graphical Representation
Table 25. Specific attributes
Attribute Name Description

none

4.24. Message Flow

A Message Flow is represented with a dashed line, an open circle at the start, and an open arrowhead at the end. It tells us what messages flow across organizational boundaries (i.e., between pools). A message flow can never be used to connect activities or events within the same pool.

messageFlow
Figure 24. Graphical Representation
Table 26. Specific attributes
Attribute Name Description

none

5. Expressions

edoras one can evaluate expressions in both the frontend (i.e. in the browser) and in the backend (i.e. in the server). Expressions can be used in a number of ways in the edoras one application, for example:

  • to create a binding between a form field and work object data

  • to modify the state of form fields dynamically in response to user input (e.g. field visibility)

  • to populate a mail template before the mail is sent

  • to control the execution flow in a process execution

  • to execute method calls on the server

5.1. Frontend expressions

5.1.1. Form binding expressions

Forms are used to display and edit the data of underlying work objects. The work object data and the form definition are fetched from the server, and the expressions used within the form definition are then used to link the form fields with corresponding data. For editable fields, any changes made are reflected in the underlying work object data, which is sent back to the server to be persisted when the form is submitted:

formbinding

Form data binding expressions are placed between two sets of curly braces, e.g. {{expression}}, and are set using a form field’s Value attribute:

formeditor
Tip

The Value attribute of most form fields may only be bound to a single expression, and this may not be preceded or followed by other text.

The only exception to this rule is the output field, which doesn’t bind to a single value, but instead uses form expressions embedded within a rich text template to create dynamic textual output.

Simple variable bindings

A simple value name in double curly braces (e.g. {{value}}) is used to link to the corresponding variable in the current work object. If the work object variable doesn’t exist when the form is opened then it will be created automatically.

Bindings to other work objects

A work object in edoras one is typically part of a hierarchy, where work objects are linked together in a tree of parent/child relationships. For example a case typically serves as a container for other work objects (tasks, running processes, documents etc.). Form binding expressions can also be used to access the values from related work objects in the work object hierarchy. This is done be preceding the variable to be accessed by a qualifier (e.g. {{root.value}}):

The following qualifier keywords are currently supported:

parent

the parent of the current work item

root

the root of the current work item hierarchy

self

the current work item

$this

the current work item deprecated: use self instead

As an example, if we start a process within a case then the process’s parent work object will be the case. A form task created by that process will have the process work object as its parent:

hierarchybinding
Figure 25. Example work object hierarchy

In this case {{root.name}} will bind to "Example case", {{parent.name}} will bind to "Example process" and {{name}} will bind to "Example task".

5.1.2. More complex frontend expressions

When not being used to create a binding between a form field and a work object attribute, frontend expressions can also be combined using binary operators and parentheses, for example:

{{foo}} && {{bar}}
!{{foo}}
(!{{foo}} || {{bar}}) && {{foobar}}

5.2. Backend Expressions

Expressions can also be executed on the server, for example within the process models. Server-side expressions are called backend expressions. A much wider range of expressions is possible than in frontend expressions the expressions may also have side-effects within the system (for example causing an e-mail to be sent). As well as accessing data from the work object hierarchy, backend expressions support additional functionality such as accessing work objects outside of the immediate hierarchy, predefined function calls and bean method calls.

There are two basic expression types:

value expressions

have the form #{value.property} and resolve to a value

method expressions

have the form #{bean.method(value)} and result in a method invocation

Tip
The full backend expression language is part of the EE6 specification and only an brief overview will be provided here. For a full description of the expression language syntax please refer to the EE6 specification.

5.2.1. Accessing work objects

As in the frontend, qualifiers can be used to traverse the work object hierarchy, although there are more options available in backend expressions. qualifiers can also be chained (e.g. #{process.parent.name}):

The following qualifier keywords are currently supported:

self

the current work item (the default if no work object is explicitly specified)

case

the case to which the current work object belongs

parentCase

the nearest parent case to which the current work object belongs

process

the top-most parent process to which the current work object belongs

parentProcess

the nearest parent process to which the current work object belongs

root

the root of the current work object hierarchy

parent

the direct parent of the current work object

5.2.2. Backend attribute values

Simple attribute names can be used to access work object attributes in backend expressions in the same way as in frontend expressions (see Frontend expressions).

To access attributes, simply use the attribute name: #{case.name}

Tip

One significant difference between frontend expressions and backend expressions is that the work object attributes accessible in the frontend may have been pre-processed by the server so that the attribute values are in a form that makes more sense in the client’s context. With backend expressions this processing is not performed so you will be working with raw work attributes.

As an example, state is represented in a work object by an instance of the State class. In the frontend , the expression {{state}} will be bound to the name field of this object (e.g. "ACTIVE"). The conversion from a State object to the state name string has already been performed by the server.

The corresponding process binding, {state} resolves to the underlying State object, which if it is used in a string context will be converted to a string literal, e.g. "[State@51d838d9 name = ACTIVE]". To access the plain name ("ACTIVE") we can use a java bean property expression: {state.name}.

For a description of common work object attributes, refer to Common attributes.

5.2.3. Automatic work object ID conversion

Work objects are referenced using IDs, and in a backend expressions it is often useful to access not the ID itself but the referenced work object. To support this use case, an expression that resolves to a work object ID will automatically be converted to the corresponding work object instance as needed.

For example the expression {ownerid} will resolve to the owner ID, but if we then extend the expression (e.g. {ownerId.name} then the ID will be converted to the corresponding work object, and the name attribute from this work object will be returned.

As access to other work objects linked from a work object using IDs is so common there are also some shortcut expressions to access this information directly:

Table 27. Predefined work object expressions
Expression Type Description

{{owner}}

User work object

the work object’s owner

{{assignee}}

User work object

the work object’s assignee

{{initialassignee}}

User work object

the work object’s initial assignee

{{previousassignee}}

User work object

the work object’s previous assignee

{{candidateusers}}

List of user work object

the work object’s candidate user list

5.2.4. Resolving hierarchy variables

A major difference between frontend expressions and backend expressions is the visibility of work object variables within the work object hierarchy. With frontend expressions, accessing parent or root variables requires explicit use of the appropriate qualifier (e.g. parent.attribute).

With backend expressions, however, this is not always required. In the server, variables from parent work objects in the hierarchy are also visible in the child work objects. If a parent and child both have variables with the same name then only the child variable will be visible in the child work object.

For example, take the following work object hierarchy:

variablehierarchy

If we are resolving variables in the task context, then the expression #{case.message} will resolve to "Case message".

The expression #{process.message} will also resolve to "Case message" the process work object will inherit the message value from its parent (the case).

The expression #{message} will resolve to "Task message", however, as the variable inherited from the case has been hidden by a more local value.

5.2.5. Bean resolution

Backend expressions can also be used to access java beans, either to make method calls ({beanName.method()}) or to access bean properties ({beanName.property}).

For security reasons it is obviously not a good idea to allow access to all beans within the server, and so edoras one only allows access to a specific set of approved bean names.

5.2.6. Predefined functions

Backend expressions also support a number of predefined functions. As with bean resolution, the functions provided by a given edoras one installation can be configured, so the list of available functions may vary from system to system.

The following functions are provided by default:

now()

returns the current date and time

formatDate(Date date, String pattern)

returns the provided date formatted according to the provided pattern

formatType(Type type, boolean lowerCase)

returns the provided type formatted as a String

anyOf(Boolean… operands)

returns true if any of the provided booleans is true, false otherwise

allOf(Boolean… operands)

returns true if all of the provided operands are true, false otherwise

concatenateListWithList(List<T> base, List<T> toAppend)

returns a list that is the concatenation of the given two lists

concatenateListWithElements(List<T> base, T… toAppend)

returns a list that is the concatenation of the given lists and the given elements

extractValuesFromCollectionOfMaps(Collection<Map<String, T>> maps, String mapKey, boolean skipNullValues)

returns a collection of map values for the given key from the given collection of maps

5.3. Common attributes

5.3.1. Work object attributes

A number of predefined attributes are available on every work object:

Table 28. Predefined work object attributes
Expression Type Description

name

String

the work object’s name

description

String

the work object’s description

state

String

the work object’s state

type

String

the work object’s type

ownerId

User ID

the work object’s owner

assigneeId

User ID

the work object’s assignee

candidateGroupIds

List of group IDs

the work object’s candidate groups

creationTime

Date

the work object’s creation time

updateTime

Date

the work object’s last update time

dueTime

Date

the work object’s last due time

5.3.2. User attributes

The following attributes are defined in user work objects:

Table 29. Predefined user attributes
Expression Type Description

userLogin

String

the user’s login name

name

String

the user’s display name (full name)

userFirstName

String

the user’s first name

userName

String

the user’s surname

userAddress

String

the user’s address

userPhone

String

the user’s telephone number

userMobile

String

the user’s mobile telephone number

userEmail

String

the user’s email address

language

String

the user’s language

6. Localization

TODO complete this section

7. Glossary

app

an app is a container for a collection of models that define a specific workflow.

backend expression

a backend expression will be evaluated in the server, for example to populate a mail template before it is sent.

dashboard

a page in the edoras one application where work objects can be found, displayed and manipulated. Each dashboard manages related work object types that play a given role within the system.

definition

when a model is deployed, a definition is created in the system. Definitions describe the behaviour of the system as seen by a normal user.

deployment

the process of converting the models into definitions to create an executable workflow.

expression

an expression can be used to access content or trigger specific behaviour at runtime. Two types of expressions are used: frontend expressions and backend expressions.

form

a form is a graphical layout of fields that may be bound to work object data to allow this data to be displayed or modified within the edoras one application.

form component

a form component is a type of form field, e.g. text form component, date form component, number form component. The form field represents the single element on the form whereas the form component represents the type of these single elements. As such the form component defines the look and behaviour of the corresponding form fields.

form field

a form field is a single element on a form. The user interacts with the form field, most of them are interactive but some of them are read-only.

form field part

a form field is composed of different graphical parts: a label, a control, a description, a required indicator. The user interacts with the control part only.

frontend expression

a frontend expression will be evaluated in the browser, for example to bind form fields to work object data.

model

a description of a workflow component which can be deployed together with other models to create a executable workflow in edoras one

process

a process is a workflow definition, described using a BPMN 2.0 model and executed within edoras one. It typically defines the automated and manual tasks that must be performed to complete the workflow.

system app

a special App that can only be seen by the administrator. It contains the models that are required for the correct operation of edoras one.

task

a task is a single action within a workflow, and may be either automated (a service task) or manual (a user task).

work object

an item that can be created or manipulated in edoras one. Different types of work object are supported. The work object types are typically grouped according to their role within the system and accessed through dashboards.