Activities

Activities are the part of a process that require action, either by a user or an application.

User task

A task where a user needs to perform a specific activity within a process engine or application. For example, the user is prompted to enter their details on a form.

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Assignment

Attribute Description
Candidate users Defines a list of users that can become assignee by claiming the task.

Attributes: Details

Attribute Description
Form reference Reference to the form that will be displayed when this task is opened.
Task listeners Allows you to invoke Java logic after the creation, reassignment, completion and deletion of the task.
Task ID variable An optional variable that contains the ID of the task.
Form properties Custom form properties which are used within the legacy or custom form engine.

Attributes: Execution

Attribute Description
Asynchronous When enabled, the activity starts as an asynchronous job.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Attributes: Multi instance

Attribute Description
Multi instance type Determines if multiple instances of this activity are created:
  • None - default, only one instance is created.
  • MI parallel - activities are created in parallel. This is good practice for user tasks.
  • MI sequential - activities are created sequentially. This is good practice for service tasks.
Collection

Expression to set the loop collection for a multi-instance task. The number of instances is determined by the elements of a collection. For each element in the collection, a new instance is created.

A common use case is to loop over lists created by multi-element subforms. For example, if you bound a subform to an array of invoice positions using the expression invoicePositions, you can set the loop collection to ${invoicePositions} to loop over each position.

Element variable

The name of the variable where the currently processed item from the loop collection is stored, for example invoicePosition.

You can access the element in the process through an expression, for example ${invoicePosition}. To access the element in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("invoicePosition",invoicePosition)}. The element is then available in the form through the task.invoicePosition variable.

Element index variable

The name of the variable where the index of the currently processed item from the loop collection is stored, for example, itemIndex.

The index starts with 0 and increases with every element that is being looped through. You can access the index in the process through an expression, for example ${itemIndex} in the process. To access the index in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("itemIndex", itemIndex)}. The index is then available in the form through the task.itemIndex variable.

Cardinality A number or an expression that evaluates to an integer, which controls the number of activity instances that are created. If the attribute Collection is empty, a new instance is created for every element of the list. With cardinality, you can overwrite this and only create a given number of instances. You can also use this attribute if you want to loop over an activity a given number of times without specifying a collection.
Completion condition A Boolean expression that when true cancels the remaining activity instances, stopping the loop, and produces a token.

Attributes: Visual

Attribute Description
Font color The font color of the element in the diagram.
Font size The font size of the element in the diagram.
Font style The font style of the element in the diagram.
Font weight The font weight of the element in the diagram.
Background color The background color of the element in the diagram.
Border color The border color of the element in the diagram.

User tasks

User tasks are BPMN elements that request a user to perform a manual action in order for the workflow to progress. For information on how user tasks present themselves and how you can work with them, see Using workflows in the Collibra Data Intelligence Platform User Guide.

A user task in the Flowable Designer has the following fields:

  • Id: The ID of a user task has to be a unique task identifier within the workflow. For statistical purposes, you can add a prefix to an ID, which is then considered to be a 'task type'. Everything before the first underscore (_) is considered the task type. In the example below, the task type of the created user task is 'correct'. In this way, you can group similar tasks together and make it possible to get statistics about each individual task type. For example, I want to know the number of open 'review' tasks.
  • Name: A good name for a user task is very important, as it gives the user an idea what the task is about. The name is also used extensively when the task is shown to the user.
  • Candidate Users: These are all the users that are asked to perform the task. If one of them performs it, the task is completed and the workflow continues. To be able to use our own role-based permission system, we created user expressions.
    These user expressions provide an easy and versatile way to define which users are allowed to execute the task.
  • Documentation: This is the description of the task. It is displayed to the user to explain what he is expected to do.

Define a user task

To define a user task, follow these steps:

  1. From the Tasks section of the Palette, drag a UserTask to the Chief steward lane..
  2. Connect the start event to the user task with a SequenceFlow connection.
    Make sure that the start and end event stay connected through the user task.

    You can also create elements starting from an other element by hovering your pointer over it and clicking the create element button:

  3. In the Properties section, select the General tab.
  4. In the Name field, enter a name for the task, for example: Review and comment.
  5. Select the Main config tab.
  6. In the Candidate user field, enter a user expression, for example: ${chiefStewardUserExpression}.

    For more information about user expressions, see Candidate user expressions.

  7. Select the Documentation tab.
  8. In the Documentation field, enter the task instructions, for example: Please review the term and provide comments.
  9. To add a dialog box for the user to provide comments, create two variables:
    1. Select the Form tab.
    2. Click New.
    3. Enter the required information:
      • Id: Give an ID for the dialog box, for example Comment.
      • Name: Provide a name for the dialog box, for example Please review the new term and provide comments.
      • Type: Select the type textarea.
      • Readable, Writeable and Required: Set to True.
    4. Click OK.
    5. Click New.
    6. Enter the required information:
      • Id: Give an ID for the button, for example commentButton.
      • Name: Provide a name for the button, for example Comment.
      • Type: Select the taskButton type.
      • Readable and Writeable: Set to True.
      • Required: Set to False.
    7. Click OK.

The following image shows the current state of the workflow:

Candidate user expressions

A candidate user is a user who can perform a workflow task. You can specify candidate users by using candidate user expressions, such as role(Business Steward), user(John), or group(Data Custodians).

You can include a comma or other punctuation marks, except semicolon, in your candidate user expressions. If you use punctuation marks, you must enclose the user expressions in curly brackets, for example {role(Business Steward; Community, Inc)}.

It is best practice to use curly brackets for all user expressions, whether the user expression contains a punctuation mark or not.

Expression Description
role(<roleName>)

Assigns the task to users with the specified role on the workflows business item. In case of a global workflow, you can use global role names.

{role(Business Steward)} assigns the task to users with the Business Steward role.

role(<roleName>;<communityName>)

Assigns the task to users with the specified role on the specified community. This is independent of the current workflow business item.

{role(Business Steward;Sales Community)} assigns the task to users with the Business Steward role in the Sales community.

This expression includes any inherited responsibilities.

role(<roleName>; <communityName>; <domainName>)

Assigns the task to users with the specified role on the domain with the specified name in the given community. This is independent of the current workflow business item.

{role(Business Steward;Sales Community;Pre Sales)} assigns the task to users with the Business Steward role on the Pre Sales domain in the Sales community.

This expression includes any inherited responsibilities.

role(<roleName>;<entityLevel>)

Assigns the task to users with a role on the workflow business item, but only if they have the role on the specified level. Possible entity levels are Term, Vocabulary and Community, which respectively indicate roles to be on the Asset, Domain or Community level.

{role(Business Steward;Term)} assigns the task to users with the Business Steward role on the asset.

role(<roleName>;<relationName>)

Assigns the task to users with the specified role on assets that are related to the current workflow business item with the given relation name.

{role(Stakeholder;Complies To)} assigns the task to stakeholders of assets that are related by the Complies To relation.

role(<roleName>; <entityLevel>; <relationName>)

A combination of the role(<roleName>; <entityLevel>) and role(<roleName>; <relationName>) expressions. This expression assigns the task to users of the target-related asset with a role on the given entity level.

{role(Stakeholder; Term; Complies to)} assigns the task to stakeholders on the Asset level of assets that are related by the Complies to relation.

user(<userName>)

Assigns the task to the user with the specified name.

{user(John)} assigns the task to John.

group(<groupName>)

Assigns the task to the users in the specified group.

{group(Data Custodians)} assigns the task to the users in the Data Custodians group.

Service task

A task that uses a service, such as a web service or an automated application.

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Details

Attribute Description
Expression Expression to be executed when the task is started. It allows you to interact with the backend by calling services, making calculations, and so on.
Delegate expression Must resolve to a Java object, which itself must have a class that implements either JavaDelegate or ActivityBehavior.
Class Fully qualified class name to be invoked when executing the task. The class must implement either JavaDelegate or ActivityBehavior.
Result variable The name of the variable under which to store the result of the expression evaluation.
Store as local variable Indicates whether to store the result variable as a local variable.
Class fields Allows you to inject field values into your delegated class.

Attributes: Execution

Attribute Description
Asynchronous When enabled, the activity starts as an asynchronous job.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Attributes: Multi Instance

Attribute Description
Multi instance type Determines if multiple instances of this activity are created:
  • None - default, only one instance is created.
  • MI parallel - activities are created in parallel. This is good practice for user tasks.
  • MI sequential - activities are created sequentially. This is good practice for service tasks.
Collection

Expression to set the loop collection for a multi-instance task. The number of instances is determined by the elements of a collection. For each element in the collection, a new instance is created.

A common use case is to loop over lists created by multi-element subforms. For example, if you bound a subform to an array of invoice positions using the expression invoicePositions, you can set the loop collection to ${invoicePositions} to loop over each position.

Element variable

The name of the variable where the currently processed item from the loop collection is stored, for example invoicePosition.

You can access the element in the process through an expression, for example ${invoicePosition}. To access the element in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("invoicePosition",invoicePosition)}. The element is then available in the form through the task.invoicePosition variable.

Element index variable

The name of the variable where the index of the currently processed item from the loop collection is stored, for example, itemIndex.

The index starts with 0 and increases with every element that is being looped through. You can access the index in the process through an expression, for example ${itemIndex} in the process. To access the index in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal(&quot;itemIndex&quot;, itemIndex)}. The index is then available in the form through the task.itemIndex variable.

Cardinality A number or an expression that evaluates to an integer, which controls the number of activity instances that are created. If the attribute Collection is empty, a new instance is created for every element of the list. With cardinality, you can overwrite this and only create a given number of instances. You can also use this attribute if you want to loop over an activity a given number of times without specifying a collection.
Completion condition A Boolean expression that when true cancels the remaining activity instances, stopping the loop, and produces a token.

Attributes: Visual

Attribute Description
Font color The font color of the element in the diagram.
Font size The font size of the element in the diagram.
Font style The font style of the element in the diagram.
Font weight The font weight of the element in the diagram.
Background color The background color of the element in the diagram.
Border color The border color of the element in the diagram.

Delegates

A delegate is a standalone class that executes some logic.

Most delegates belong to the deprecated Java Core API v1 and will not be available in the next major release. Use script tasks to replace the functionality of v1 delegates. See Alternatives to API v1 delegates for examples.

All API v1 delegates are available in the com.collibra.dgc.core.workflow.activiti.delegate Java Core API package.

API v2 delegates belong to the com.collibra.dgc.workflow.api.delegate Java Workflow API package.

A delegate is always configured using a service task. All delegates accept expressions for input parameters.

Example of a deprecated delegate

This example shows the use of the changeStatusDelegate delegate. The Result variable field is not used when using a delegate, but the Fields field is. It injects the provided values into the delegate which uses them to perform some action. The changeStatusDelegate delegate changes the state of the resource to the status with the given id, Under Review, in this example.

  • Field name: The name of the delegate field you want to inject a value to.
  • String value: The fixed string value to inject in the field.
  • Expression: An expression that is evaluated before the result is set as value in the field. For more information, see the expressions section.

Alternatives to API v1 delegates

This section provides examples of alternatives to Java Core API v1 delegates.

AddAttributeDelegate

API v1
<serviceTask id="servicetask1" name="Add attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.AddAttributeDelegate">
    <extensionElements>
        <activiti:field name="value">
            <activiti:string><![CDATA[attribute content]]></activiti:string>
        </activiti:field>
        <activiti:field name="ownerId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="typeId">
            <activiti:expression><![CDATA[${givenAttributeTypeId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Add attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.attribute.AddAttributeRequest;
        def attribute = attributeApi.addAttribute(AddAttributeRequest.builder()
            .assetId(item.id)
            .typeId(string2Uuid(givenAttributeTypeId)))
            .value("attribute content")
            .build())
        execution.setVariable("output", attribute)
    ]]></script>
</scriptTask>

GetAttributeDelegate

