The Camunda Core extension provides a synchronization of CELUM users and groups with Camunda and other utilities. Additionally it gives access to the Camunda REST API via CELUM (/main/camunda/*), so that Workflow extensions in CELUM only need to communicate with CELUM directly.
To be configured in {home}/appserver/conf/custom.properties
type: string, required: yes, default: -
The license key for the plugin (product: camundaCore), provided by brix.
type: string, required: yes, default: -
The URL to the camunda REST API. Has to start with http
or https
and end in /
. E.g. http://localhost:8080/engine-rest/
type: string, required: no, default: -
The username for the Camunda REST API (only required if it is protected).
type: string, required: no, default: -
The password for the Camunda REST API (only required if it is protected).
type: string, required: no, default: -
The token for the services which don't require login (e.g. mail service) to protect them.
Only synchronizes the following events immediately, the rest is done by the sanitize job:
This ensures, that the users can immediately work with Camunda as soon as they are created in CELUM.
Since v2.0 all groups with aliases will be synced.
type: boolean, required: no, default:
true
Enables/disables the user and group synchronization. Server restart required.
type: string, required: no, default:
0 0 1 * * ?
(each night at 1 am)
Quartz cron trigger that tells the sanitize job when and how often it should run.
type: string, required: no, default:
0 0 0 2 * ?
(each night at 2 am)
Quartz cron trigger that tells the historic tasks cleanup job when and how often it should run.
type: comma-separated list of group ids, required: no, default: - (all groups), version: <v2.0
The groups (and members of those groups) which should be synchronized. If this property is not set, all groups are synchronized.
type: boolean, required: no, default:
false
, version: < v2.0
Synchronize all the sub-groups of the specified groups as well. Users are always resolved recursively because Camunda doesn't support hierarchical groups (only users can be members of groups and not other groups).
type: string, required: no, default:
CelumUser
The prefix to use for the CELUM users in Camunda. E.g. the user with ID 123 and the default prefix would become CelumUser123 in Camunda.
type: string, requierd: no, default:
CelumGroup
, version: alias-support 2.0+
The prefix to use for the CELUM groups in Camunda. E.g. the group with ID 456 and the default prefix would become CelumGroup456 in Camunda.
If there is an alias for the group the alias is taken without prefix.
type: string, required: no, default:
CELUM
The group type of CELUM groups in Camunda. This is just a string and can be anything, but it can be helpful for searching the synchronized groups in Camunda.
type: string, required: no, default:
$firstname $lastname [$username]
, version: 2.0+
Defines how a user is displayed. Available placeholders: $firstname, $lastname, $username, $id.
type: string, required: no, default:
$groupname
, version: 2.0+
Defines how a group is displayed. Available placeholders: $groupname, $id.
The password checker provides an internal service and a controller to verify passwords.
The controller accepts POST requests to /main/camundaCore/password?userId=...&password=...
. userId is optional (defaults to the logged-in user). The following responses are possible:
To be able to use the password checker, the following table has to be created:
create table camunda_password_check_attempts (
id bigint auto_increment primary key,
user_id bigint not null,
timestamp timestamp not null
);
type: integer, required: no, default:
5
After failing the password check this many times in the specified time interval, the user will be deactivated.
type: integer, required: no, default:
5
The time interval in minutes.
type: boolean, required: no, default:
true
Delete the failed attempts after successful check?
type: boolean, required: no, default:
true
If set to false, every logged-in user can check the password of any user. Should not be false, otherwise it is possible to lock out other users by intentionally entering a wrong password enough times. This only affects the controller and not the internal password check service.
There is an internal service and a controller to manage the absences. Tasks which are directly assigned to users can be automatically re-assigned to the replacement unless they already have the same task.
The controller provides the following methods to manage absences:
main/camundaCore/absence?userId=...&active=...
both parameters are optional. For userId, the default is the logged-in user, and the default for active is true (only return absence if it is active). Returns an Absence JSON object.main/camundaCore/absence/list?active=...
only available if loggedInUserOnly is set to false. Active is optional and the default is true (only return active absences, not those in the future). Returns a list of Absence JSON objects.main/camundaCore/absence
creates or updates an absence. Has to be sent as absence JSON object in the body. userId is optional, the default is the logged-in user.main/camundaCore/absence?userId=...
userId is optional, the default is the logged-in user.Response codes:
Absence JSON object:
{
"id": ...
"userId": 487
"replacementId": 430,
"from": "2020-03-17",
"to": "2020-03-17",
}
To be able to use the absence service, the following table has to be created:
create table camunda_absence (
id bigint auto_increment primary key,
user_id bigint not null,
replacement_id bigint not null,
from_date date not null,
to_date date not null
);
type: boolean, required: no, default:
true
The logged-in user can only request or modify their own absence (recommended).
There is an internal service and a controller to manage observers. Observers can be informed automatically with the mail service.
The controller provides the following methods to manage observers:
main/camundaCore/observer?userId=...
userId is optional, the default is the logged-in user. Returns an Observer JSON object.main/camundaCore/observer/list
only available if loggedInUserOnly is set to false. Returns a list of Observer JSON objects.main/camundaCore/observer
creates or updates an observer, has to be sent as observer JSON object in the body. userId is optional, the default is the logged-in user.main/camundaCore/observer?userId=...
userId is optional, the default is the logged-in user.Response codes:
Observer JSON object:
{
"id": ...
"userId": 487
}
To be able to use the observer service, the following table has to be created:
create table camunda_observer (
id bigint auto_increment primary key,
user_id bigint not null
);
type: boolean, required: no, default:
true
If this property is set to true, then deleted users will be removed automatically from the observer list. Restart required.
type: boolean, required: no, default:
true
The logged-in user can only request or modify their own observer status (recommended).
There is an internal mail service and a controller. Both accept a SendMailRequest object. The mail engine uses velocity templates, which have to be placed in the class path, e.g. CELUM_HOME/appserver/velocity (recommended).
Mail template with all variables:
#* @vtlvariable name="data" type="ch.brix.camundaCore.mail.MailData" *#
#* @vtlvariable name="additionalData" type="java.util.Map<java.lang.String, java.lang.Object>" *#
<div id="body" style="font-family: Arial, Helvetica, sans-serif;">
Always available (all but the first property depend on the recipient), but maybe not set in CELUM:
<ul>
<li>${data.celum}: link to CELUM, guaranteed to end in /</li>
<li>${data.userId}</li>
<li>${data.username}</li>
<li>${data.email}</li>
<li>${data.firstName}</li>
<li>${data.lastName}</li>
</ul>
Available if assetId is set for the request:
<ul>
<li>${data.assetId}: an asset link is created as follows <a href="${data.celum}main/opennodeview.do?assetId=${data.assetId}">${data.assetName}</a></li>
<li>${data.assetName}</li>
</ul>
</div>
The controller accepts POST requests to camundaCore/mail
(note that there is no main) with a SendMailRequest object as the body and the response will be a SendMailResult object (JSON).
The SendMailRequest object has the following properties:
The SendMailResult object properties:
type: string, required: yes, default: -
The email address which should be displayed in the from field.
type: string, required: no, default: -
If the bcc is set, then this email address receives a copy of every mail that was sent with this mail service.
type: boolean, required: no, default:
true
If set to true, then deactivated users won't receive any mails and will be ignored.
The mail worker processes external tasks with the topic mail
automatically.
observers
: send mail to all observersvariables
: all the variables (Map<String, VariableValueDto>)type: boolean, required: no, default:
false
, version: 2.0+
Enables the mail worker.
type: boolean, required: no, default:
recipients
, version: 2.0+
The variable which contains the recipients.
type: boolean, required: no, default:
message
, version: 2.0+
The variable which contains the message to be sent.
type: boolean, required: no, default: -, version: 2.0+
Defines the subject (message key) for a mail.
type: boolean, required: no, default: -, version: 2.0+
Defines the template (name) for a mail.
An asset worker updating assets/nodes from variables. Listens to the topic updateAssetOrNode
. Value transformations:
type: boolean, required: no, default:
false
, version: 2.0+
Enables the update asset or node value worker.
type: string, required: no, default:
assets
, version: 2.0+
The variable for the assets. The variable can contain comma-separated asset ids and/or variable names of variables with asset ids.
type: string, required: no, default:
nodes
, version: 2.0+
The variable for the nodes. The variable can contain comma-separated node ids and/or variable names of variables with node ids.
type: string, required: no, default:
assetFields
, version: 2.0+
The variable for the asset fields. The variable can contain comma-separated variable names and/or information field ids. The information field ids and variable names have to be listed here camundaCore.assetField.{variableName}
type: string, required: no, default:
nodeFields
, version: 2.0+
The variable for the node fields. The variable can contain comma-separated variable names and/or information field ids. The information field ids and variable names have to be listed here camundaCore.nodeField.{variableName}
type: semicolon-separated list of {field}:{comma-separated list of values}, required: no, default:
addNodesToAssetField
, version: 2.0+
The variable for the nodes to add to node-referencing information fields on assets. The field can be an alias or a node information field id. The values can be aliases or node ids. E.g. channels:youtube,vimeo;copyright:protected
type: semicolon-separated list of {field}:{comma-separated list of values}, required: no, default:
addNodesToNodeField
, version: 2.0+
The variable for the nodes to add to node-referencing information fields on nodes.
type: semicolon-separated list of {field}:{comma-separated list of values}, required: no, default:
removeNodesFromAssetField
, version: 2.0+
The variable for the nodes to remove from node-referencing information fields on assets.
type: semicolon-separated list of {field}:{comma-separated list of values}, required: no, default:
removeNodesFromNodeField
, version: 2.0+
The variable for the nodes to remove from node-referencing information fields on nodes.
An asset worker updating variables from assets/nodes. Listens to the topic getAssetOrNode
. See update asset/node values worker.
type: boolean, required: no, default:
false
, version: 2.0+
Enables the get asset or node value worker.
type: string, required: no, default:
assets
, version: 2.0+
The variable for the assets. The variable can contain comma-separated asset ids and/or variable names of variables with asset ids.
type: string, required: no, default:
nodes
, version: 2.0+
The variable for the nodes. The variable can contain comma-separated node ids and/or variable names of variables with node ids.
type: string, required: no, default:
assetFields
, version: 2.0+
The variable for the asset fields. The variable can contain comma-separated variable names and/or information field ids. The information field ids and variable names have to be listed here camundaCore.assetField.{variableName}
type: string, required: no, default:
nodeFields
, version: 2.0+
The variable for the node fields. The variable can contain comma-separated variable names and/or information field ids. The information field ids and variable names have to be listed here camundaCore.nodeField.{variableName}
type: integer, required: no, default: 30, version: 2.0+
The number of days until a historic task gets cleaned up. 0 for no cleanup.
type: integer (user id), required: no, default: api user, version 2.0+
The user with which the workflows modify the metadata.
type: integer (node id), required: for upload, default: -
A node id in which temporary assets are created when uploaded in the workflow.
type: string (path), required: for upload, default: -
A folder in which temporary files are shortly saved for the upload (don't use CELUM's temp folder).
type: string (message key), required: no, default: -
Specify a (multilingual) title for a task.
type: integer (group id), required: no, default: -, version: 2.0+
Defines a group that can be resolved from a variable. E.g. camundaCore.groups.approvers.true=345 would define group 345 as the approvers group (recursive). Now if the mail worker sees "approvers" in the recipients it will send a message to all users in this group (recursive).
type: integer (asset type id), required: no, default: -, version: 2.0+
Defines an alias for an asset type.
type: integer (node type id), required: no, default: -, version: 2.0+
Defines an alias for a node type.
type: information field id, required: no, default: -, version: 2.0+
Defines an alias for an asset information field. Special values for fields without ID:
type: information field id, required: no, default: -, version: 2.0+
Defines an alias for a node information field. Special values for fields without ID:
type: integer (node id or dropdown id), required: no, default: -, version 2.0+
Define aliases for values for the given asset field.
type: integer (node id or dropdown id), required: no, default: -, version 2.0+
Define aliases for values for the given node field.
type: comma-separated list of variable names, required: no, default: -, version: 2.0+
The variables containing a comma-separated list of asset ids.
type: comma-separated list of variable names, required: no, default: -, version: 2.0+
The variables containing a comma-separated list of node ids.
type: comma-separated list of variable names, required: no, default: -, version: 2.0+
The variables containing a comma-separated list of Camunda user and/or group ids. It is also possible to have group keys in there.
type: string, required: no, default: -, version: 2.0+
A search expression which defines whether a process can be started or not. Only if there is an assetScope workflows can be started on assets.
type: string, required: no, default: -, version: 2.0+
A scope for nodes on which the workflow can be started. Only if there is a nodeScope workflows can be started on nodes. The following parameters are supported:
type: integer, required: no, default: 0, version: 2.0+
The minimum number of assets that have to be selected.
type: integer, required: no, default: 0, version: 2.0+
The maximum number of assets that can be selected (-1 means no upper bound).
type: integer, required: no, default: 0, version: 2.0+
The minimum number of nodes that have to be selected.
type: integer, required: no, default: 0, version: 2.0+
The maximum number of nodes that can be selected (-1 means no upper bound).
type: boolean, required: no, default: false, version: 2.0+
If this is set to true then only the min/max assets condition or the min/max node condition has to apply and not both. This also means that the process can only be started with assets or nodes but not both.
type: string, required: no, default: -, version: 2.0+
The human-readable name of the process (message key).
type: comma-separated list of user group ids, required: no, default: -, version: 2.0+
Users in the specified groups (recursive) are allowed to start the process.
type: boolean, required: no, default: false, version: 2.0+
Whether the tasklist should be opened or not after the process was started.
type: boolean, required: no, default: false, version: 2.0+
Whether assignees can see tasks with the same task definition key in the same process instance or not.
type: boolean, required: no, default: false, version: 2.0+
Whether the initiator can see all the tasks in the processes he started or not.
type: boolean, required: no, default: false, version: 2.0+
Whether the initiator can edit all the tasks in the processes he started or not.
type: string, required: no, default: false, version: 2.0+
The asset fields to be set. {field} can be an alias for a checkbox or a dropdown or the information field id. The value can be an alias for a dropdown value, a dropdown item id or true/false. Those fields should be used to prevent the start of the same workflow with the same asset.
type: string, required: no, default: false, version: 2.0+
The asset fields to be set. {field} can be an alias for a checkbox or a dropdown or the information field id. The value can be an alias for a dropdown value, a dropdown item id or true/false. Those fields should be used to prevent the start of the same workflow with the same node.
type: string, required: no, default: false, version: 2.0+
Defines a form for a task definition key {task}. The {key} is the form entry key which should be returned as variable with the value.
A form entry consists of the following semi-colon separated parts:
Options:
Camunda Core | CELUM |
---|---|
1.0.0 | 5.13.4 (tested with 6.4) |
2.0.0 | 6.4+ |
Released 2020-03-09
Initial version