> For the complete documentation index, see [llms.txt](https://developer.collibra.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.collibra.com/workflows/designing-workflows/processes/shape-repository/service-task/delegates/alternatives-to-api-v1-delegates.md).

# Alternatives to API v1 delegates

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

## AddAttributeDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Add attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.AddAttributeDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="value">
            &#x3C;activiti:string>&#x3C;![CDATA[attribute content]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="ownerId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="typeId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenAttributeTypeId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Add attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetAttributeDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.GetAttributeDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="attributeId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenAttributeId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Get attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        def attribute = attributeApi.getAttribute(string2Uuid(givenAttributeId));
        execution.setVariable("output", attribute)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## RemoveAttributeDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Remove attribute" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.attribute.RemoveAttributeDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="attributeId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenAttributeId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Remove attribute" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        attributeApi.removeAttribute(string2Uuid(givenAttributeId));
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## AddRelationDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Add relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.GetRelationsDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="sourceTermId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="targetTermId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenTargetResourceId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="binaryFactTypeId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenRelationTypeId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Add relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetRelationsDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Remove relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.GetRelationsDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="sourceTermId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## RemoveRelationsDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Remove relation" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.relation.RemoveRelationsDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="sourceTermId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Remove relation" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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() }));
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## AddResourceRoleDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Assign owner" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.roles.AddResourceRoleDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="resourceId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="userName">
            &#x3C;activiti:expression>&#x3C;![CDATA[${startUser}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="roleId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${roleId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Assign owner" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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())
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## RemoveResourceRoleDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Remove current Owner role" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.roles.RemoveResourceRoleDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="roleName">
            &#x3C;activiti:string>&#x3C;![CDATA[Owner]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="userName">
            &#x3C;activiti:expression>&#x3C;![CDATA[${ownerName}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resourceId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${domain.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Remove current Owner role" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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() }));
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## AddTermDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Add term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.AddTermDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="signifier">
            &#x3C;activiti:expression>${givenSignifier}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="vocabularyId">
            &#x3C;activiti:expression>${givenVocabularyId}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="typeId">
            &#x3C;activiti:expression>${givenTypeId}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Add asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetTermDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.GetTermDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="termId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${giventTermId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Get asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        import com.collibra.dgc.core.api.model.instance.Asset;
        Asset asset = assetApi.getAsset(givenAssetId);
        execution.setVariable("output", asset)
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## RemoveTermDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Remove term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.term.RemoveTermDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="termId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${givenTermId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Remove asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        assetApi.removeAsset(givenAssetId);
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## AddComment

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Add comment" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.AddComment">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="comment">
            &#x3C;activiti:string>The content of the comment.&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Store comment" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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())
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## AddDecisionVote

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Add vote outcome to list" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.AddDecisionVote">&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Add vote outcome to list" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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&#x3C;String> voters = (List&#x3C;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);
                }
            }
        }
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## ChangeIssueResponsibleCommunity

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Move the Issue" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ChangeIssueResponsibleCommunity">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="responsibleCommunity">
            &#x3C;activiti:expression>${responsibleCommunity}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Move the Issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>
        import com.collibra.dgc.core.api.dto.instance.issue.MoveIssueRequest
        issueApi.moveIssue(MoveIssueRequest.builder()
            .issueId(item.id)
            .communityId(responsibleCommunity)
            .build())
    &#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## ChangeStatusDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Mark as Accepted" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ChangeStatusDelegate"
    &#x3C;extensionElements>
        &#x3C;activiti:field name="targetStatusId">
            &#x3C;activiti:string>&#x3C;![CDATA[00000000-0000-0000-0000-000000005009]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Mark as Accepted" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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())
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## StateChanger

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Mark as Accepted" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.StateChanger"
    &#x3C;extensionElements>
        &#x3C;activiti:field name="targetStatusId">
            &#x3C;activiti:string>&#x3C;![CDATA[00000000-0000-0000-0000-000000005009]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Mark as Accepted" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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())
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## CountVoteResult

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Count voting result" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CountVoteResult">&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Count voting result" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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&#x3C;String>) execution.getVariable("voters")).size();
                int approved = getNumberOfApprovals(voting);
                double fraction = percentage / 100.0;
                return approved >= requiredToVote * fraction;
            }
            return false;
        }
        def getNumberOfApprovals(List&#x3C;Map> voting) {
            int approved = 0;
            for (Map vote : voting) {
                    if (vote.approved) {
                        approved++;
                    }
                }
            return approved;
        }
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## CreateIssue

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Create issue" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CreateIssue">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="subject">
            &#x3C;activiti:expression>${subject}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="description">
            &#x3C;activiti:expression>${description}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="priority">
            &#x3C;activiti:expression>${priority}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="relations">
            &#x3C;activiti:expression>${relations}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="classifications">
            &#x3C;activiti:expression>${classifications}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="requester">
            &#x3C;activiti:expression>${requester}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="responsibleCommunity">
            &#x3C;activiti:expression>${responsibleCommunity}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Create issue" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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))
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## CreateVotersList

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Create list of voters" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.CreateVotersList">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="voterUserExpression">
            &#x3C;activiti:expression>&#x3C;![CDATA[${voterUserExpression}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Create list of voters" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        def voterUserExpression = execution.getVariable("voterUserExpression")
        final Set&#x3C;String> voters = new HashSet&#x3C;>();
        for (String userExpression : utility.toList(voterUserExpression)) {
            voters.addAll(users.getUserNamesWithError(userExpression));
        }
        execution.setVariable("voters", new ArrayList&#x3C;>(voters));
        execution.setVariable("votingResult", []);
        execution.setVariable("completion", Boolean.FALSE);
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetModel

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get Model" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetModel">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="viewConfig">
            &#x3C;activiti:expression>${viewConfig}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="varNames">
            &#x3C;activiti:string>VOC_ID&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="varValues">
            &#x3C;activiti:expression>${item.id}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resultVariable">
            &#x3C;activiti:string>assets&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

| API v2                                                                               |
| ------------------------------------------------------------------------------------ |
| This delegate is not supported and there is no alternative or possibility to use it. |

## GetRelatedTerms

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get related terms" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetRelatedTerms">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="relationRole">
            &#x3C;activiti:expression>"role(Business Steward)"&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resultVariable">
            &#x3C;activiti:string>relations&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Get related terms" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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&#x3C;RelationType> relationTypes = relationTypeApi.findRelationTypes(FindRelationTypesRequest.builder()
            .role("groups")
            .build())
        .getResults()
        if (relationTypes.isEmpty()) {
            throw new WorkflowException("No relation types for provided role 'groups'");
        }
        List&#x3C;UUID> relatedAssetIds = new ArrayList&#x3C;>();
        for (RelationType relationType : relationTypes) {
            List&#x3C;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);
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetRelatedTermsDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get related terms" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetRelatedTermsDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="termId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${item.id}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="direction">
            &#x3C;activiti:string>true&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="relationTypeId">
            &#x3C;activiti:string>"00000000-0000-0000-0000-000000007021"&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resultVariableName">
            &#x3C;activiti:string>"relatedAssets"&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Get related terms" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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&#x3C;Asset> relatedAssets = new ArrayList&#x3C;>();
        if (direction) {
            List&#x3C;Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .sourceId(assetId)
                .relationTypeId(groupsRelationTypeId)
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssets.add(relation.getSource());
            }
        }
		else {
            List&#x3C;Relation> relations = relationApi.findRelations(FindRelationsRequest.builder()
                .targetId(assetId)
                .relationTypeId(groupsRelationTypeId)
                .build())
            .getResults();
            for (Relation relation : relations) {
                relatedAssets.add(relation.getTarget());
            }
        }
        execution.setVariable("relatedAssets", relatedAssets);
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## GetUserNames

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Get user names" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.GetUserNames">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="userNames">
            &#x3C;activiti:expression>&#x3C;![CDATA[${userName}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="userExpressions">
            &#x3C;activiti:expression>&#x3C;![CDATA[${role}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="groupNames">
            &#x3C;activiti:expression>&#x3C;![CDATA[${group}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Get user names" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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&#x3C;String> userNameResult = new HashSet&#x3C;String>();
        userNameResult.addAll(utility.toList("${userName}"));
        userNameResult.addAll(users.getUserNames("${role}"));
        List&#x3C;UserGroup> userGroupList = userGroupApi.findUserGroups(FindUserGroupsRequest.builder()
            .name("${group}")
            .nameMatchMode(MatchMode.EXACT)
            .build())
        .getResults()
        for (UserGroup userGroup : userGroupList) {
            List&#x3C;User> userList = userApi.findUsers(FindUsersRequest.builder()
                .groupId(userGroup.getId())
                .build())
            .getResults()
            for (User user : userList) {
                userNameResult.add(user.getUserName());
            }
        }
        execution.setVariable("assembledUserNames", userNameResult);
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## MailSender

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>com.collibra.dgc.core.workflow.activiti.delegate.MailSender
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>com.collibra.dgc.workflow.api.listener.ActionMailSender
</code></pre></td></tr></tbody></table>

## ProvideDefaultsDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Check optional variables" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.ProvideDefaultsDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="names">
            &#x3C;activiti:string>&#x3C;![CDATA[resultTemplate,reminderTemplate]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="defaults">
            &#x3C;activiti:string>&#x3C;![CDATA[result,reminder]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Check Optional Variables" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![CDATA[
        import com.collibra.dgc.workflow.api.exception.WorkflowException
        List&#x3C;String> namesList = utility.toList(execution.getVariable("names"))
        List&#x3C;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 &#x3C; namesList.size(); i++) {
            String currentName = namesList.get(i).trim();
            String currentDefault = defaultsList.get(i);
            if (!execution.hasVariable(currentName)) {
                execution.setVariable(currentName, currentDefault);
            }
        }
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## StartCollibraConnectFlowDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>com.collibra.dgc.core.workflow.activiti.delegate.StartCollibraConnectFlowDelegate
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>com.collibra.dgc.workflow.api.delegate.StartCollibraConnectFlowDelegate
</code></pre></td></tr></tbody></table>

## StartWorkflowInstanceDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Start workflow" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.StartWorkflowInstanceDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="processId">
            &#x3C;activiti:string>&#x3C;![CDATA[subWorkflow]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resourceId">
            &#x3C;activiti:expression>&#x3C;![CDATA[${targetTermId}]]>&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="resourceType">
            &#x3C;activiti:string>&#x3C;![CDATA[TE]]>&#x3C;/activiti:string>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Start workflow" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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())
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>