API v1
<serviceTask id="servicetask1" name="Get attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.GetAttributeDelegate">
    <extensionElements>
        <activiti:field name="attributeId">
            <activiti:expression><![CDATA[${givenAttributeId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Get attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        def attribute = attributeApi.getAttribute(string2Uuid(givenAttributeId));
        execution.setVariable("output", attribute)
    ]]></script>
</scriptTask>

RemoveAttributeDelegate

API v1
<serviceTask id="servicetask1" name="Remove attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.RemoveAttributeDelegate">
    <extensionElements>
        <activiti:field name="attributeId">
            <activiti:expression><![CDATA[${givenAttributeId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Remove attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        attributeApi.removeAttribute(string2Uuid(givenAttributeId));
    ]]></script>
</scriptTask>

AddRelationDelegate

API v1
<serviceTask id="servicetask1" name="Add relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.GetRelationsDelegate">
    <extensionElements>
        <activiti:field name="sourceTermId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="targetTermId">
            <activiti:expression><![CDATA[${givenTargetResourceId}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="binaryFactTypeId">
            <activiti:expression><![CDATA[${givenRelationTypeId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Add relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.relation.AddRelationRequest;
        def relation = relationApi.addRelation(AddRelationRequest.builder()
            .typeId(string2Uuid(givenRelationTypeId))
            .sourceId(item.id)
            .targetId(givenTargetResourceId)
            .build());
        execution.setVariable("output", relation)
    ]]></script>
</scriptTask>

GetRelationsDelegate

API v1
<serviceTask id="servicetask1" name="Remove relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.GetRelationsDelegate">
    <extensionElements>
        <activiti:field name="sourceTermId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;        
        def relations = relationApi.findRelations(FindRelationsRequest.builder()
            .sourceId(item.id)
            .build())
        .getResults();
        execution.setVariable("output", relations)
    ]]></script>
</scriptTask>

RemoveRelationsDelegate

API v1
<serviceTask id="servicetask1" name="Remove relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.RemoveRelationsDelegate">
    <extensionElements>
        <activiti:field name="sourceTermId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;        
        def relations = relationApi.findRelations(FindRelationsRequest.builder()
            .sourceId(item.id)
            .build())
        .getResults();
        relationApi.removeRelations(new ArrayList(relations.collect{ it.getId() }));
    ]]></script>
</scriptTask>

AddResourceRoleDelegate

API v1
<serviceTask id="servicetask1" name="Assign owner" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.roles.AddResourceRoleDelegate">
    <extensionElements>
        <activiti:field name="resourceId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="userName">
            <activiti:expression><![CDATA[${startUser}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="roleId">
            <activiti:expression><![CDATA[${roleId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Assign owner" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.responsibility.AddResponsibilityRequest
        def userName = execution.getVariable("startUser")
        def ownerUserId = userApi.getUserByUsername(userName).getId();           
        responsibilityApi.addResponsibility(AddResponsibilityRequest.builder()
            .resourceId(item.id)
            .resourceType(item.type)
            .roleId(string2Uuid(roleId))
            .ownerId(ownerUserId)
            .build())
    ]]></script>
</scriptTask>

RemoveResourceRoleDelegate

API v1
<serviceTask id="servicetask1" name="Remove current Owner role" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.roles.RemoveResourceRoleDelegate">
    <extensionElements>
        <activiti:field name="roleName">
            <activiti:string><![CDATA[Owner]]></activiti:string>
        </activiti:field>
        <activiti:field name="userName">
            <activiti:expression><![CDATA[${ownerName}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="resourceId">
            <activiti:expression><![CDATA[${domain.id}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Remove current Owner role" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.responsibility.FindResponsibilitiesRequest
        def ownerUserId = userApi.getUserByUsername(ownerName).getId();
        def ownerRoleId = users.getRoleId("Owner");
        def responsibilities = responsibilityApi.findResponsibilities(FindResponsibilitiesRequest.builder()
            .resourceIds(Collections.singletonList(domain.id))
            .ownerIds(Collections.singletonList(ownerUserId))
            .roleIds(Collections.singletonList(ownerRoleId))
            .build())
         .getResults()
        responsibilityApi.removeResponsibilities(new ArrayList(responsibilities.collect{ it.getId() }));
    ]]></script>
</scriptTask>

AddTermDelegate

API v1
<serviceTask id="servicetask1" name="Add term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.AddTermDelegate">
    <extensionElements>
        <activiti:field name="signifier">
            <activiti:expression>${givenSignifier}</activiti:expression>
        </activiti:field>
        <activiti:field name="vocabularyId">
            <activiti:expression>${givenVocabularyId}</activiti:expression>
        </activiti:field>
        <activiti:field name="typeId">
            <activiti:expression>${givenTypeId}</activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Add asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.AddAssetRequest;
        import com.collibra.dgc.core.api.model.instance.Asset;
        Asset asset = assetApi.addAsset(AddAssetRequest.builder()
            .name(givenSignifier)
            .displayName(givenSignifier)
            .typeId(string2Uuid(givenTypeId))
            .domainId(string2Uuid(givenVocabularyId))
            .build())
        execution.setVariable("output", asset)
    ]]></script>
</scriptTask>

GetTermDelegate

API v1
<serviceTask id="servicetask1" name="Get term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.GetTermDelegate">
    <extensionElements>
        <activiti:field name="termId">
            <activiti:expression><![CDATA[${giventTermId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Get asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.instance.Asset;
        Asset asset = assetApi.getAsset(givenAssetId);
        execution.setVariable("output", asset)
    ]]></script>
</scriptTask>

RemoveTermDelegate

API v1
<serviceTask id="servicetask1" name="Remove term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.RemoveTermDelegate">
    <extensionElements>
        <activiti:field name="termId">
            <activiti:expression><![CDATA[${givenTermId}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Remove asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        assetApi.removeAsset(givenAssetId);
    ]]></script>
</scriptTask>

AddComment

API v1
<serviceTask id="servicetask1" name="Add comment" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.AddComment">
    <extensionElements>
        <activiti:field name="comment">
            <activiti:string>The content of the comment.</activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Store comment" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.comment.AddCommentRequest
        commentApi.addComment(AddCommentRequest.builder()
            .content("The content of the comment.")
            .baseResourceId(item.getId())
            .baseResourceType(item.getType())
            .build())
    ]]></script>
</scriptTask>

AddDecisionVote

API v1
<serviceTask id="servicetask1" name="Add vote outcome to list" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.AddDecisionVote"></serviceTask>
API v2
<scriptTask id="scripttask1" name="Add vote outcome to list" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        def voter = execution.getVariable("voter");
        Boolean approved = (Boolean) execution.getVariable("approve");
        comment = execution.getVariable("comment");
        vote = [
            "name" : voter,
            "approved": approved,
            "comment": comment?.toString()
        ]
        voting = execution.getVariable("votingResult");
        voting.add(vote);
        checkEarlyComplete(execution, voting);
        execution.setVariable("votingResult", voting);
        def checkEarlyComplete(execution, voting) {
            Boolean earlyComplete = (Boolean) execution.getVariable("earlyComplete");
            if (earlyComplete) {
                Long percentage = (Long) execution.getVariable("votePercentage");
                List<String> voters = (List<String>) execution.getVariable("voters");
                double approved = 0;
                double disapproved = 0;
                double totalVoters = voters.size();
                for (Map vote : voting) {
                    if (vote.approved) {
                        approved++;
                    }
                    else {
                        disapproved++;
                    }
                }
                if (approved / totalVoters >= percentage / 100.0) {
                    execution.setVariable("completion", Boolean.TRUE);
                }
                else if (disapproved / totalVoters > (100 - percentage) / 100.0) {
                    execution.setVariable("completion", Boolean.TRUE);
                }
            }
        }
    ]]></script>
</scriptTask>

ChangeIssueResponsibleCommunity

API v1
<serviceTask id="servicetask1" name="Move the Issue" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ChangeIssueResponsibleCommunity">
    <extensionElements>
        <activiti:field name="responsibleCommunity">
            <activiti:expression>${responsibleCommunity}</activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Move the Issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script>
        import com.collibra.dgc.core.api.dto.instance.issue.MoveIssueRequest
        issueApi.moveIssue(MoveIssueRequest.builder()
            .issueId(item.id)
            .communityId(responsibleCommunity)
            .build())
    </script>
</scriptTask>

ChangeStatusDelegate

API v1
<serviceTask id="servicetask1" name="Mark as Accepted" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ChangeStatusDelegate"
    <extensionElements>
        <activiti:field name="targetStatusId">
            <activiti:string><![CDATA[00000000-0000-0000-0000-000000005009]]></activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Mark as Accepted" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.ChangeAssetRequest
        String acceptedStatusId = "00000000-0000-0000-0000-000000005009"
        assetApi.changeAsset(ChangeAssetRequest.builder()
            .id(item.id)
            .statusId(string2Uuid(acceptedStatusId))
            .build())
    ]]></script>
</scriptTask>

StateChanger

API v1
<serviceTask id="servicetask1" name="Mark as Accepted" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.StateChanger"
    <extensionElements>
        <activiti:field name="targetStatusId">
            <activiti:string><![CDATA[00000000-0000-0000-0000-000000005009]]></activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Mark as Accepted" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.ChangeAssetRequest
        String acceptedStatusId = "00000000-0000-0000-0000-000000005009"
        assetApi.changeAsset(ChangeAssetRequest.builder()
            .id(item.id)
            .statusId(string2Uuid(acceptedStatusId))
            .build())
    ]]></script>
</scriptTask>

CountVoteResult

API v1
<serviceTask id="servicetask1" name="Count voting result" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CountVoteResult"></serviceTask>
API v2
<scriptTask id="scripttask1" name="Count voting result" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        def voting = execution.getVariable("votingResult")
        boolean result = getResult(voting, execution)
        execution.setVariable("votingSuccess", result)
        def getResult(voting, execution) {
            Long percentage = (Long) execution.getVariable("votePercentage");
            if (!voting.isEmpty()) {
                int requiredToVote = ((List<String>) execution.getVariable("voters")).size();
                int approved = getNumberOfApprovals(voting);
                double fraction = percentage / 100.0;
                return approved >= requiredToVote * fraction;
            }
            return false;
        }
        def getNumberOfApprovals(List<Map> voting) {
            int approved = 0;
            for (Map vote : voting) {
                    if (vote.approved) {
                        approved++;
                    }
                }
            return approved;
        }
    ]]></script>
</scriptTask>

CreateIssue

API v1
<serviceTask id="servicetask1" name="Create issue" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CreateIssue">
    <extensionElements>
        <activiti:field name="subject">
            <activiti:expression>${subject}</activiti:expression>
        </activiti:field>
        <activiti:field name="description">
            <activiti:expression>${description}</activiti:expression>
        </activiti:field>
        <activiti:field name="priority">
            <activiti:expression>${priority}</activiti:expression>
        </activiti:field>
        <activiti:field name="relations">
            <activiti:expression>${relations}</activiti:expression>
        </activiti:field>
        <activiti:field name="classifications">
            <activiti:expression>${classifications}</activiti:expression>
        </activiti:field>
        <activiti:field name="requester">
            <activiti:expression>${requester}</activiti:expression>
        </activiti:field>
        <activiti:field name="responsibleCommunity">
            <activiti:expression>${responsibleCommunity}</activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Create issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.issue.RelatedAssetReference;
        import com.collibra.dgc.core.api.dto.instance.issue.AddIssueRequest;
        import com.collibra.dgc.core.api.dto.user.FindUsersRequest;
        def requesterId = userApi.getUserByUsername(requester).getId()
        def descriptionString = execution.getVariable("description")?.toString() ?: ""
        def communityId = responsibleCommunity
        def relatedAssets = execution.getVariable("relatedAssets") ?: []
        def relatedAssetsList = []
        relatedAssets.each{
            relatedAssetId ->
            def relatedAssetRef = RelatedAssetReference.builder()
                .assetId(relatedAssetId)
                .direction(true)
                .relationTypeId(string2Uuid(impactsRelationId))
                .build()
            relatedAssetsList.add(relatedAssetRef)
        }
        def newIssueUuid = issueApi.addIssue(AddIssueRequest.builder()
            .name(subject)
            .description(descriptionString)
            .priority(priority)
            .responsibleCommunityId(communityId)
            .relatedAssets(relatedAssetsList)
            .categoryIds(classifications)
            .typeId(string2Uuid(dataIssueId))
            .requesterId(requesterId)
            .build())
        .getId()
        execution.setVariable("outputCreatedTermId", newIssueUuid))
    ]]></script>
</scriptTask>

CreateVotersList

API v1
<serviceTask id="servicetask1" name="Create list of voters" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CreateVotersList">
    <extensionElements>
        <activiti:field name="voterUserExpression">
            <activiti:expression><![CDATA[${voterUserExpression}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Create list of voters" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        def voterUserExpression = execution.getVariable("voterUserExpression")
        final Set<String> voters = new HashSet<>();
        for (String userExpression : utility.toList(voterUserExpression)) {
            voters.addAll(users.getUserNamesWithError(userExpression));
        }
        execution.setVariable("voters", new ArrayList<>(voters));
        execution.setVariable("votingResult", []);
        execution.setVariable("completion", Boolean.FALSE);
    ]]></script>
</scriptTask>

GetModel

API v1
<serviceTask id="servicetask1" name="Get Model" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetModel">
    <extensionElements>
        <activiti:field name="viewConfig">
            <activiti:expression>${viewConfig}</activiti:expression>
        </activiti:field>
        <activiti:field name="varNames">
            <activiti:string>VOC_ID</activiti:string>
        </activiti:field>
        <activiti:field name="varValues">
            <activiti:expression>${item.id}</activiti:expression>
        </activiti:field>
        <activiti:field name="resultVariable">
            <activiti:string>assets</activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2

This delegate is not supported and there is no alternative or possibility to use it.

GetRelatedTerms

API v1
<serviceTask id="servicetask1" name="Get related terms" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetRelatedTerms">
    <extensionElements>
        <activiti:field name="relationRole">
            <activiti:expression>"role(Business Steward)"</activiti:expression>
        </activiti:field>
        <activiti:field name="resultVariable">
            <activiti:string>relations</activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Get related terms" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.meta.type.RelationType;
        import com.collibra.dgc.core.api.dto.meta.relationtype.FindRelationTypesRequest;
        import com.collibra.dgc.core.api.model.instance.Relation;
        import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;
        import com.collibra.dgc.core.api.model.reference.NamedResourceReference;
        import com.collibra.dgc.workflow.api.exception.WorkflowException;
        List<RelationType> relationTypes = relationTypeApi.findRelationTypes(FindRelationTypesRequest.builder()
            .role("groups")
            .build())
        .getResults()
        if (relationTypes.isEmpty()) {
            throw new WorkflowException("No relation types for provided role 'groups'");
        }
        List<UUID> relatedAssetIds = new ArrayList<>();
        for (RelationType relationType : relationTypes) {
            List<Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(item.id)
                .relationTypeId(relationType.getId())
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssetIds.add(relation.getTarget().getId());
            }
        }
        execution.setVariable("relations", relatedAssetIds);
    ]]></script>
</scriptTask>

GetRelatedTermsDelegate

API v1
<serviceTask id="servicetask1" name="Get related terms" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetRelatedTermsDelegate">
    <extensionElements>
        <activiti:field name="termId">
            <activiti:expression><![CDATA[${item.id}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="direction">
            <activiti:string>true</activiti:string>
        </activiti:field>
        <activiti:field name="relationTypeId">
            <activiti:string>"00000000-0000-0000-0000-000000007021"</activiti:string>
        </activiti:field>
        <activiti:field name="resultVariableName">
            <activiti:string>"relatedAssets"</activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Get related terms" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.instance.Asset;
        import com.collibra.dgc.core.api.model.instance.Relation;
        import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;
        assetId = item.id;
        direction = Boolean.TRUE;
        groupsRelationTypeId = string2Uuid("00000000-0000-0000-0000-000000007021");
        List<Asset> relatedAssets = new ArrayList<>();
        if (direction) {
            List<Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(assetId)
                .relationTypeId(groupsRelationTypeId)
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssets.add(relation.getSource());
            }
        }
		else {
            List<Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .targetId(assetId)
                .relationTypeId(groupsRelationTypeId)
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssets.add(relation.getTarget());
            }
        }
        execution.setVariable("relatedAssets", relatedAssets);
    ]]></script>
</scriptTask>

GetUserNames

API v1
<serviceTask id="servicetask1" name="Get user names" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetUserNames">
    <extensionElements>
        <activiti:field name="userNames">
            <activiti:expression><![CDATA[${userName}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="userExpressions">
            <activiti:expression><![CDATA[${role}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="groupNames">
            <activiti:expression><![CDATA[${group}]]></activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Get user names" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.user.User;
        import com.collibra.dgc.core.api.model.usergroup.UserGroup;
        import com.collibra.dgc.core.api.dto.usergroup.FindUserGroupsRequest;
        Set<String> userNameResult = new HashSet<String>();
        userNameResult.addAll(utility.toList("${userName}"));
        userNameResult.addAll(users.getUserNames("${role}"));
        List<UserGroup> userGroupList = userGroupApi.findUserGroups(FindUserGroupsRequest.builder()
            .name("${group}")
            .nameMatchMode(MatchMode.EXACT)
            .build())
        .getResults()
        for (UserGroup userGroup : userGroupList) {
            List<User> userList = userApi.findUsers(FindUsersRequest.builder()
                .groupId(userGroup.getId())
                .build())
            .getResults()
            for (User user : userList) {
                userNameResult.add(user.getUserName());
            }
        }
        execution.setVariable("assembledUserNames", userNameResult);
    ]]></script>
</scriptTask>

MailSender

API v1
com.collibra.dgc.core.workflow.activiti.delegate.MailSender
API v2
com.collibra.dgc.workflow.api.listener.ActionMailSender

ProvideDefaultsDelegate

API v1
<serviceTask id="servicetask1" name="Check optional variables" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ProvideDefaultsDelegate">
    <extensionElements>
        <activiti:field name="names">
            <activiti:string><![CDATA[resultTemplate,reminderTemplate]]></activiti:string>
        </activiti:field>
        <activiti:field name="defaults">
            <activiti:string><![CDATA[result,reminder]]></activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Check Optional Variables" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.workflow.api.exception.WorkflowException
        List<String> namesList = utility.toList(execution.getVariable("names"))
        List<String> defaultsList = utility.toList(execution.getVariable("defaults"))
        if(namesList.size() != defaultsList.size()) {
            loggerApi.error("names list contains " + namesList.size() + " elements while the default values list contains " +
defaultsList.size() + " elements. Those sizes should be equal.")
            String errorMessage = translation.getMessage("workflowNamesAndDefaultsSizeDontMatch",namesList.size(),defaultsList.size())
            String errorTitle = translation.getMessage("workflowValueNotAllowed");
            WorkflowException workflowException = new WorkflowException(errorMessage);
            ex.setTitleMessage(errorTitle);
            throw workflowException;
        }
        for (int i = 0; i < namesList.size(); i++) {
            String currentName = namesList.get(i).trim();
            String currentDefault = defaultsList.get(i);
            if (!execution.hasVariable(currentName)) {
                execution.setVariable(currentName, currentDefault);
            }
        }
    ]]></script>
</scriptTask>

StartCollibraConnectFlowDelegate

API v1
com.collibra.dgc.core.workflow.activiti.delegate.StartCollibraConnectFlowDelegate
API v2
com.collibra.dgc.workflow.api.delegate.StartCollibraConnectFlowDelegate

StartWorkflowInstanceDelegate

API v1
<serviceTask id="servicetask1" name="Start workflow" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.StartWorkflowInstanceDelegate">
    <extensionElements>
        <activiti:field name="processId">
            <activiti:string><![CDATA[subWorkflow]]></activiti:string>
        </activiti:field>
        <activiti:field name="resourceId">
            <activiti:expression><![CDATA[${targetTermId}]]></activiti:expression>
        </activiti:field>
        <activiti:field name="resourceType">
            <activiti:string><![CDATA[TE]]></activiti:string>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Start workflow" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.workflow.StartWorkflowInstancesRequest;
        import com.collibra.dgc.core.api.model.workflow.WorkflowBusinessItemType;
        def workflowDefinitionId = workflowDefinitionApi.getWorkflowDefinitionByProcessId(subWorkflow).getId();
        workflowInstanceApi.startWorkflowInstances(StartWorkflowInstancesRequest.builder()
            .workflowDefinitionId(workflowDefinitionId)
            .addBusinessItemId(string2Uuid(${targetTermId}))
            .businessItemType(WorkflowBusinessItemType.valueOf("ASSET"))
            .build())
    ]]></script>
</scriptTask>

TermIntakeDelegate

API v1
<serviceTask id="servicetask1" name="Create Term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.TermIntakeDelegate">
    <extensionElements>
        <activiti:field name="signifier">
            <activiti:expression>${signifier}</activiti:expression>
        </activiti:field>
        <activiti:field name="conceptType">
            <activiti:expression>${conceptType}</activiti:expression>
        </activiti:field>
        <activiti:field name="vocabulary">
            <activiti:expression>${intakeVocabulary}</activiti:expression>
        </activiti:field>
        <activiti:field name="definition">
            <activiti:expression>${definition}</activiti:expression>
        </activiti:field>
        <activiti:field name="description">
            <activiti:expression>${description}</activiti:expression>
        </activiti:field>
        <activiti:field name="example">
            <activiti:expression>${example}</activiti:expression>
        </activiti:field>
        <activiti:field name="usesrelation">
            <activiti:expression>${usesrelation}</activiti:expression>
        </activiti:field>
        <activiti:field name="note">
            <activiti:expression>${note}</activiti:expression>
        </activiti:field>
    </extensionElements>
</serviceTask>
API v2
<scriptTask id="scripttask1" name="Create Asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.AddAssetRequest;
        import com.collibra.dgc.core.api.dto.instance.attribute.AddAttributeRequest;
        import com.collibra.dgc.core.api.dto.instance.relation.AddRelationRequest;
        def note = execution.getVariable("note")
        def definition = execution.getVariable("definition")  
        def newAssetUuid = assetApi.addAsset(AddAssetRequest.builder()
            .name(signifier)
            .displayName(signifier)
            .typeId(conceptType)
            .domainId(string2Uuid(intakeVocabulary))
            .build())
        .getId()
        addAttributeToAsset(newAssetUuid,definition,definitionAttributeTypeUuid)
        addAttributeToAsset(newAssetUuid,note,noteAttributeTypeUuid)
        addRelationsWithOneSourceAndMultipleTargetsToAsset(newAssetUuid,usesRelationTypeUuid,usesrelation)
        execution.setVariable("outputCreatedTermId",uuid2String(newAssetUuid))
        def addAttributeToAsset(assetUuid,attributeValue,attributeTypeUuid) {
            if (attributeValue == null){
                return;
            }
            attributeApi.addAttribute(AddAttributeRequest.builder()
                .assetId(assetUuid)
                .typeId(string2Uuid(attributeTypeUuid))
                .value(attributeValue.toString())
                .build())
        } 
        def addRelationsWithOneSourceAndMultipleTargetsToAsset(sourceUuid,relationTypeUuid,targetUuidList) {
            def addRelationsRequests = []
            loggerApi.info("Source: " + sourceUuid.toString())
            loggerApi.info("Type: " + relationTypeUuid.toString())
            loggerApi.info("Target: " + targetUuidList.toString())
            loggerApi.info("Target Class" + targetUuidList.getClass().toString())
            targetUuidList.each{ t ->
            loggerApi.info("T Class" + t.getClass().toString())
            addRelationsRequests.add(AddRelationRequest.builder()
                .sourceId(sourceUuid)
                .targetId(t)
                .typeId(string2Uuid(relationTypeUuid))
                .build())
            }
            relationApi.addRelations(addRelationsRequests)
        }
    ]]></script>
</scriptTask>

GetRelations and RemoveRelations delegates

The GetRelations and RemoveRelations delegate respectively gets and removes relations that can be identified by ID or source, term and type. Affected relations are returned with output variable.

Field name Mandatory Description
relationId N Id of the relation.
sourceTermId N Id of the source term of the relation.
targetTermId Id of the target term of the relation.
binaryFactTypeId Id of the BinaryFactType, this is the ID of the relation type.
resourceVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output"

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

  • Get relations:
    <scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;        
            def relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(item.id)
                .build())
            .getResults();
            execution.setVariable("output", relations)
        ]]></script>
    </scriptTask>
  • Remove relations:
    <scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;        
            def relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(item.id)
                .build())
            .getResults();
            relationApi.removeRelations(new ArrayList(relations.collect{ it.getId() }));
        ]]></script>
    </scriptTask>

AddRelation delegate

The AddRelation delegate adds relation of given type between source and term. Added relation is returned with output variable.

Field name Mandatory Description
sourceTermId Y Id of the source term of the relation.
targetTermId Y Id of the target term of the relation.
binaryFactTypeId Y Id of the BinaryFactType, this is the ID of the relation type.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Add relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.relation.AddRelationRequest;
        def relation = relationApi.addRelation(AddRelationRequest.builder()
            .typeId(string2Uuid(givenRelationTypeId))
            .sourceId(item.id)
            .targetId(givenTargetResourceId)
            .build());
        execution.setVariable("output", relation)
    ]]></script>
</scriptTask>

AddResourceRole and RemoveResourceRole delegates

The AddResourceRole and RemoveResourceRole delegate respectively adds and removes the user as the member with the role to the resource. Matched/removed member is returned with output variable.

Field name Mandatory Description
resourceId Y Id of the resource for the member.
roleId Y Identify the member role - either id or name must be set, setting both will cause id to be used.
roleName
userId Y Identify the member user - either id or name must be set, setting both will cause id to be used.
userName
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

  • Add resource role:
    <scriptTask id="scripttask1" name="Assign owner" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            import com.collibra.dgc.core.api.dto.instance.responsibility.AddResponsibilityRequest
            def userName = execution.getVariable("startUser")
            def ownerUserId = userApi.getUserByUsername(userName).getId();           
            responsibilityApi.addResponsibility(AddResponsibilityRequest.builder()
                .resourceId(item.id)
                .resourceType(item.type)
                .roleId(string2Uuid(roleId))
                .ownerId(ownerUserId)
                .build())
        ]]></script>
    </scriptTask>
  • Remove resource role:
    <scriptTask id="scripttask1" name="Remove current Owner role" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            import com.collibra.dgc.core.api.dto.instance.responsibility.FindResponsibilitiesRequest
            def ownerUserId = userApi.getUserByUsername(ownerName).getId();
            def ownerRoleId = users.getRoleId("Owner");
            def responsibilities = responsibilityApi.findResponsibilities(FindResponsibilitiesRequest.builder()
                .resourceIds(Collections.singletonList(domain.id))
                .ownerIds(Collections.singletonList(ownerUserId))
                .roleIds(Collections.singletonList(ownerRoleId))
                .build())
             .getResults()
            responsibilityApi.removeResponsibilities(new ArrayList(responsibilities.collect{ it.getId() }));
        ]]></script>
    </scriptTask>

GetTerm and RemoveTerm delegate

The GetTerm and RemoveTerm delegate respectively gets and removes the term that can be uniquely identified by either its ID or vocabularyId and signifier. If the term ID is given, the rest of the parameters is not taken into account. Matched/removed term is returned with the output variable.

Field name Mandatory Description
termId N Id of the term.
vocabularyId N Id of the vocabulary that the term is in.
signifier N Signifier of the term.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

  • Get term:
    <scriptTask id="scripttask1" name="Get asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            import com.collibra.dgc.core.api.model.instance.Asset;
            Asset asset = assetApi.getAsset(givenAssetId);
            execution.setVariable("output", asset)
        ]]></script>
    </scriptTask>
  • Remove term:
    <scriptTask id="scripttask1" name="Remove asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            assetApi.removeAsset(givenAssetId);
        ]]></script>
    </scriptTask>

AddTerm delegate

The AddTerm delegate adds the term and returns it with the output variable.

Field name Mandatory Description
signifier Y Signifier of the term.
vocabularyId Y Id of the vocabulary that the term will be added in.
typeId Y Identify type term for the term - either id or signifier must be set, setting both will cause typeId to be used.
typeSignifier
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Add asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.AddAssetRequest;
        import com.collibra.dgc.core.api.model.instance.Asset;
        Asset asset = assetApi.addAsset(AddAssetRequest.builder()
            .name(givenSignifier)
            .displayName(givenSignifier)
            .typeId(string2Uuid(givenTypeId))
            .domainId(string2Uuid(givenVocabularyId))
            .build())
        execution.setVariable("output", asset)
    ]]></script>
</scriptTask>

GetAttribute and RemoveAttribute delegates

The GetAttribute and RemoveAttribute delegate respectively gets or removes attributes identified by the input parameters. Matching can be done by attributeId or by owner and type. If attributeId given the rest of the parameters are not taken into account. Matched/removed attributes are returned as a list with the output variable.

Field name Mandatory Description
attributeId N ID of the attribute.
ownerId N Id of the term that the attribute belongs to.
typeId N Identify type term of the attribute - either id or signifier must be set, setting both will cause typeId to be used.
typeSignifier
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output"

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

  • Get attribute:
    <scriptTask id="scripttask1" name="Get attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            def attribute = attributeApi.getAttribute(string2Uuid(givenAttributeId));
            execution.setVariable("output", attribute)
        ]]></script>
    </scriptTask>
  • Remove attribute:
    <scriptTask id="scripttask1" name="Remove attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
        <script><![CDATA[
            attributeApi.removeAttribute(string2Uuid(givenAttributeId));
        ]]></script>
    </scriptTask>

AddAttribute delegate

The AddAttribute delegate adds an attribute and returns the added one with the output variable.

Field name Mandatory Description
value Y String representation of the value of an attribute, in case it's multi list separate values with the sign specified in multilistSeparator parameter. In case of boolean attribute use "true" or "false".
ownerId Y ID of the term that the attribute will be added for.
typeId Y Identify type term for the attribute - either id or signifier must be set, setting both will cause typeId to be used.
typeSignifier
multilistSeparator N The separator for multilist attribute value. By default comma will be used, if you want to customize it specify your own.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output"

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Add attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.attribute.AddAttributeRequest;
        def attribute = attributeApi.addAttribute(AddAttributeRequest.builder()
            .assetId(item.id)
            .typeId(string2Uuid(givenAttributeTypeId)))
            .value("attribute content")
            .build())
        execution.setVariable("output", attribute)
    ]]></script>
</scriptTask>

TermIntake delegate

The TermIntake delegate takes in new terms in our application. The ID of the created term will put in a workflow variable under the name outputCreatedTermId.

Field name Mandatory Description
signifier Y The signifier of the term to create.
conceptType Y The ID of the concept type.
vocabulary Y The ID of the vocabulary.
definition N The contents of the definition attribute to be created.
description N The contents of the description attribute to be created.
note N The contents of the note attribute to be created.
example N The contents of the example attribute to be created.
usesrelation N The ID of the target term that will be related using the 'uses' relation.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Create Asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.AddAssetRequest;
        import com.collibra.dgc.core.api.dto.instance.attribute.AddAttributeRequest;
        import com.collibra.dgc.core.api.dto.instance.relation.AddRelationRequest;
        def note = execution.getVariable("note")
        def definition = execution.getVariable("definition")  
        def newAssetUuid = assetApi.addAsset(AddAssetRequest.builder()
            .name(signifier)
            .displayName(signifier)
            .typeId(conceptType)
            .domainId(string2Uuid(intakeVocabulary))
            .build())
        .getId()
        addAttributeToAsset(newAssetUuid,definition,definitionAttributeTypeUuid)
        addAttributeToAsset(newAssetUuid,note,noteAttributeTypeUuid)
        addRelationsWithOneSourceAndMultipleTargetsToAsset(newAssetUuid,usesRelationTypeUuid,usesrelation)
        execution.setVariable("outputCreatedTermId",uuid2String(newAssetUuid))
        def addAttributeToAsset(assetUuid,attributeValue,attributeTypeUuid) {
            if (attributeValue == null){
                return;
            }
            attributeApi.addAttribute(AddAttributeRequest.builder()
                .assetId(assetUuid)
                .typeId(string2Uuid(attributeTypeUuid))
                .value(attributeValue.toString())
                .build())
        } 
        def addRelationsWithOneSourceAndMultipleTargetsToAsset(sourceUuid,relationTypeUuid,targetUuidList) {
            def addRelationsRequests = []
            loggerApi.info("Source: " + sourceUuid.toString())
            loggerApi.info("Type: " + relationTypeUuid.toString())
            loggerApi.info("Target: " + targetUuidList.toString())
            loggerApi.info("Target Class" + targetUuidList.getClass().toString())
            targetUuidList.each{ t ->
            loggerApi.info("T Class" + t.getClass().toString())
            addRelationsRequests.add(AddRelationRequest.builder()
                .sourceId(sourceUuid)
                .targetId(t)
                .typeId(string2Uuid(relationTypeUuid))
                .build())
            }
            relationApi.addRelations(addRelationsRequests)
        }
    ]]></script>
</scriptTask>

ChangeStatus delegate

The ChangeStatus delegate changes the state of current business item in the process to a specified target state. The current business item is expected to be a representation.

Field name Mandatory Description
parentId N If you want to override the default behavior that the status of the current business item is changed, you can fill in the ID of an existing term to change its status instead.
targetStatusId Y Identify the target status -either id or signifier must be set, setting both will cause ID to be used.
targetStatusSignifier
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Mark as Accepted" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.asset.ChangeAssetRequest
        String acceptedStatusId = "00000000-0000-0000-0000-000000005009"
        assetApi.changeAsset(ChangeAssetRequest.builder()
            .id(item.id)
            .statusId(string2Uuid(acceptedStatusId))
            .build())
    ]]></script>
</scriptTask>

StartWorkflowInstance delegate

The StartWorkflowInstance delegate starts a new workflow instance for the given workflow processId. It is possible to specify the business item of the workflow that is to be started. All checks and authorizations will follow the same rules and logic as if the workflow was started form the REST or Component API layers.

Field name Mandatory Description
processId Y The process ID of the workflow you want to start. This is the ID in the workflow xml definition, for example approvalProcess.
resourceId Y/N The resource ID of the workflow business item, if not provided, a 'global' workflow is started.
resourceType Y/N

The resource type of the workflow business item in string format, for example TE for a Term.

Mandatory if resourceId is filled in.

propertyKeyList N The key values for the workflow form properties as a comma separated list.
propertyValueList Y/N

The values for the workflow form properties as a comma separated list.

Mandatory if propertyKeyList is filled in.

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Start workflow" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.workflow.StartWorkflowInstancesRequest;
        import com.collibra.dgc.core.api.model.workflow.WorkflowBusinessItemType;
        def workflowDefinitionId = workflowDefinitionApi.getWorkflowDefinitionByProcessId(subWorkflow).getId();
        workflowInstanceApi.startWorkflowInstances(StartWorkflowInstancesRequest.builder()
            .workflowDefinitionId(workflowDefinitionId)
            .addBusinessItemId(string2Uuid(${targetTermId}))
            .businessItemType(WorkflowBusinessItemType.valueOf("ASSET"))
            .build())
    ]]></script>
</scriptTask>

MailSender delegate

A delegate used for sending mails from the workflow.