## TermIntakeDelegate

<table><thead><tr><th>API v1</th></tr></thead><tbody><tr><td><pre><code>&#x3C;serviceTask id="servicetask1" name="Create Term" activiti:class="com.collibra.dgc.core.workflow.activiti.delegate.TermIntakeDelegate">
    &#x3C;extensionElements>
        &#x3C;activiti:field name="signifier">
            &#x3C;activiti:expression>${signifier}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="conceptType">
            &#x3C;activiti:expression>${conceptType}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="vocabulary">
            &#x3C;activiti:expression>${intakeVocabulary}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="definition">
            &#x3C;activiti:expression>${definition}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="description">
            &#x3C;activiti:expression>${description}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="example">
            &#x3C;activiti:expression>${example}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="usesrelation">
            &#x3C;activiti:expression>${usesrelation}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
        &#x3C;activiti:field name="note">
            &#x3C;activiti:expression>${note}&#x3C;/activiti:expression>
        &#x3C;/activiti:field>
    &#x3C;/extensionElements>
&#x3C;/serviceTask>
</code></pre></td></tr></tbody></table>

<table><thead><tr><th>API v2</th></tr></thead><tbody><tr><td><pre><code>&#x3C;scriptTask id="scripttask1" name="Create Asset" scriptFormat="groovy" activiti:autoStoreVariables="false">
    &#x3C;script>&#x3C;![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)
        }
    ]]>&#x3C;/script>
&#x3C;/scriptTask>
</code></pre></td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://developer.collibra.com/workflows/designing-workflows/processes/shape-repository/service-task/delegates/alternatives-to-api-v1-delegates.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