Field name Mandatory Description
mailTo One of the recipient fields is mandatory User expression for the users that should receive the mail.
mailToRoles One of the recipient fields is mandatory A comma separated list of roles that should receive the mail.
mailToUsers One of the recipient fields is mandatory A comma separated list of user names that should receive the mail.
template No The name of the template that should be used to generate the email.
section No The name of the section that should be used to generate the mail. The default is the process ID of the current workflow.

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Notify Requester" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        def usersIds = users.getUserIds("role(Requester)");
        if (usersIds.isEmpty()){
            loggerApi.warn("No users to send a mail to, no mail will be sent");
        } else {
             mail.sendMails(usersIds, "in-progress", null, execution);
        }
    ]]></script>
</scriptTask>

GetUserNames delegate

The GetUserNames delegate gathers all userNames from the given input fields. All input fields are optional. The delegate will evaluate any input and compose a CSV of all resulting usernames.

Field name Mandatory Description
userNames N A CSV of user names that you want to have included in the result.
groupNames N A CSV of group names that you want to have evaluated and included in the result.
roleNames N A CSV of role names that you want to have evaluated on the current business item and included in the result.
userExpressions N A CSV of user expressions that you want to have evaluated and included in the result.
resultVariable N The variable name to store the CSV of user names in. By default 'assembledUserNames' if not provided.

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Get user names" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.user.User;
        import com.collibra.dgc.core.api.model.usergroup.UserGroup;
        import com.collibra.dgc.core.api.dto.usergroup.FindUserGroupsRequest;
        Set<String> userNameResult = new HashSet<String>();
        userNameResult.addAll(utility.toList("${userName}"));
        userNameResult.addAll(users.getUserNames("${role}"));
        List<UserGroup> userGroupList = userGroupApi.findUserGroups(FindUserGroupsRequest.builder()
            .name("${group}")
            .nameMatchMode(MatchMode.EXACT)
            .build())
        .getResults()
        for (UserGroup userGroup : userGroupList) {
            List<User> userList = userApi.findUsers(FindUsersRequest.builder()
                .groupId(userGroup.getId())
                .build())
            .getResults()
            for (User user : userList) {
                userNameResult.add(user.getUserName());
            }
        }
        execution.setVariable("assembledUserNames", userNameResult);
    ]]></script>
</scriptTask>

GetRelatedTerms delegate

The GetRelatedTerms delegate retrieves all target term IDs related to the current business term as source with a relation type that matches the given (co-)role. It is assumed that the business item is an asset, don't use the delegate with other business item types.

Field name Mandatory Description
termId N ID of the term that is involved in the relation. If not provided, the current business item will be used. Ensure it is an asset. Don't use the delegate with other business item types.
direction N Direction of the relation in respect to the term, set true for source and false for target. False by default - if not set.
relationTypeId Y ID of the relation type.
resultVariableName N The name of the variable that the result will be set in. If not provided, the result will be set in the variable named output.

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Get related terms" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.model.meta.type.RelationType;
        import com.collibra.dgc.core.api.dto.meta.relationtype.FindRelationTypesRequest;
        import com.collibra.dgc.core.api.model.instance.Relation;
        import com.collibra.dgc.core.api.dto.instance.relation.FindRelationsRequest;
        import com.collibra.dgc.core.api.model.reference.NamedResourceReference;
        import com.collibra.dgc.workflow.api.exception.WorkflowException;
        List<RelationType> relationTypes = relationTypeApi.findRelationTypes(FindRelationTypesRequest.builder()
            .role("groups")
            .build())
        .getResults()
        if (relationTypes.isEmpty()) {
            throw new WorkflowException("No relation types for provided role 'groups'");
        }
        List<UUID> relatedAssetIds = new ArrayList<>();
        for (RelationType relationType : relationTypes) {
            List<Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(item.id)
                .relationTypeId(relationType.getId())
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssetIds.add(relation.getTarget().getId());
            }
        }
        execution.setVariable("relations", relatedAssetIds);
    ]]></script>
</scriptTask>

CreateIssue delegate

The CreateIssue delegate creates a new data issue.

Field name Mandatory Description
requester Y The username of the requester creating the issue.
subject Y The signifier of the issue to create.
description N The description of the issue.
priority N The priority of the issue ('Blocking', 'Critical', 'Urgent', 'Normal', 'Minor')
relations N A CSV of related asset IDs to this issue.
classifications N A CSV of issue classifications.
responsibleCommunity N The responsible community for this issue, by default 'Data Governance Council' community.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output"

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Create issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.issue.RelatedAssetReference;
        import com.collibra.dgc.core.api.dto.instance.issue.AddIssueRequest;
        import com.collibra.dgc.core.api.dto.user.FindUsersRequest;
        def requesterId = userApi.getUserByUsername(requester).getId()
        def descriptionString = execution.getVariable("description")?.toString() ?: ""
        def communityId = responsibleCommunity
        def relatedAssets = execution.getVariable("relatedAssets") ?: []
        def relatedAssetsList = []
        relatedAssets.each{
            relatedAssetId ->
            def relatedAssetRef = RelatedAssetReference.builder()
                .assetId(relatedAssetId)
                .direction(true)
                .relationTypeId(string2Uuid(impactsRelationId))
                .build()
            relatedAssetsList.add(relatedAssetRef)
        }
        def newIssueUuid = issueApi.addIssue(AddIssueRequest.builder()
            .name(subject)
            .description(descriptionString)
            .priority(priority)
            .responsibleCommunityId(communityId)
            .relatedAssets(relatedAssetsList)
            .categoryIds(classifications)
            .typeId(string2Uuid(dataIssueId))
            .requesterId(requesterId)
            .build())
        .getId()
        execution.setVariable("outputCreatedTermId", newIssueUuid))
    ]]></script>
</scriptTask>

ChangeIssueResponsibleCommunity delegate

The ChangeIssueResponsibleCommunity delegate moves an issue to another responsible community.

Field name Mandatory Description
responsibleCommunity N The ID of the responsible community you want this issue to be moved to. Leave this empty if you want the issue to be moved to the standard issues vocabulary under the admin community.

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Move the Issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script>
        import com.collibra.dgc.core.api.dto.instance.issue.MoveIssueRequest
        issueApi.moveIssue(MoveIssueRequest.builder()
            .issueId(item.id)
            .communityId(responsibleCommunity)
            .build())
    </script>
</scriptTask>

AddComment delegate

The AddComment delegate adds comments to the current workflow business item. It is also capable of adding comment for guest users (= users that started the workflow as guest).

Field name Mandatory Description
comment Y A string representation of the actual comment that needs to be added. The comment will be added to the current business item using the current user.
guestUserExpression N The expression evaluating to the guest user that is adding this comment. This overrides the default behavior so that this comment is not added by the current user, but by the specified guest user instead. The user expression should resolve to only one user, otherwise an exception will be thrown.
parent N If you want to add a reply to an already existing parent comment, fill in the id of the parent comment here. This does not have to be a comment of the current workflow business item.
resultVariableName N The name of the variable that the result will be set in, if not given the result will be set in the variable named "output".

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

<scriptTask id="scripttask1" name="Store comment" scriptFormat="groovy" activiti:autoStoreVariables="false">
    <script><![CDATA[
        import com.collibra.dgc.core.api.dto.instance.comment.AddCommentRequest
        commentApi.addComment(AddCommentRequest.builder()
            .content("The content of the comment.")
            .baseResourceId(item.getId())
            .baseResourceType(item.getType())
            .build())
    ]]></script>
</scriptTask>

Script task

A task that is executed by a business process engine to mainly perform simple calculations or operations. When the task is ready to start, the engine executes the script, and marks it as completed when the script has finished.

To configure script tasks, you must provide a script in Groovy language.

Because each script task is independent, include import statements for all the packages you are using in a script for each script task. Avoid using generic imports to reduce execution time.

Do not use script tasks to declare methods that a subsequent script task would use. Groovy compiles and temporarily caches the script at execution time. If you call the method in a subsequent script tasks:
  • The cached method might not be available anymore.
  • Even if the method is available, it retains the cached values of variables, which might lead to unexpected results.

Use the groovy-lib folder to store scripts that are common to a large number of tasks.

In the context of workflow script tasks, the <Resource>Api interfaces (such as AssetApi, CommunityTypeApi, FileApi, and so on) are already instantiated and accessible via <resource>Api variables (such as assetApi, communityTypeApi, fileApi, and so on).

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Details

Attribute Description
Script A script that is executed when the task is activated.

Attributes: Execution

Attribute Description
Asynchronous When enabled, the activity starts as an asynchronous job.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Attributes: Multi instance

Attribute Description
Multi instance type Determines if multiple instances of this activity are created:
  • None - default, only one instance is created.
  • MI parallel - activities are created in parallel. This is good practice for user tasks.
  • MI sequential - activities are created sequentially. This is good practice for service tasks.
Collection

Expression to set the loop collection for a multi-instance task. The number of instances is determined by the elements of a collection. For each element in the collection, a new instance is created.

A common use case is to loop over lists created by multi-element subforms. For example, if you bound a subform to an array of invoice positions using the expression invoicePositions, you can set the loop collection to ${invoicePositions} to loop over each position.

Element variable

The name of the variable where the currently processed item from the loop collection is stored, for example invoicePosition.

You can access the element in the process through an expression, for example ${invoicePosition}. To access the element in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("invoicePosition",invoicePosition)}. The element is then available in the form through the task.invoicePosition variable.

Element index variable

The name of the variable where the index of the currently processed item from the loop collection is stored, for example, itemIndex.

The index starts with 0 and increases with every element that is being looped through. You can access the index in the process through an expression, for example ${itemIndex} in the process. To access the index in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal(&quot;itemIndex&quot;, itemIndex)}. The index is then available in the form through the task.itemIndex variable.

Cardinality A number or an expression that evaluates to an integer, which controls the number of activity instances that are created. If the attribute Collection is empty, a new instance is created for every element of the list. With cardinality, you can overwrite this and only create a given number of instances. You can also use this attribute if you want to loop over an activity a given number of times without specifying a collection.
Completion condition A Boolean expression that when true cancels the remaining activity instances, stopping the loop, and produces a token.

Attributes: Visual

Attribute Description
Font color The font color of the element in the diagram.
Font size The font size of the element in the diagram.
Font style The font style of the element in the diagram.
Font weight The font weight of the element in the diagram.
Background color The background color of the element in the diagram.
Border color The border color of the element in the diagram.

Define a script task

To save the user comment, use a script task that calls the addComment() method of the CommentApi Java class. The method has an AddCommentRequest parameter. The AddCommentRequest class has a builder() method available.

  • Class: CommentApi
    • Main method: AddComment()
      • Parameter and builder method: AddCommentRequest.builder()
Builder parameters Mandatory Type Description
baseResourceId() Yes UUID Sets the ID of the resource which the new comment is for.
baseResourceType() Yes ResourceType Sets the type of the resource which the new comment is for. For instance Asset, Community, Relation.
content() Yes string Sets the HTML content of the comment.
build() Yes   Builds the object.
baseResource() No ResourceReference Sets the resource which the new comment is for.
parentId() No UUID Sets the id of the parent comment.
import com.collibra.dgc.core.api.dto.instance.comment.AddCommentRequest.Builder

commentApi.addComment(AddCommentRequest.builder()
	.baseResourceId(item.getId())
	.baseResourceType(item.getType())
	.content(Comment.toString())
	.build()
);

Because each script task is independent, include import statements for all the packages you are using in a script for each script task. Avoid using generic imports to reduce execution time.

In the context of workflow script tasks, the <Resource>Api interfaces (such as AssetApi, CommunityTypeApi, FileApi, and so on) are already instantiated and accessible via <resource>Api variables (such as assetApi, communityTypeApi, fileApi, and so on).

  1. From the Tasks section of the Palette, drag a Script task to the Chief steward lane, after the user task.
  2. Connect the user task to the script task with a SequenceFlow connection.
    Make sure that the start and end event stay connected through the user and script tasks.

    You can also create elements starting from an other element by hovering your pointer over it and clicking the create element button:

  3. In the Properties section, select the General tab.
  4. In the Name field, enter a name for the task, for example: Store comment.
  5. Select the Main config tab.
  6. From the Script language drop-down menu, select groovy.
  7. Paste the code from the example in the Script form.

The following image shows the current state of the workflow:

At this point, you can try to deploy your workflow in Collibra. Save your work and see Deploy a workflow.

About the item variable

The global variable item used in the code refers to the resource the workflow applies to. For more information, see the Workflows beans API documentation of your Collibra Data Intelligence Platform available at https://<your_dgc_environment_url>/docs/index.html, or the Beans section of the product documentation.

Whenever you have to add a comment to an asset, you can copy the code in the example.

Define a script task that sends an email notification

In the example workflow, the person proposing the new term (the start user) is notified and the status of the term is set to Rejected if the voting result is negative. To accomplish this:

  1. Add a script task to the Start user lane.
  2. Provide a Name for the task, for example Notify requester.
  3. Add the following groovy code to the task:
  4. def usersIds = users.getUserIds("role(Requester)");
    if (usersIds.isEmpty()){
        loggerApi.warn("No users to send a mail to, no mail will be sent");
    } else {
        mail.sendMails(usersIds, "in-progress", null, execution);
    }

Names and unique names in workflows

In Collibra Data Governance Center version 5.4 or newer, including Collibra Data Intelligence Platform, there is a significant API change impacting asset names. Starting with this version, assets have names and unique full names, respectively referred to as displayName and name in the API . In older versions, you only had name to refer to the asset name.

Action via API Behavior
Add asset

When you add an asset via an API call, you must enter a name and you can specify a different displayName:

  • name: This is the mandatory unique full name of the asset and is represented by Full name in the UI.
  • displayName: This value is optional and corresponds to the asset Name in the UI.

If you don't specify a displayName ,it automatically defaults to the value of name.

Update asset

You can use name to update the asset Full name and displayName, to update the asset Name.

During an update operation, the displayName does not change if you only update the name.

Example

The following example shows how you can change the asset name in Collibra Data Governance Center 5.3 or older and 5.4 or newer, both using the Java API v2.

  • API v1 is deprecated.
  • After an upgrade to 5.4 or newer, verify that workflows that affect asset names use the new API.

5.3 or older

5.4 or newer

assetApi.changeAsset(builders.get("ChangeAssetRequest")
	.id(UUID assetUUID)
	.name(String newAssetName)
	.build()
)
assetApi.changeAsset(builders.get("ChangeAssetRequest")
	.id(UUID assetUUID)
	.name(String newAssetFullName)
	.displayName(String newAssetDisplayName)
	.build()
)

Upgrading your scripts for Collibra 2024.02 compatibility

We are upgrading the Collibra workflow engine to use Jakarta EE, starting with Collibra version 2024.02. The Jakarta EE APIs (jakarta.*) have a different package structure than Javax EE APIs (javax.*), causing workflow scripts that use javax.* functions to fail after the upgrade.

Recommendations

To keep all of your workflows running smoothly after the upgrade:

  • You must update your workflows that use Javax EE javax.* functions.
  • You must restart running workflows that are impacted by this change if there are still tasks to be executed that use Javax EE javax.* functions.

Do not deploy updated workflows with Jakarta EE jakarta.* functions before the 2024.02 release.

Custom workflows

You must update your scripts if you have workflow script tasks or scripts stored in the groovy-lib directory that use Javax EE javax.* functions by replacing javax.* with jakarta.*.

The javax packages that are part of the Java SDK are not impacted by this change and they require no update. Some commonly used javax Java SDK packages are:

  • javax.net
  • javax.crypto
  • javax.script
  • javax.xml.parsers
  • javax.swing
  • javax.management
  • javax.imageio
  • javax.xml.validation

To help with this transition, we have identified a number of commonly used classes that you don't need to change starting with Collibra version 2024.02 and that are supported until Collibra version 2024.05:

  • javax.ws.rs.core.UriBuilder
  • javax.xml.bind.DatatypeConverter.printBase64Binary
  • javax.mail.*
  • javax.activation.*
  • javax.servlet.http.Cookie

Running workflow instances

When you deploy a new version of a workflow and there is a running instance of the same workflow, the running workflow continues to use the old version until it completes. If there is a Javax EE javax.* function that still needs to be executed and that is not compatible with Jakarta EE, the workflow fails.

After you have identified and deployed the workflows that require an update, check if any of the workflows that are currently running need to be restarted:

  1. View the running workflow instances.
  2. Delete the workflow instance if required.
  3. Restart the updated workflow.

Additional resources

Upgrading your scripts for Groovy 3 compatibility

Groovy 3 introduces a list of breaking changes that can affect Collibra Groovy workflow scripts. You can consult the full list in the Groovy 3 release notes. There are two breaking changes that can most likely affect Collibra workflows:

  • If a Groovy switch statement has a default branch, it must be the last branch.
  • Groovy is now more compliant with the JavaBeans specification for one edge case scenario involving any field having a name starting with an uppercase letter (GROOVY-9618).
  • Enums cannot have a non-private constructor.
  • To use an interface “Function” as a parameter it must be typed, for example: _methodHandler(Function<Integer, Integer> requiredFunction).

You can upgrade the workflows groovy script code to be compatible with these changes before we upgrade Collibra to the version containing Groovy 3.

Change Groovy switch statement

If a Groovy 3 switch statement has a default branch, it must be the last branch. This means that you can no longer place the default branch in any other position except last in the list of branches.

The following does not compile under Groovy 3:

switch(yourVariable) {
  default:
    // default action
    break
  case 'a':
    // case a action
    break  
}

To correct the above code, place the default branch last:

switch(yourVariable) {
  case 'a':
    // case a action
    break
  default:
    // default action
    break  
}

Your code will behave exactly the same as all the branches have a break statement, so each branch is isolated and doesn’t affect other branches.

Switch fall-through

As switch fall-through occurs when branches don't have a break statement, making it possible to execute multiple branches, not only the one that matches.

Example of switch fall-through:

def result = ""
switch(yourVariable) {
  default:
    result += "default "
    // as there is no break statement, "case a" will be executed next
  case 'a':
    result += "a "
    // as there is no break statement, "case b" will be executed next
  case 'b':
    result += "b"
}

When yourVariable has the value 'a', the result variable will equal "a b". When yourVariable has the value 'b', the result variable will equal "b". In all other cases, the result variable will be equal “default a b”.

To make the code compile under Groovy 3, place the default branch last. However, to obtain the same results as the fall-through switch, you must also adjust the rest of the code:

Groovy 3 switch fall-through equivalent:

def result = ""
switch(yourVariable) {
  case 'a':
    result = "a b"
    break
  case 'b':
    result = "b"
    break
  default:
    result = "default a b"
    break
}

Adjusting for Groovy JavaBeans specification compatibility changes

Groovy 3 is more compliant with the JavaBeans specification for one edge case scenario involving any field having a name starting with an uppercase letter. This change has an impact on the handling of properties.

Groovy properties

The definition of properties according to the Groovy public documentation is:

A property is an externally visible feature of a class. Rather than just using a public field to represent such features (which provides a more limited abstraction and would restrict refactoring possibilities), the typical approach in Java is to follow the conventions outlined in the JavaBeans Specification, i.e. represent the property using a combination of a private backing field and getters/setters. Groovy follows these same conventions but provides a simpler way to define the property.

The code sample below will generate the following:

  • A backing private String name field, a getName and a setName method.

  • A backing private int age field, a getAge and a setAge method.

class Person {
    String name                             
    int age                                 
}

By convention, Groovy also recognizes properties even if there is no backing field, provided there are getters or setters that follow the Java Beans specification.

class PseudoProperties {
    //1. a pseudo property "name"
    void setName(String name) {}
    String getName() {}

    //2. a pseudo read-only property "age"
    int getAge() { 42 }

    //3. a pseudo write-only property "groovy"
    void setGroovy(boolean groovy) {  }
}
def p = new PseudoProperties()
p.name = 'Foo' // uses (1)                     
assert p.age == 42 // uses (2)                 
p.groovy = true // uses (3)

Groovy 3 breaking change

In Groovy 3 the handling of properties that start with an uppercase letter has changed to be more compliant with the JavaBeans specification.

The way how properties are mapped to the accessor method has changed. In groovy 2 it was possible to access the field instead of the accessor methods in some scenarios as shown below:

Groovy 2

class A {
  private String X = 'fieldX'
  private String Prop = 'fieldProp'
  String getProp() { 'Prop' }
  String getX() { 'X' }
}
new A().with {
  assert prop == 'Prop' // uses getProp() accessor
  assert Prop == 'fieldProp' // uses field directly
  assert x == 'X' // uses getX() accessor
  assert X == 'fieldX' // uses field direclty
}

Groovy 3

class A {
  private String X = 'fieldX'
  private String Prop = 'fieldProp'
  String getProp() { 'Prop' }
  String getX() { 'X' }
}
new A().with {
  assert prop == 'Prop' // use getProp() accessor
  assert Prop == 'Prop' // use getProp() accessor
  assert x == 'X' // uses getX() accessor
  assert X == 'X' // uses getX() accessor
}

A similar situation occurs when you use static properties:

Groovy 2

class A {
  private static String X = 'fieldX'
  private static String Prop = 'fieldProp'
  static String getProp() { 'Prop' }
  static String getX() { 'X' }
}
A.with {
  assert prop == 'Prop' // uses static getProp() accessor
  assert Prop == 'fieldProp' // uses field directly
  assert x == 'X' // uses static getX() accessor
  assert X == 'fieldX' // uses field directly
}

Groovy 3

class A {
  private static String X = 'fieldX'
  private static String Prop = 'fieldProp'
  static String getProp() { 'Prop' }
  static String getX() { 'X' }
}
A.with {
  assert prop == 'Prop' // uses static getProp() accessor
  assert Prop == 'Prop' // uses static getProp() accessoor
  assert x == 'X' // uses static getX() accessor
  assert X == 'X' // uses static getX() accessor
}

This breaking change doesn’t affect classes where accessor methods are not overwritten.

Recommendation

To make existing workflow scripts compatible with Groovy 3, we recommend using lowercase property names, except in when the property name is all uppercase:

class A {
  private String X = 'fieldX'
  private String XML = 'fieldXML'
  
  String getX() { 'X' }
  String getXML() { 'XML' }
}
new A().with {
  assert x == 'X' // instead of using uppercase X property 
  assert XML == 'XML' // in this case using XML property is the only way
}

Java API v1 to v2 mapping

This section lists the changes that impact Java API v1 methods.

Interface v1 Method v1 Change Interface v2 Method v2
ActivityStreamComponent getActivities Convert ActivityStreamApi getActivities
ApplicationComponent executeInTransaction Drop    
ApplicationComponent getBaseURL Convert ApplicationApi getInfo
ApplicationComponent getBuildNumber Convert ApplicationApi getInfo
ApplicationComponent getDatabaseVersion Drop    
ApplicationComponent getFreeMemory Drop    
ApplicationComponent getJavaHome Drop    
ApplicationComponent getJavaInfo Drop    
ApplicationComponent getMajorMinorVersion Convert ApplicationApi getInfo
ApplicationComponent getMaxMemory Drop    
ApplicationComponent getOSInfo Drop    
ApplicationComponent getStylingOverride Drop    
ApplicationComponent getTotalMemory Drop    
ApplicationComponent getUptime Drop    
ApplicationComponent getUsedMemory Drop    
ApplicationComponent getUserHome Drop    
ApplicationComponent getVersion Convert ApplicationApi getInfo
ApplicationComponent hasDatabaseConnection Drop    
ApplicationComponent isBootstrapped Drop    
ApplicationComponent isCloud Drop    
ApplicationComponent isDatabaseUpToDate Drop    
ApplicationComponent isReportBugEnabled Drop    
ApplicationComponent reportBug Drop    
ArticulationComponent recalculateAllScores Drop    
AttachmentComponent addAttachmentToResource Convert AttachmentApi addAttachment
AttachmentComponent addAttachmentToResourceFromUrl Convert AttachmentApi addAttachment
AttachmentComponent changeAttachment Convert AttachmentApi removeAttachment + addAttachment
AttachmentComponent findAttachmentByFile Convert AttachmentApi findAttachments
AttachmentComponent findAttachmentsByResource Convert AttachmentApi findAttachments
AttachmentComponent findAttachmentsByUser Convert AttachmentApi findAttachments
AttachmentComponent findFileName Convert FileApi getFileInfo
AttachmentComponent getAttachment Convert AttachmentApi getAttachment
AttachmentComponent getAttachmentContent Convert AttachmentApi getAttachmentContent
AttachmentComponent removeAttachment Convert AttachmentApi removeAttachment
AttributeComponent addAttribute Convert AttributeApi addAttribute
AttributeComponent addAttributesAsync Convert ImporterApi  
AttributeComponent addBooleanAttribute Convert AttributeApi addAttribute
AttributeComponent addDateAttribute Convert AttributeApi addAttribute
AttributeComponent addDateTimeAttribute Convert AttributeApi addAttribute
AttributeComponent addDefinition Convert AttributeApi addAttribute
AttributeComponent addDescription Convert AttributeApi addAttribute
AttributeComponent addExample Convert AttributeApi addAttribute
AttributeComponent addMultiValueListAttribute Convert AttributeApi addAttribute
AttributeComponent addNote Convert AttributeApi addAttribute
AttributeComponent addNumericAttribute Convert AttributeApi addAttribute
AttributeComponent addScriptAttribute Convert AttributeApi addAttribute
AttributeComponent addSingleValueListAttribute Convert AttributeApi addAttribute
AttributeComponent addStringAttribute Convert AttributeApi addAttribute
AttributeComponent changeAttribute Convert AttributeApi changeAttribute
AttributeComponent changeAttributesAsync Convert ImporterApi  
AttributeComponent changeBooleanAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeDateAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeDateTimeAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeMultiValueListAttributeValues Convert AttributeApi changeAttribute
AttributeComponent changeNumericAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeScriptAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeSingleValueListAttributeValue Convert AttributeApi changeAttribute
AttributeComponent changeStringAttributeLongExpression Convert AttributeApi changeAttribute
AttributeComponent getAttribute Convert AttributeApi getAttribute
AttributeComponent getAttributeCount Drop    
AttributeComponent getAttributesOfTypeForRepresentation Convert AttributeApi findAttributes
AttributeComponent getAttributesOfTypesForRepresentation Convert AttributeApi findAttributes
AttributeComponent getAttributesOfTypesForRepresentationInCollection Convert AttributeApi findAttributes
AttributeComponent getBooleanAttribute Convert AttributeApi getAttribute
AttributeComponent getDateAttribute Convert AttributeApi getAttribute
AttributeComponent getDateTimeAttribute Convert AttributeApi getAttribute
AttributeComponent getDefinitionsForRepresentation Convert AttributeApi findAttributes
AttributeComponent getDescriptionsForRepresentation Convert AttributeApi findAttributes
AttributeComponent getExamplesForRepresentation Convert AttributeApi findAttributes
AttributeComponent getHyperlinkedLongExpression Drop    
AttributeComponent getMultiValueListAttribute Convert AttributeApi getAttribute
AttributeComponent getNotesForRepresentation Convert AttributeApi findAttributes
AttributeComponent getNumericAttribute Convert AttributeApi getAttribute
AttributeComponent getScriptAttribute Convert AttributeApi getAttribute
AttributeComponent getSingleValueListAttribute Convert AttributeApi getAttribute
AttributeComponent getStringAttribute Convert AttributeApi getAttribute
AttributeComponent removeAttribute Convert AttributeApi removeAttribute
AttributeComponent validateConstraint Convert AttributeTypeApi getAttributeType
AttributeComponent validateMultiValueListConstraint Convert AttributeTypeApi getAttributeType
AttributeComponent validateSingleValueListConstraint Convert AttributeTypeApi getAttributeType
AttributeTypeComponent addBooleanAttributeType Convert AttributeTypeApi addAttributeType
AttributeTypeComponent addBooleanAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addDateAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addDateAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addDateTimeAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addDateTimeAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addNumericAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addNumericAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addScriptAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addStringAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addStringAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addValueListAttributeType Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent addValueListAttributeTypeWithCustomUUID Convert AttributeTypeApi addAttributeTypes
AttributeTypeComponent change Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeAllowedValues Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeDescription Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeIsInteger Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeKeepHistory Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeScriptLanguage Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent changeSignifier Convert AttributeTypeApi changeAttributeTypes
AttributeTypeComponent createAttributeTypeFilter Drop    
AttributeTypeComponent findAllKeepHistoryAttributeTypesWithSignifier Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent findAttributeTypesContainingSignifier Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent getAttributeTypes Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent getAttributeType Convert AttributeTypeApi getAttributeType
AttributeTypeComponent getAttributeTypeBySignifier Convert AttributeTypeApi getAttributeTypeByName
AttributeTypeComponent getAttributeTypeDescription Convert AttributeType getDescription
AttributeTypeComponent getAttributeTypeKind Convert AttributeType To be infered from returned object
AttributeTypeComponent getAllowedValues Convert MultiValueListAttributeType getAllowedValues
AttributeTypeComponent getDefinitionAttributeType Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent getDescriptionAttributeType Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent getExampleAttributeType Convert AttributeTypeApi findAttributeTypes
AttributeTypeComponent getIsInteger Convert AttributeTypeApi getAttributeType
AttributeTypeComponent getKeepHistory Convert AttributeTypeApi getAttributeType
AttributeTypeComponent getNoteAttributeType Convert AttributeTypeApi getAttributeType
AttributeTypeComponent getScriptLanguage Convert AttributeTypeApi getAttributeType
AttributeTypeComponent getLegacyAttributeTypeKind Drop    
AttributeTypeComponent removeAttributeType Convert AttributeTypeApi removeAttributeType
BootstrapComponent resetAuditTables Drop    
CommentComponent addComment Convert CommentApi addComment
CommentComponent addReply Convert CommentApi addComment
CommentComponent changeComment Convert CommentApi changeComment
CommentComponent getComment Convert CommentApi getComment
CommentComponent getComments Convert CommentApi findComments
CommentComponent getCommentsByUser Convert CommentApi findComments
CommentComponent getReplies Convert CommentApi findComments
CommentComponent removeComment Convert CommentApi removeComment
CommunityComponent addCommunity Convert CommunityApi addCommunity
CommunityComponent addSubCommunity Convert CommunityApi addCommunities
CommunityComponent change Convert CommunityApi changeCommunity
CommunityComponent changeDescription Convert CommunityApi changeCommunities
CommunityComponent changeLanguage Drop    
CommunityComponent changeName Convert CommunityApi changeCommunity
CommunityComponent changeParentCommunity Convert CommunityApi changeCommunity
CommunityComponent changeUri Drop    
CommunityComponent exists Convert CommunityApi exists
CommunityComponent findCommunitiesContainingName Convert CommunityApi findCommunities
CommunityComponent getCommunities Convert CommunityApi findCommunities
CommunityComponent getCommunityByName Convert CommunityApi findCommunities
CommunityComponent getCommunity Convert CommunityApi getCommunity
CommunityComponent getCommunityByUri Drop    
CommunityComponent getCommunityCount Convert OutputModuleApi  
CommunityComponent removeCommunity Convert CommunityApi removeCommunity
CommunityComponent removeCommunityJob Convert CommunityApi removeCommunityInJob
CommunityComponent removeAsync Convert CommunityApi removeCommunitiesInJob
CommunityComponent removeParentCommunity Convert CommunityApi makeRootCommunity
CompareComponent compareCurrentWithSnapshot Drop    
CompareComponent compareSnapshotWithCurrent Drop    
CompareComponent compareSnapshots Drop    
CompareComponent compareViewConfigs Drop    
CompareComponent compareVocabularyTermsBySignifier Drop    
ComplexRelationComponent addComplexRelation Convert ComplexRelationApi addComplexRelation
ComplexRelationComponent changeComplexRelation Convert ComplexRelationApi changeComplexRelation
ComplexRelationComponent createComplexRelationFilter Convert FindComplexRelationsRequest builder
ComplexRelationComponent getComplexRelation Convert ComplexRelationApi getComplexRelation
ComplexRelationComponent getComplexRelationCount Convert OutputModuleApi  
ComplexRelationComponent getComplexRelations Convert ComplexRelationApi findComplexRelation (assetId, ComplexRelationtypeId)
ComplexRelationComponent getInvolvedComplexRelationTypes Convert ComplexRelationApi findComplexRelations
ComplexRelationComponent removeComplexRelation Convert ComplexRelationApi removeComplexRelation
ComplexRelationTypeComponent addComplexRelationType Convert ComplexRelationTypeApi addComplexRelationType
ComplexRelationTypeComponent changeComplexRelationType Convert ComplexRelationTypeApi changeComplexRelationType
ComplexRelationTypeComponent exportCSV Convert ComplexRelationApi exportCSVInJob
ComplexRelationTypeComponent exportCSVAsString Convert ComplexRelationApi exportCSV
ComplexRelationTypeComponent exportCSVWithoutJob Convert ComplexRelationApi exportCSVToFile
ComplexRelationTypeComponent exportExcel Convert ComplexRelationApi exportExcelInJob
ComplexRelationTypeComponent exportExcelWithoutJob Convert ComplexRelationApi exportExcelToFile
ComplexRelationTypeComponent getAllComplexRelationTypes Convert ComplexRelationTypeApi findComplexRelationTypes
ComplexRelationTypeComponent getComplexRelationType Convert ComplexRelationTypeApi getComplexRelationType
ComplexRelationTypeComponent remove Convert ComplexRelationTypeApi removeComplexRelationType
ConceptTypeComponent addConceptType Convert AssetTypeApi addAssetType
ConceptTypeComponent addConceptTypeWithCustomUUID Convert AssetTypeApi addAssetType
ConceptTypeComponent findConceptTypesContainingSignifier Convert AssetTypeApi findAssetTypes
ConceptTypeComponent getConceptTypes Convert AssetTypeApi findAssetTypes
ConceptTypeComponent findAllSpecializedAssetTypes Convert AssetTypeApi findSubTypes
ConceptTypeComponent findSpecializedAssetTypes Convert AssetTypeApi findAssetTypes
ConceptTypeComponent getBusinessTermType Convert AssetTypeApi getAssetType
ConceptTypeComponent getCodeTermType Convert AssetTypeApi getAssetType
ConceptTypeComponent getConceptType Convert AssetTypeApi getAssetType
ConceptTypeComponent getConceptTypeHierarchy Convert AssetTypeApi findSubTypes
ConfigurationComponent clear Drop    
ConfigurationComponent getBoolean Drop    
ConfigurationComponent getInteger Drop    
ConfigurationComponent getProperty Drop    
ConfigurationComponent getString Drop    
ConfigurationComponent setProperty Drop    
DGCConfigurationComponent get Drop    
FileComponent activateFileUploadExceeding Drop    
FileComponent addFile Convert FileApi addFile
FileComponent deactivateFileUploadExceeding Drop    
FileComponent getFileAsStream Convert FileApi getFileAsStream
FileComponent getFileContentType Convert FileApi getFileInfo
FileComponent getFileName Convert FileApi getFileInfo
FileComponent getFileSize Convert FileApi getFileInfo
FileComponent uploadMultipartContent Drop    
ImpactComponent createRelationTrace Drop    
ImpactComponent getAssetRelationImpact Drop    
ImpactComponent getAssetRelationImpactForTargetTerm Drop    
ImpactComponent getAssetRelationImpactForTargetType Drop    
ImpactComponent getAssetUsageRelationImpact Drop    
ImpactComponent getAttributeReferenceImpact Drop    
ImpactComponent getCommentReferenceImpact Drop    
ImpactComponent getUserUsageRelationImpact Drop    
InputViewComponent getColumnNames Drop    
InputViewComponent importCSV Convert ImporterApi importCSVInJob
InputViewComponent importExcel Convert ImporterApi importExcelInJob
InputViewComponent importFile Convert ImporterApi importCSVInJob
InputViewComponent importTableFile Convert ImporterApi importCSVInJob
InputViewComponent simulateImportCSV Convert ImporterApi importCSVInJob
InputViewComponent simulateImportExcel Convert ImporterApi importExcelInJob
InputViewComponent simulateImportFile Convert ImporterApi importCSVInJob
InputViewComponent simulateImportTableFile Convert ImporterApi importCSVInJob
IOComponent checkTableViewConfig Convert OutputModuleApi To use the validation feature set validationEnabled parameter to true when passing tableViewConfig to OutputModuleApi export... methods.
IOComponent checkViewConfig Convert OutputModuleApi To use the validation feature set validationEnabled parameter to true when passing tableViewConfig to OutputModuleApi export... methods.
IssueComponent addIssue Convert IssueApi addIssue
IssueComponent getIssues Convert IssueApi findIssues
IssueComponent getOpenIssuesCount Drop   Use the reporting functionality instead
JobComponent cancelJob Convert JobApi cancelJob
JobComponent createJobFilter Drop    
JobComponent getActiveJobs Convert JobApi findJobs
JobComponent getJobs Convert JobApi findJobs
JobComponent getRunningJobs Convert JobApi findJobs
JobComponent getWaitingJobs Convert JobApi findJobs
JobComponent getJob Convert JobApi getJob
JobComponent setVisibility Drop    
JobComponent setVisibilityForFinishedJobs Drop    
JobComponent updateNotification Drop    
LoggerComponent debug Convert LoggerApi debug
LoggerComponent error Convert LoggerApi error
LoggerComponent info Convert LoggerApi info
LoggerComponent warn Convert LoggerApi warn
MappingComponent addMapping Convert MappingApi addMapping
MappingComponent cleanMappings Convert MappingApi removeMappingsByExternalSystemInJob
MappingComponent findMapping Convert MappingApi removeMappingByMappedResource
MappingComponent findMappingByExtEntity Convert MappingApi getMappingByExternalEntity
MappingComponent findMappingByResource Convert MappingApi removeMappingByMappedResource
MappingComponent getMapping Convert MappingApi getMapping
MappingComponent getMappings Convert MappingApi findMappings
MappingComponent removeMapping Convert MappingApi removeMapping
MappingComponent removeMappingByExtEntity Convert MappingApi removeMappingByExternalEntity
MappingComponent removeMappingByResource Convert MappingApi removeMappingByMappedResource
MappingComponent updateMapping Convert MappingApi changeMapping
MappingComponent updateMappingByExtEntity Convert MappingApi changeMappingByExternalEntity
MappingComponent updateMappingByResource Convert MappingApi changeMappingByMappedResource
MetadataComponent getSPMetadataAsString Convert SingleSignOnApi getSPMetadataAsString
NavigationStatisticsComponent findMostViewedTerms Convert NavigationStatisticsApi findMostViewedAssets
NavigationStatisticsComponent findMostViewedTermsInLastPeriod Convert NavigationStatisticsApi findMostViewedAssets
NavigationStatisticsComponent findRecentlyViewedTerms Convert NavigationStatisticsApi findRecentlyViewedAssets
NounExtractorComponent extractCandidateTermFromAttachment Drop    
NounExtractorComponent extractCandidateTermFromFile Drop    
NounExtractorComponent extractCandidateTermFromRepresentations Drop    
NounExtractorComponent extractCandidateTermFromText Drop    
NounExtractorComponent extractCandidateTermFromVocabulary Drop    
NounExtractorComponent extractNounsFromAttachment Drop    
NounExtractorComponent extractNounsFromFile Drop    
NounExtractorComponent extractNounsFromRepresentations Drop    
NounExtractorComponent extractNounsFromText Drop    
NounExtractorComponent extractNounsFromVocabulary Drop    
OutputViewComponent buildOutputView Convert OutputModuleApi exportJSON, exportXML
OutputViewComponent buildTableOutputView Convert OutputModuleApi exportJSON, exportCSV, exportJSONToFile, exportCSVToFile, exportExcelToFile
OutputViewComponent exportCSV Convert OutputModuleApi exportCSVInJob
OutputViewComponent exportCSVAsString Convert OutputModuleApi exportCSV
OutputViewComponent exportCSVWithoutJob Convert OutputModuleApi exportCSVToFile
OutputViewComponent exportExcel Convert OutputModuleApi exportExcelInJob
OutputViewComponent exportExcelWithoutJob Convert OutputModuleApi exportExcelToFile
OutputViewComponent exportOutputView Convert OutputModuleApi exportJSONInJob, exportXMLInJob
OutputViewComponent exportTableOutputView Convert OutputModuleApi exportJSONInJob, exportCSVInJob, exportExcelInJob
OutputViewComponent getJSONDataTable Convert OutputModuleApi exportJSON
OutputViewComponent getModelOutputView Convert OutputModuleApi exportJSON
OutputViewComponent getRelationTraceHierarchyJSONDataTable Convert OutputModuleApi exportJSON
OutputViewComponent getSingleRelationHierarchyJSONDataTable Convert OutputModuleApi exportJSON
OutputViewComponent getTableOutputView Convert OutputModuleApi exportJSON, exportCSV
RelationComponent addRelation Convert RelationApi addRelation
RelationComponent addRelationsAsync Convert ImporterApi  
RelationComponent addRelationsAsyncWithTarget Convert ImporterApi  
RelationComponent change Convert RelationApi changeRelation
RelationComponent changeEndDate Convert RelationApi changeRelation
RelationComponent changeSourceTerm Convert RelationApi changeRelation
RelationComponent changeStartDate Convert RelationApi changeRelation
RelationComponent changeTargetTerm Convert RelationApi changeRelation
RelationComponent findRelationsBySource Convert RelationApi findRelations
RelationComponent findRelationsBySourceAndTarget Convert RelationApi findRelations
RelationComponent findRelationsBySourceAndTargetAndType Convert RelationApi findRelations
RelationComponent findRelationsBySourceAndType Convert RelationApi findRelations
RelationComponent findRelationsByTarget Convert RelationApi findRelations
RelationComponent findRelationsByTargetAndType Convert RelationApi findRelations
RelationComponent findRelationsByType Convert RelationApi findRelations
RelationComponent findRelationsUsingOnlyNonNullParameters Convert RelationApi findRelations
RelationComponent getRelation Convert RelationApi getRelation
RelationComponent getRelationCount Convert OutputModuleApi  
RelationComponent hasRelationsBySourceAndType Convert RelationApi  
RelationComponent hasRelationsByTargetAndType Convert RelationApi  
RelationComponent removeRelation Convert RelationApi removeRelation
RelationComponent replaceMultipleAsync Convert ImporterApi  
RelationTypeComponent addRelationType Convert RelationTypeApi addRelationType
RelationTypeComponent addRelationTypeWithCustomUUID Convert RelationTypeApi addRelationType
RelationTypeComponent changeBinaryFactTypeWithExistingTerms Convert RelationTypeApi changeRelationType
RelationTypeComponent findPossibleRelationTypesForSourceTerm Convert RelationTypeApi AssignmentApi#getAssignmentForAsset
RelationTypeComponent findPossibleRelationTypesForSourceType Convert RelationTypeApi AssignmentApi.getAssignmentsForAssetType
RelationTypeComponent findPossibleRelationTypesForTargetTerm Convert RelationTypeApi AssignmentApi#getAssignmentForAsset
RelationTypeComponent findPossibleRelationTypesForTargetType Convert RelationTypeApi AssignmentApi.getAssignmentsForAssetType
RelationTypeComponent findRelationTypesContainingRole Convert RelationTypeApi findRelationTypes
RelationTypeComponent findRelationTypesContainingRoleAndHeadOrTail Convert RelationTypeApi findRelationTypes
RelationTypeComponent findRelationTypesContainingRoleOrSignifier Convert RelationTypeApi findRelationTypes
RelationTypeComponent getAllRelationTypes Convert RelationTypeApi findRelationTypes
RelationTypeComponent getRelationType Convert RelationTypeApi getRelationType
RelationTypeComponent getRelationTypesContainingHeadTerm Convert RelationTypeApi findRelationTypes
RelationTypeComponent getRelationTypesContainingSourceTerm Convert RelationTypeApi findRelationTypes
RelationTypeComponent getRelationTypesContainingTailTerm Convert RelationTypeApi findRelationTypes
RelationTypeComponent getRelationTypesContainingTerm Convert RelationTypeApi findRelationTypes
RelationTypeComponent removeRelationType Convert RelationTypeApi removeRelationType
RepresentationComponent changeConceptType Convert AssetApi changeAsset
RepresentationComponent changeConceptTypesAsync Convert AssetApi changeAssets
RepresentationComponent changeExcludedFromHyperlinking Convert AssetApi changeAsset
RepresentationComponent changeStatus Convert AssetApi changeAsset
RepresentationComponent changeStatusAsync Convert AssetApi changeAssets
RepresentationComponent changeVocabulariesAsync Convert AssetApi changeAssets
RepresentationComponent changeVocabulary Convert AssetApi changeAsset
RepresentationComponent exists Convert AssetApi exists
RepresentationComponent findPossibleAttributeOrRelationTypes Convert AssignmentApi getAssignmentForAsset
RepresentationComponent findPossibleAttributeTypes Convert AssignmentApi getAssignmentForAsset
RepresentationComponent findPossibleStatuses Convert AssignmentApi getAssignmentForAsset
RepresentationComponent getRepresentation Convert AssetApi getAsset
RepresentationComponent remove Convert AssetApi removeAsset
RightsComponent addMember Convert ResponsibilityApi addResponsibility
RightsComponent addMembersAsync Convert ResponsibilityApi addResponsibility
RightsComponent addRole Convert RoleApi addRole
RightsComponent addRoleWithCustomUUID Convert RoleApi addRole
RightsComponent findRolesContainingSignifier Convert RoleApi findRoles
RightsComponent getCurrentUserRights Convert ResponsibilityApi findResponsibilities (use UserApi.getCurrentUser())
RightsComponent getGlobalRoles Convert ResponsibilityApi findResponsibilities
RightsComponent getResourceRoles Convert RoleApi findRoles
RightsComponent changeMemberRole Convert ResponsibilityApi removeResponsibility, addResponsibility
RightsComponent changeMembers Convert ResponsibilityApi removeResponsibility, addResponsibility
RightsComponent changeMembersAsync Convert ResponsibilityApi removeResponsibility, addResponsibility
RightsComponent getMember Convert ResponsibilityApi findResponsibilities
RightsComponent getMemberCount Drop    
RightsComponent getAllMemberGroupsByResourceAndRole Convert ResponsibilityApi findResponsibilities & userGroupApi
RightsComponent getAllMemberUsersByResourceAndRole Convert ResponsibilityApi findResponsibilities & userApi combo
RightsComponent getAllMembersByResource Convert ResponsibilityApi findResponsibilities
RightsComponent getAllMembersByResourceAndRole Convert ResponsibilityApi findResponsibilities
RightsComponent getInheritedMembers Convert ResponsibilityApi findResponsibilities
RightsComponent getInheritedMembersByResourceAndRole Convert ResponsibilityApi findResponsibilities
RightsComponent getMemberRoles Convert ResponsibilityApi findResponsibilities
RightsComponent getMembers Convert ResponsibilityApi findResponsibilities
RightsComponent getMembersByOwner Convert ResponsibilityApi findResponsibilities
RightsComponent getMembersByOwnerAndRole Convert ResponsibilityApi findResponsibilities
RightsComponent getMembersByResourceAndRole Convert ResponsibilityApi findResponsibilities
RightsComponent getMembersByRole Convert ResponsibilityApi findResponsibilities
RightsComponent getOwners Convert ResponsibilityApi findResponsibilities
RightsComponent getRight Convert   We have an enum listing all rights (com.collibra.dgc.core.api.model.security.Permission)
RightsComponent getRightCategories Drop    
RightsComponent getRightCategory Drop    
RightsComponent getRights Convert   We have an enum listing all rights (com.collibra.dgc.core.api.model.security.Permission)
RightsComponent getRoleByName Convert RoleApi findRoles
RightsComponent getRoles Convert RoleApi findRoles
RightsComponent getRole Convert RoleApi getRole
RightsComponent grant Convert RoleApi addRole
RightsComponent grantCategory Drop    
RightsComponent setPermissions Convert RoleApi changeRole
RightsComponent isAuthorized Convert RoleApi isPermitted
RightsComponent isCategoryAuthorized Drop    
RightsComponent isComplete Drop    
RightsComponent isPermitted Drop    
RightsComponent isPermittedOnCommunity Drop    
RightsComponent isPermittedOnRepresentation Drop    
RightsComponent isPermittedOnVocabulary Drop    
RightsComponent removeMember Convert ResponsibilityApi removeResponsibility
RightsComponent removeRole Convert RoleApi removeRole
RightsComponent revoke Convert RoleApi changeRole
RightsComponent revokeCategory Drop    
RightsComponent searchRoles Convert RoleApi findRoles
StatusComponent addStatus Convert StatusApi addStatus
StatusComponent addStatusWithCustomUUID Convert StatusApi addStatus
StatusComponent changeDescription Convert StatusApi changeStatus
StatusComponent changeSignifier Convert StatusApi changeStatus
StatusComponent findStatusesContainingSignifier Convert StatusApi findStatuses
StatusComponent getStatus Convert StatusApi getStatus
StatusComponent getStatusBySignifier Convert StatusApi getStatusByName
StatusComponent getStatuses Convert StatusApi findStatuses
StatusComponent removeStatus Convert StatusApi removeStatus
StatusComponent updateStatus Convert StatusApi changeStatus
TermComponent addTerm Convert AssetApi addAsset
TermComponent addTerms Convert AssetApi addAssets
TermComponent changeConceptType Convert AssetApi changeAsset
TermComponent changeConceptTypesAsync Convert AssetApi changeAssets
TermComponent changeExcludedFromHyperlinking Convert AssetApi changeAsset
TermComponent changeGeneralConcept Convert AssetApi changeAsset
TermComponent changeSignifier Convert AssetApi changeAsset
TermComponent changeStatus Convert AssetApi changeAsset
TermComponent changeStatusAsync Convert AssetApi changeAssets
TermComponent changeVocabulariesAsync Convert AssetApi changeAssets
TermComponent changeVocabulary Convert AssetApi changeAsset
TermComponent exists Convert AssetApi exists
TermComponent findPossibleAttributeOrRelationTypes Convert AssignmentApi getAssignmentForAsset
TermComponent findPossibleAttributeTypes Convert AssignmentApi getAssignmentForAsset
TermComponent findPossibleStatuses Convert AssignmentApi getAssignmentForAsset
TermComponent findTermsContainingSignifier Convert AssetApi findAssets
TermComponent getRepresentation Convert AssetApi getAsset
TermComponent getRootType Convert AssetTypeApi findParentTypes
TermComponent getTerm Convert AssetApi getAsset
TermComponent getTermArticulationScore Convert Asset getArticulationScore
TermComponent getTermBySignifier Convert AssetApi findAssets
TermComponent getTerms Convert AssetApi findAssets
TermComponent getTermsCreatedCount Drop    
TermComponent remove Convert AssetApi removeAsset
TermComponent removeAsync Convert AssetApi removeAsset
TermComponent removeGeneralConcept Drop    
TermComponent removeTerms Convert AssetApi removeAssets
TermComponent removeTermsJob Convert AssetApi removeAssets
UserComponent addAdditionalEmail Convert UserApi changeUser
UserComponent addAddress Convert UserApi changeUser
UserComponent addGroup Convert UserGroupApi addUserGroup
UserComponent addInstantMessagingAccount Convert UserApi changeUser
UserComponent addPhone Convert UserApi changeUser
UserComponent addUser Convert UserApi addUser
UserComponent addUserToGroup Convert UserGroupApi addUsersToUserGroup
UserComponent addUsers Convert UserApi addUsers
UserComponent addUsersToGroup Convert UserGroupApi addUsersToUserGroup
UserComponent addWebsite Convert UserApi changeUser
UserComponent changeAdditionalEmail Convert UserApi changeUser
UserComponent changeAddress Convert UserApi changeUser
UserComponent changeAvatar Convert UserApi changeUserAvatar
UserComponent changeGroup Convert UserGroupApi changeUserGroup
UserComponent changeInstantMessagingAccount Convert UserApi changeUser
UserComponent changeLanguage Convert UserApi changeUser
UserComponent changePhone Convert UserApi changeUser
UserComponent changeUser Convert UserApi changeUser
UserComponent changeUserName Convert UserApi changeUser
UserComponent changeWebsite Convert UserApi changeUser
UserComponent exists Convert UserApi exists
UserComponent findGroupsContainingName Convert UserGroupApi findUserGroups
UserComponent findUsersContainingName Convert UserApi findUsers
UserComponent getCurrentUser Convert UserApi getCurrentUser
UserComponent getGroup Convert UserGroupApi getGroup
UserComponent getGroupByName Convert UserGroupApi getUserGroupByName
UserComponent getGroups Convert UserGroupApi findUserGroups
UserComponent getGroupsForUser Convert UserGroupApi findUserGroups
UserComponent getUser Convert UserApi getUser
UserComponent getUserByEmail Convert UserApi getUserByEmailAddress
UserComponent getUserByName Convert UserApi getUserByUserName
UserComponent getUserOrGroup Convert UserApi, UserGroupApi getUser, getUserGroup
UserComponent getUsers Convert UserApi findUsers
UserComponent removeAdditionalEmail Convert UserApi changeUser
UserComponent removeAddress Convert UserApi changeUser
UserComponent removeAvatar Convert UserApi removeAvatar
UserComponent removeGroup Convert UserGroupApi removeUserGroup
UserComponent removeInstantMessagingAccount Convert UserApi changeUser
UserComponent removePhone Convert UserApi changeUser
UserComponent removeUser Convert UserApi removeUser
UserComponent removeUserFromGroup Convert UserGroupApi removeUserFromUserGroup
UserComponent removeWebsite Convert UserApi changeUser
UserComponent setGroupUsers Convert UserGroupApi setUsersForUserGroup
UserComponent setUserGroups Convert UserApi setGroupsForUser
ValidationComponent createTermValidationResultFilter Drop    
ValidationComponent getDependencies Drop    
ValidationComponent getTermValidationInfo Convert ValidationApi findValidationResults
ValidationComponent getTermValidationResults Convert ValidationApi findValidationResults
ValidationComponent getValidationRule Convert AssetApi getAsset
ValidationComponent setDependencies Drop    
ValidationComponent validate Convert ValidationApi validate
ValidationComponent validateAsync Convert ValidationApi validateInJob
ValidationComponent validateAsynchronous Convert ValidationApi validateInJob
ValidationComponent validateScript Drop    
VerbaliserComponent verbalise Drop    
ViewRightComponent addViewRightForGroup Convert ViewPermissionApi addViewPermission
ViewRightComponent addViewRightForUser Convert ViewPermissionApi addViewPermission
ViewRightComponent createViewRightFilter Drop    
ViewRightComponent getResourcesInHierarchyWithViewRights Drop    
ViewRightComponent getViewRight Convert ViewPermissionApi getViewPermission
ViewRightComponent getViewRights Convert ViewPermissionApi findViewPermissions
ViewRightComponent isPermitted Convert ViewPermissionApi  
ViewRightComponent removeViewRight Convert ViewPermissionApi removeViewPermission
VocabularyComponent addVocabulary Convert DomainApi addDomain
VocabularyComponent change Convert DomainApi changeDomain
VocabularyComponent changeCommunity Convert DomainApi changeDomain
VocabularyComponent changeDescription Convert DomainApi changeDomain
VocabularyComponent changeExcludedFromHyperlinking Convert DomainApi changeDomain
VocabularyComponent changeName Convert DomainApi changeDomain
VocabularyComponent changeNameAndUri Convert DomainApi changeDomain
VocabularyComponent changeType Convert DomainApi changeDomain
VocabularyComponent changeUri Drop   ?
VocabularyComponent exists Convert DomainApi exists
VocabularyComponent findPossibleAttributeOrRelationTypes Convert AssignmentApi getAvailableRelationTypes, getAvailableComplexRelationTypes, getAvailableAttributeTypes
VocabularyComponent findPossibleAttributeTypes Convert AssignmentApi getAvailableAttributeTypes
VocabularyComponent findPossibleComplexRelationTypes Convert AssignmentApi getAvailableComplexRelationTypes
VocabularyComponent findPossibleFactTypes Convert AssignmentApi getAvailableRelationTypes
VocabularyComponent findPossibleObjectTypes Convert AssignmentApi getAvailableAssetTypesForDomain
VocabularyComponent findPossibleRelationTypes Convert AssignmentApi getAvailableRelationTypes
VocabularyComponent findPossibleStatuses Drop    
VocabularyComponent findVocabulariesContainingName Convert DomainApi findDomains
VocabularyComponent getNonMetaVocabularies Convert DomainApi findDomains
VocabularyComponent getNumberOfTerms Convert OutputModuleApi  
VocabularyComponent getTerms Convert AssetApi findAssets
VocabularyComponent getVocabularies Convert DomainApi findDomains
VocabularyComponent getVocabulariesByCommunity Convert DomainApi findDomains
VocabularyComponent getVocabulariesByName Convert DomainApi findDomains
VocabularyComponent getVocabulariesByType Convert DomainApi findDomains
VocabularyComponent getVocabulariesByTypeAndCommunity Convert DomainApi findDomains
VocabularyComponent getVocabulary Convert DomainApi getDomain
VocabularyComponent getVocabularyByUri Drop    
VocabularyComponent getVocabularyCount Convert OutputModuleApi  
VocabularyComponent removeAsync Convert DomainApi removeDomainInJob
VocabularyComponent removeVocabulariesJob Convert DomainApi removeDomainsInJob
VocabularyComponent removeVocabulary Convert DomainApi removeDomain
VocabularyTypeComponent addVocabularyType Convert DomainTypeApi addDomainType
VocabularyTypeComponent addVocabularyTypeWithCustomUUID Convert DomainTypeApi addDomainType
VocabularyTypeComponent getAllSpecializedVocabularyTypes Convert DomainTypeApi findSubTypes
VocabularyTypeComponent findVocabularyTypeByName Convert DomainTypeApi findDomainTypes
VocabularyTypeComponent findVocabularyTypesContainingSignifier Convert DomainTypeApi findDomainTypes
VocabularyTypeComponent getAllSpecializedVocabularyTypes Convert DomainTypeApi findSubTypes
VocabularyTypeComponent getCodeVocabularyType Drop    
VocabularyTypeComponent getGlossaryVocabularyType Drop    
VocabularyTypeComponent getVocabularyType Convert DomainTypeApi getDomainType
VocabularyTypeComponent getVocabularyTypeHierarchy Drop    
VocabularyTypeComponent getVocabularyTypes Convert DomainTypeApi findDomainTypes
VocabularyTypeComponent findPossibleConceptTypes Drop    
WorkflowComponent addAssignmentRule Convert WorkflowDefinitionApi addAssetTypeAssignmentRule
WorkflowComponent cancelWorkflow Convert WorkflowInstanceApi cancelWorkflowInstance
WorkflowComponent cancelWorkflowWithTask Convert WorkflowTaskApi cancelWorkflowTask
WorkflowComponent change Convert WorkflowDefinitionApi changeWorkflowDefinition
WorkflowComponent change Convert WorkflowDefinitionApi changeWorkflowDefinition
WorkflowComponent changeAssignmentRule Convert WorkflowDefinitionApi changeAssetTypeAssignmentRule
WorkflowComponent changeItemResourceType Convert WorkflowDefinitionApi changeWorkflowDefinition
WorkflowComponent changeStartEvents Convert WorkflowDefinitionApi changeWorkflowDefinition
WorkflowComponent completeTask Convert WorkflowTaskApi completeWorkflowTasks
WorkflowComponent completeTaskForGuestUser Convert WorkflowTaskApi completeWorkflowTasks
WorkflowComponent completeTasks Convert WorkflowTaskApi completeWorkflowTasks
WorkflowComponent createTaskFilter Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent deploy Convert WorkflowDefinitionApi deployWorkflowDefinition
WorkflowComponent findProcessInstances Convert WorkflowInstanceApi findWorkflowInstances
WorkflowComponent findWorkflowDefinitionsByName Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getAllProcessInstances Convert WorkflowInstanceApi findWorkflowInstances
WorkflowComponent getAllProcessInstances Convert WorkflowInstanceApi findWorkflowInstances
WorkflowComponent getAllTasks Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasks Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForCommunity Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForCommunity Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForUser Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForUser Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForVocabulary Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAllTasksForVocabulary Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasks Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasks Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForCommunity Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForCommunity Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForGuestUser Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForGuestUser Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForVocabulary Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getAssignedTasksForVocabulary Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getConfigurationStartFormData Convert WorkflowTaskApi getConfigurationStartFormData
WorkflowComponent getGlobalWorkflowDefinitions Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getPossibleStartEvents Convert WorkflowDefinitionApi getPossibleWorkflowStartEventTypes
WorkflowComponent getProcessInstances Convert WorkflowInstanceApi findWorkflowInstances
WorkflowComponent getProcessInstancesByItem Convert WorkflowInstanceApi findWorkflowInstances
WorkflowComponent getStartFormData Convert WorkflowTaskApi getStartFormData
WorkflowComponent getTask Convert WorkflowTaskApi getWorkflowTask
WorkflowComponent getTaskActivityFilter Convert WorkflowTaskApi getFindActivitiesRequestForTask
WorkflowComponent getTaskActivityStream Convert ActivityStreamApi getActivities
WorkflowComponent getTaskFormData Convert WorkflowTaskApi getTaskFormData
WorkflowComponent getTasks Convert WorkflowTaskApi findWorkflowTasks
WorkflowComponent getWorkflowDefinition Convert WorkflowDefinitionApi getWorkflowDefinition
WorkflowComponent getWorkflowDefinitionByProcessId Convert WorkflowDefinitionApi getWorkflowDefinitionByProcessId
WorkflowComponent getWorkflowDefinitions Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getWorkflowDefinitionsForCommunities Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getWorkflowDefinitionsForRepresentations Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getWorkflowDefinitionsForVocabularies Convert WorkflowDefinitionApi findWorkflowDefinitions
WorkflowComponent getWorkflowDiagram Convert WorkflowDefinitionApi getWorkflowDefinitionDiagram
WorkflowComponent getWorkflowInstanceDiagram Convert WorkflowInstanceApi getWorkflowInstanceDiagram
WorkflowComponent getWorkflowXML Convert WorkflowDefinitionApi getWorkflowDefinitionXML
WorkflowComponent getWorkflowXMLContent Convert WorkflowDefinitionApi getWorkflowDefinitionXML
WorkflowComponent getWorkflowXMLName Convert WorkflowDefinitionApi getWorkflowDefinitionXML
WorkflowComponent messageEventRecieved Convert WorkflowInstanceApi messageEventReceived
WorkflowComponent reassignTask Convert WorkflowTaskApi reassignTask
WorkflowComponent remove Convert WorkflowDefinitionApi removeWorkflowDefinition
WorkflowComponent removeAssignmentRule Convert WorkflowDefinitionApi removeAssignmentRule
WorkflowComponent removeAsync Convert WorkflowDefinitionApi removeWorkflowDefinitionsInJob
WorkflowComponent setConfigurationVariables Convert WorkflowDefinitionApi changeWorkflowDefinition
WorkflowComponent startWorkflow Convert WorkflowInstanceApi startWorkflowInstances
WorkflowComponent startWorkflowForUser Convert WorkflowInstanceApi startWorkflowInstances
WorkflowComponent startWorkflows Convert WorkflowInstanceApi startWorkflowInstances
WorkflowComponent startWorkflowsAsychronously Convert WorkflowInstanceApi startWorkflowInstancesInJob
WorkflowComponent startWorkflowsAsync Convert WorkflowInstanceApi startWorkflowInstancesInJob

Beans

Beans are information containers that are always present in every workflow. They can provide you with all important information about the context in which the workflow is running. You can access them in expressions where needed. For information about the API of the beans, see the Workflow beans section of the API documentation of your Collibra Data Intelligence Platform environment.

API v2 in workflows

Collibra Data Intelligence Platform has two API versions, v1 and v2. Use API v2 methods as v1 is deprecated.

To validate your code against API v2 in workflows, you have to enter the following value as Namespace in the Process section of the workflow properties: http://www.collibra.com/apiv2.

The value for the API v2 namespace has to be exactly as mentioned above. It is not a reachable URL.

If you use the API v2 namespace:

  • You can no longer use API v1 calls in expressions and Groovy. These will be blocked and will result in failed workflows.
  • All form types are API v2 compatible.
  • The Java beans expose and use only UUIDs and API v2 objects.

You can find the API v2 delegates, listeners adn JavaBeans documentation in the API documentation of your environment. Go to
https://<your_dgc_environment_url>/docs/index.html and click Workflow beans.

The direct link to this documentation is
https://<your_dgc_environment_url>/docs/java-workflow-api/index.html.

You can use the Collibra Command Line Interface to test your workflows for deprecated API v1 content and get a report with v2 alternatives.

BusinessItem bean

  • Available through item variable.
  • This beans contains all the information about the current business item. For example, ${item.id}, ${item.type}
  • The following methods are available:

    TypeMethod and description
    UUID

    getCommunityId()

    Retrieve the community ID of the business item, if present.

    UUID

    getDomainId()

    Retrieve the domain ID of the business item, if present.

    UUIDgetId()
    StringgetName()
    ResourcegetResource()
    ResourceTypegetType()
    StringgetTypeName()
    String

    getUrl()

    Retrieve the url to be able to consult the business item directly in the application, if possible.

Users bean

  • Available through the users variable
  • Contains important functions for everything that is user related. For example:
    • ${users.current} retrieves the current user name.
    • ${users.getUserNamesWithError(stakeholderUserExpression)} evaluates the given user expression and lists the usernames.

Event bean

  • Available through the event variable
  • Contains important event information in case the workflow was started on a event. Will be empty otherwise. For example.:
    • ${event.taskId} the original workflow task that triggered the event.
    • ${event.workflowDefinition.signifier} the original workflow where the event was triggered.

Utility bean

  • Available through the utility variable
  • Contains utility functions like list conversion to CSV and vice versa. For example:
    • ${utility.toList("Admin, user1")} converts the given CSV string to a list.

Mail bean

  • Available through the mail variable
  • Contains some mail related functions. For example:
    • ${mail.getEmailAddresses(candidateUserExpression)} retrieve the emails for the users matching the given user expression.

Translation bean

  • Available through the translation variable
  • Contains functions relating to the usage of i18n translation mechanism. For example:
    • ${translation.getMessage("client.defined.translation")} returns the message for the "client.defined.message" key using the current locale.
    • ${translation.getDefaultLocale()} returns the default locale.

Workflow execution logic - logging

It is possible to add custom logging information to your workflow using an expression. This can be useful when you want to have more information about a certain step that is failing. Using the correct logging levels also allows you to only make the logging visible when needed in case of an error. To log a statement you can use the loggerComponent where you have four methods at your disposal, each of them logging on a different level:

  • debug(String)
  • info(String)
  • warn(String)
  • error(String)

A resulting expression would be something like ${loggerComponent.info("Going to the approval task")}. You can add expressions using a listener on every BPMN element using different events which provides you with enough flexibility to cover a whole workflow. Changing the loglevels to make the logged statements visible can be done in the logging.xml file in the config directory of your user home directory. The line that you should add to change the default INFO level to another one looks like <logger name="com.collibra.dgc.core.component.impl.LoggerComponentImpl" level="DEBUG" />.

.

Manual Task

A task that is performed outside of any process engine or application. For example, a user must make a telephone call.

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Execution

Attribute Description
Asynchronous When enabled, the activity starts as an asynchronous job.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Is for compensation Determines whether the activity can serve as a compensation for another activity.

Attributes: Multi instance

Attribute Description
Multi instance type Determines if multiple instances of this activity are created:
  • None - default, only one instance is created.
  • MI parallel - activities are created in parallel. This is good practice for user tasks.
  • MI sequential - activities are created sequentially. This is good practice for service tasks.
Collection

Expression to set the loop collection for a multi-instance task. The number of instances is determined by the elements of a collection. For each element in the collection, a new instance is created.

A common use case is to loop over lists created by multi-element subforms. For example, if you bound a subform to an array of invoice positions using the expression invoicePositions, you can set the loop collection to ${invoicePositions} to loop over each position.

Element variable

The name of the variable where the currently processed item from the loop collection is stored, for example invoicePosition.

You can access the element in the process through an expression, for example ${invoicePosition}. To access the element in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("invoicePosition",invoicePosition)}. The element is then available in the form through the task.invoicePosition variable.

Element index variable

The name of the variable where the index of the currently processed item from the loop collection is stored, for example, itemIndex.

The index starts with 0 and increases with every element that is being looped through. You can access the index in the process through an expression, for example ${itemIndex} in the process. To access the index in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal(&quot;itemIndex&quot;, itemIndex)}. The index is then available in the form through the task.itemIndex variable.

Cardinality A number or an expression that evaluates to an integer, which controls the number of activity instances that are created. If the attribute Collection is empty, a new instance is created for every element of the list. With cardinality, you can overwrite this and only create a given number of instances. You can also use this attribute if you want to loop over an activity a given number of times without specifying a collection.
Completion condition A Boolean expression that when true cancels the remaining activity instances, stopping the loop, and produces a token.

Attributes: Visual

Attribute Description
Font color The font color.
Font size The font size.
Font style The font style.
Font weight The font weight.
Background color The background color of the element in the diagram.

Email task

A task used to send out emails.

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Details

Attribute Description
Email properties Set email properties for the task.

Attributes: Execution

Attribute Description
Asynchronous When enabled, the activity starts as an asynchronous job.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Is for compensation Determines whether the activity can serve as a compensation for another activity.

Attributes: Multi instance

Attribute Description
Multi instance type Determines if multiple instances of this activity are created:
  • None - default, only one instance is created.
  • MI parallel - activities are created in parallel. This is good practice for user tasks.
  • MI sequential - activities are created sequentially. This is good practice for service tasks.
Collection

Expression to set the loop collection for a multi-instance task. The number of instances is determined by the elements of a collection. For each element in the collection, a new instance is created.

A common use case is to loop over lists created by multi-element subforms. For example, if you bound a subform to an array of invoice positions using the expression invoicePositions, you can set the loop collection to ${invoicePositions} to loop over each position.

Element variable

The name of the variable where the currently processed item from the loop collection is stored, for example invoicePosition.

You can access the element in the process through an expression, for example ${invoicePosition}. To access the element in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal("invoicePosition",invoicePosition)}. The element is then available in the form through the task.invoicePosition variable.

Element index variable

The name of the variable where the index of the currently processed item from the loop collection is stored, for example, itemIndex.

The index starts with 0 and increases with every element that is being looped through. You can access the index in the process through an expression, for example ${itemIndex} in the process. To access the index in a form, you can add a task listener that copies the variable on creation from the execution level to a local task variable, for example ${task.setVariableLocal(&quot;itemIndex&quot;, itemIndex)}. The index is then available in the form through the task.itemIndex variable.

Cardinality A number or an expression that evaluates to an integer, which controls the number of activity instances that are created. If the attribute Collection is empty, a new instance is created for every element of the list. With cardinality, you can overwrite this and only create a given number of instances. You can also use this attribute if you want to loop over an activity a given number of times without specifying a collection.
Completion condition A Boolean expression that when true cancels the remaining activity instances, stopping the loop, and produces a token.

Attributes: Visual

Attribute Description
Font color The font color of the element in the diagram.
Font size The font size of the element in the diagram.
Font style The font style of the element in the diagram.
Font weight The font weight of the element in the diagram.
Background color The background color of the element in the diagram.
Border color The border color of the element in the diagram.

HTTP task (beta)

The HTTP task allows you to securely interact with external REST APIs.

When the workflow reaches an HTTP task, the CollibraEdge Session Manager sends the request defined in the task to the external API. The Session Manager handles the API call using the configured connection details and authentication together with the HTTP task details.

The response is captured and stored in a process variable. The name of the variable is:

  • <HTTP_Task_Model_ID>ResponseBody, for example httpTask1ResponseBody, if you have not specified a Response variable name.
  • The Response variable name defined in the HTTP task configuration.

The workflow continues to the next task even if an error response code is returned.

The HTTP task component treats all response status codes as successful, including 4xx and 5xx. To handle a particular response status code, use the Handle status codes attribute and place an ErrorBoundaryEvent with the appropriate error code, such as HTTP400 on the HTTP task component.

The workflow stops with an error at the instance level in case of an exception such as:

  • Pre-validation:
    • Unsupported Request Format
    • Edge HTTP Connection Not Provided
    • Edge HTTP Connection Not Found
  • Request Sending Error
  • Request Timeout
  • Response Size Exceeded
  • The request timeout is limited to 10 seconds.
  • The HTTP task runs in asynchronous mode only.
  • The maximum allowed response size is 100KB.
  • The supported request and response formats are XML, JSON, and plain text.
  • Retry is limited to 3 times, only if the HTTP request fails to be sent, since 4xx and 5xx response codes are also considered successful.

Prerequisites

You have created an HTTP connection on an Edge site in Collibra.

Show me how

Prerequisites

  • You have created and installed an Edge site.
  • You have a global role that has the System administration or Manage connections and capabilities global permission.

Steps

  1. Open an Edge site.
    1. On the main toolbar, click Products icon, and then click Cogwheel icon Settings.
      The Collibra settings page opens.
    2. In the tab pane, click Edge.
      The Sites tab opens and shows a table with an overview of the Edge sites.
    3. In the Edge site overview, click the name of an Edge site.
      The Edge site page appears.
  2. In the Connections section, click Create connection.
    The Create connection page appears.
  3. Select the HTTP connection:

    Connect to an external REST API using basic access authentication.

    FieldDescriptionRequired
    Name

    The name of the Edge HTTP connection.

    Use this value in the HTTP task as the Edge HTTP connection name property to identify the connection.

    Yes
    DescriptionA description for the connection. No
    VaultThe vault where you store your credentials. No
    UsernameThe username for this connection or the vault parameters for the username. Yes
    PasswordThe password for this connection or the vault parameters for the password. Yes
    HostThe protocol and domain name of the server, for example https://api.example.com. Yes
    Test connection path

    The path for testing this connection with a GET call, for example /v1/health.

    You can only test a connection after saving the connection details.

    No

    Connect to an external REST API that does not require authentication.

    FieldDescriptionRequired
    Name

    The name of the Edge HTTP connection.

    Use this value in the HTTP task as the Edge HTTP connection name property to identify the connection.

    Yes
    DescriptionA description for the connection. No
    Vault The vault where you store your connection details. No
    HostThe protocol and domain name of the server, for example https://api.example.com or the vault parameters for the host. Yes
    Test connection path

    The path for testing this connection with a GET call, for example /v1/health or the vault parameters for the path.

    You can only test a connection after saving the connection details.

    No
  4. Click Create.

    The connection is added to the Edge site.

Attributes: General

Attribute Description
Model ID The unique identifier of the element within the process model.
Name The name of the element displayed in the diagram.
Documentation A description and any additional information about this element.

Attributes: Details

Attribute Description
Edge HTTP connection name The name of the Edge HTTP connection that contains the connection details and credentials.
Request method The method of the request: GET, POST, PUT, DELETE, or PATCH.
Request headers

Line-separated HTTP request headers, such as Content-Type:application/json.

If you provide an Auth header and the Edge HTTP connection is Basic, the Edge connection authentication takes precedence. If the Edge HTTP connection is No Auth, the Auth header provided here is used.

Request path The path of the API endpoint. You can use expressions such as ${requestPath} or /api/endpoint/${expression}.
Request body

The body of the request, such as a JSON file which can also contain expressions, for example: {'clientId': ${clientId}, 'name': ${name}}.

The supported formats are: XML, JSON, and plain text.

To avoid unexpected behavior, do not send a body with GET or DELETE requests.

Fail status codes

A list of HTTP response status codes to fail the request and throw a runtime exception. You can set code ranges with an X, for example 400, 404, 5XX.

The HTTP task component treats all response status codes as successful, including 4xx and 5xx.

Handle status codes

A list of status codes for which the task will throw a BPMN error, which can be caught by a boundary error event. You can set code ranges with an X, for example 400, 404, 5XX.

Status codes defined here take precedence if the same status codes are defined in the Fail status codes attribute.

Response variable name

The name of the process variable to store the HTTP response.

If not specified, the response is stored in the default variable <HTTP_Task_Model_ID>ResponseBody, for example httpTask1ResponseBody.

The supported response formats are XML, JSON, and plain text.

Save request variables

Determines whether all the runtime fields related to the request should be stored as process variables, such as header, path, encoding, or body. By default, only fields related to the response are stored as variables.

See all variables
  • ResponseReason
  • RequestUrl
  • RequestHeaders
  • RequestMethod
  • DisallowRedirects
  • ResponseProtocol
  • ResponseStatusCode
  • SaveResponseParameters
  • RequestBodyEncoding
  • RequestTimeout
  • FailStatusCodes
  • HandleStatusCodes
  • SaveRequestVariables
  • ResponseHeaders
  • RequestBody
  • IgnoreException
Save response details Determines whether all the fields related to the response that are not the actual response in the body should be stored as process variables, including HTTP status, headers, and so on. By default, only the response body is stored as a variable.
Result variable prefix A prefix that should be prepended to all the variables for easier grouping, which is useful when there are different HTTP tasks.
Save response as a transient variable

Determines whether the response variables should be stored as transient.

If you used the Response variable name to store the response as a process instance variable and these responses tend to become large, you have the option to store this variable transiently.

The transient variable is no longer available through execution.getVariable("<Response_variable_name>"); and you can only access it directly as <Response_variable_name> through a synchronous script task placed immediately after the HTTP task.

Attributes: Execution

Attribute Description
Exclusive Determines whether the activity or process is run as an exclusive job. An exclusive job ensures that no other asynchronous exclusive activities within the same process are performed at the same time. This helps to prevent failing jobs in concurrent scenarios.
Execution listeners

Allows you to invoke Java logic after certain events:

  • Start: Executes after the activity has been started.
  • End: Executes after the activity was completed.
  • Transition: When defined on a sequence flow, executes once the flow is transition is taken.
Skip expression

Defines an expression which is evaluated before executing the task. If it evaluates to true, the task is skipped.

You must opt-in to enable this feature by setting a process variable _FLOWABLE_SKIP_EXPRESSION_ENABLED with the Boolean value true.

Attributes: Visual

Attribute Description
Font color The font color of the element in the diagram.
Font size The font size of the element in the diagram.
Font style The font style of the element in the diagram.
Font weight The font weight of the element in the diagram.
Background color The background color of the element in the diagram.
Border color The border color of the element in the diagram.