Package org.flowable.cmmn.api

# Interface CmmnTaskService

public interface CmmnTaskService

Author:
  Joram Barrez

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `activateTask(String taskId, String userId)`
  Activates the task.
  `void`
  `addGroupIdentityLink(String taskId, String groupId, String identityLinkType)`
  Involves a group with a task.
  `void`
  `addUserIdentityLink(String taskId, String userId, String identityLinkType)`
  Involves a user with a task.
  `void`
  `bulkSaveTasks(Collection<Task> taskList)`
  `void`
  `claim(String taskId, String userId)`
  Claim responsibility for a task: the given user is made assignee for the task.
  `void`
  `complete(String taskId)`
  `void`
  `complete(String taskId, String userId)`
  `void`
  `complete(String taskId, String userId, Map<String,Object> variables)`
  `void`
  `complete(String taskId, String userId, Map<String,Object> variables, Map<String,Object> transientVariables)`
  `void`
  `complete(String taskId, Map<String,Object> variables)`
  `void`
  `complete(String taskId, Map<String,Object> variables, Map<String,Object> transientVariables)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables, boolean localScope)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables, Map<String,Object> transientVariables)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables, boolean localScope)`
  `void`
  `completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables, Map<String,Object> transientVariables)`
  `TaskBuilder`
  `createTaskBuilder()`
  Create a builder for the task
  `TaskCompletionBuilder`
  `createTaskCompletionBuilder()`
  Create a completion builder for the task
  `TaskQuery`
  `createTaskQuery()`
  `void`
  `delegateTask(String taskId, String userId)`
  Delegates the task to another user.
  `void`
  `deleteGroupIdentityLink(String taskId, String groupId, String identityLinkType)`
  Removes the association between a group and a task for the given identityLinkType.
  `void`
  `deleteTask(String taskId)`
  Deletes the given task, not deleting historic information that is related to this task.
  `void`
  `deleteTask(String taskId, boolean cascade)`
  Deletes the given task.
  `void`
  `deleteTask(String taskId, String deleteReason)`
  Deletes the given task, not deleting historic information that is related to this task..
  `void`
  `deleteTasks(Collection<String> taskIds)`
  Deletes all tasks of the given collection, not deleting historic information that is related to these tasks.
  `void`
  `deleteTasks(Collection<String> taskIds, boolean cascade)`
  Deletes all tasks of the given collection.
  `void`
  `deleteTasks(Collection<String> taskIds, String deleteReason)`
  Deletes all tasks of the given collection, not deleting historic information that is related to these tasks.
  `void`
  `deleteUserIdentityLink(String taskId, String userId, String identityLinkType)`
  Removes the association between a user and a task for the given identityLinkType.
  `List<IdentityLink>`
  `getIdentityLinksForTask(String taskId)`
  Retrieves the `IdentityLink`s associated with the given task.
  `List<Task>`
  `getSubTasks(String parentTaskId)`
  The list of subtasks for this parent task
  `org.flowable.form.api.FormInfo`
  `getTaskFormModel(String taskId)`
  `org.flowable.form.api.FormInfo`
  `getTaskFormModel(String taskId, boolean ignoreVariables)`
  `Object`
  `getVariable(String taskId, String variableName)`
  get a variables and search in the task scope and if available also the execution scopes.
  `<T> T`
  `getVariable(String taskId, String variableName, Class<T> variableClass)`
  get a variables and search in the task scope and if available also the execution scopes.
  `VariableInstance`
  `getVariableInstance(String taskId, String variableName)`
  The variable.
  `VariableInstance`
  `getVariableInstanceLocal(String taskId, String variableName)`
  The variable for a task.
  `Map<String,VariableInstance>`
  `getVariableInstances(String taskId)`
  All variables visible from the given task scope (including parent scopes).
  `Map<String,VariableInstance>`
  `getVariableInstances(String taskId, Collection<String> variableNames)`
  The variable values for all given variableNames, takes all variables into account which are visible from the given task scope (including parent scopes).
  `Map<String,VariableInstance>`
  `getVariableInstancesLocal(String taskId)`
  All variable values that are defined in the task scope, without taking outer scopes into account.
  `Map<String,VariableInstance>`
  `getVariableInstancesLocal(String taskId, Collection<String> variableNames)`
  The variable values for all given variableNames that are defined in the given task's scope.
  `List<VariableInstance>`
  `getVariableInstancesLocalByTaskIds(Set<String> taskIds)`
  get all variables and search only in the task scope.
  `Object`
  `getVariableLocal(String taskId, String variableName)`
  checks whether or not the task has a variable defined with the given name.
  `<T> T`
  `getVariableLocal(String taskId, String variableName, Class<T> variableClass)`
  checks whether or not the task has a variable defined with the given name.
  `Map<String,Object>`
  `getVariables(String taskId)`
  get all variables and search in the task scope and if available also the execution scopes.
  `Map<String,Object>`
  `getVariables(String taskId, Collection<String> variableNames)`
  get values for all given variableNames and search only in the task scope.
  `Map<String,Object>`
  `getVariablesLocal(String taskId)`
  get all variables and search only in the task scope.
  `Map<String,Object>`
  `getVariablesLocal(String taskId, Collection<String> variableNames)`
  get a variable on a task
  `boolean`
  `hasVariable(String taskId, String variableName)`
  checks whether or not the task has a variable defined with the given name, in the task scope and if available also the execution scopes.
  `boolean`
  `hasVariableLocal(String taskId, String variableName)`
  checks whether or not the task has a variable defined with the given name, local task scope only.
  `Task`
  `newTask()`
  `Task`
  `newTask(String taskId)`
  `void`
  `removeVariable(String taskId, String variableName)`
  Removes the variable from the task.
  `void`
  `removeVariableLocal(String taskId, String variableName)`
  Removes the variable from the task (not considering parent scopes).
  `void`
  `removeVariables(String taskId, Collection<String> variableNames)`
  Removes all variables in the given collection from the task.
  `void`
  `removeVariablesLocal(String taskId, Collection<String> variableNames)`
  Removes all variables in the given collection from the task (not considering parent scopes).
  `void`
  `resolveTask(String taskId)`
  Marks that the assignee is done with this task and that it can be send back to the owner.
  `void`
  `resolveTask(String taskId, Map<String,Object> variables)`
  Marks that the assignee is done with this task providing the required variables and that it can be sent back to the owner.
  `void`
  `resolveTask(String taskId, Map<String,Object> variables, Map<String,Object> transientVariables)`
  Similar to `resolveTask(String, Map)`, but allows to set transient variables too.
  `void`
  `saveTask(Task task)`
  `void`
  `setAssignee(String taskId, String userId)`
  Changes the assignee of the given task to the given userId.
  `void`
  `setDueDate(String taskId, Date dueDate)`
  Changes the due date of the task
  `void`
  `setOwner(String taskId, String userId)`
  Transfers ownership of this task to another user.
  `void`
  `setPriority(String taskId, int priority)`
  Changes the priority of the task.
  `void`
  `setVariable(String taskId, String variableName, Object value)`
  set variable on a task.
  `void`
  `setVariableLocal(String taskId, String variableName, Object value)`
  set variable on a task.
  `void`
  `setVariables(String taskId, Map<String,? extends Object> variables)`
  set variables on a task.
  `void`
  `setVariablesLocal(String taskId, Map<String,? extends Object> variables)`
  set variables on a task.
  `void`
  `startProgress(String taskId, String userId)`
  Starts the progress on the task.
  `void`
  `suspendTask(String taskId, String userId)`
  Suspends the task.
  `void`
  `unclaim(String taskId)`
  A shortcut to `claim(java.lang.String, java.lang.String)` with null user in order to unclaim the task

- ## Method Details

  - ### newTask

    Task newTask()

  - ### newTask

    Task newTask(String taskId)

  - ### createTaskBuilder

    TaskBuilder createTaskBuilder()
    Create a builder for the task
    Returns:
      task builder

  - ### saveTask

    void saveTask(Task task)

  - ### bulkSaveTasks

    void bulkSaveTasks(Collection<Task> taskList)

  - ### complete

    void complete(String taskId)

  - ### complete

    void complete(String taskId, String userId)

  - ### complete

    void complete(String taskId, Map<String,Object> variables)

  - ### complete

    void complete(String taskId, String userId, Map<String,Object> variables)

  - ### complete

    void complete(String taskId, Map<String,Object> variables, Map<String,Object> transientVariables)

  - ### complete

    void complete(String taskId, String userId, Map<String,Object> variables, Map<String,Object> transientVariables)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables, Map<String,Object> transientVariables)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables, Map<String,Object> transientVariables)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, Map<String,Object> variables, boolean localScope)

  - ### completeTaskWithForm

    void completeTaskWithForm(String taskId, String formDefinitionId, String outcome, String userId, Map<String,Object> variables, boolean localScope)

  - ### createTaskCompletionBuilder

    TaskCompletionBuilder createTaskCompletionBuilder()
    Create a completion builder for the task
    Returns:
      task completion builder

  - ### claim

    void claim(String taskId, String userId)
    Claim responsibility for a task: the given user is made assignee for the task. The difference with `setAssignee(String, String)` is that here a check is done if the task already has a user assigned to it. No check is done whether the user is known by the identity component.
    Parameters:
      `taskId` - task to claim, cannot be null.
      `userId` - user that claims the task. When userId is null the task is unclaimed, assigned to no one.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.
      `FlowableTaskAlreadyClaimedException` - when the task is already claimed by another user.

  - ### unclaim

    void unclaim(String taskId)
    A shortcut to `claim(java.lang.String, java.lang.String)` with null user in order to unclaim the task
    Parameters:
      `taskId` - task to unclaim, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.

  - ### startProgress

    void startProgress(String taskId, String userId)
    Starts the progress on the task.
    Parameters:
      `taskId` - task to start progress, cannot be null.
      `userId` - user that starts progress for the task.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.

  - ### suspendTask

    void suspendTask(String taskId, String userId)
    Suspends the task. No check is done whether the user is known by the identity component.
    Parameters:
      `taskId` - task to suspend, cannot be null.
      `userId` - user that suspends the task.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.

  - ### activateTask

    void activateTask(String taskId, String userId)
    Activates the task. No check is done whether the user is known by the identity component.
    Parameters:
      `taskId` - task to activate, cannot be null.
      `userId` - user that activates the task.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.

  - ### delegateTask

    void delegateTask(String taskId, String userId)
    Delegates the task to another user. This means that the assignee is set and the delegation state is set to `DelegationState.PENDING`. If no owner is set on the task, the owner is set to the current assignee of the task.
    Parameters:
      `taskId` - The id of the task that will be delegated.
      `userId` - The id of the user that will be set as assignee.
    Throws:
      `FlowableObjectNotFoundException` - when no task exists with the given id.

  - ### resolveTask

    void resolveTask(String taskId)
    Marks that the assignee is done with this task and that it can be send back to the owner. Can only be called when this task is `DelegationState.PENDING` delegation. After this method returns, the `delegationState` is set to `DelegationState.RESOLVED`.
    Parameters:
      `taskId` - the id of the task to resolve, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when no task exists with the given id.

  - ### resolveTask

    void resolveTask(String taskId, Map<String,Object> variables)
    Marks that the assignee is done with this task providing the required variables and that it can be sent back to the owner. Can only be called when this task is `DelegationState.PENDING` delegation. After this method returns, the `delegationState` is set to `DelegationState.RESOLVED`.
    Parameters:
      `taskId` -
      `variables` - When no task exists with the given id.

  - ### resolveTask

    void resolveTask(String taskId, Map<String,Object> variables, Map<String,Object> transientVariables)
    Similar to `resolveTask(String, Map)`, but allows to set transient variables too.

  - ### deleteTask

    void deleteTask(String taskId)
    Deletes the given task, not deleting historic information that is related to this task.
    Parameters:
      `taskId` - The id of the task that will be deleted, cannot be null. If no task exists with the given taskId, the operation is ignored.
    Throws:
      `FlowableObjectNotFoundException` - when the task with given id does not exist.
      `FlowableException` - when an error occurs while deleting the task or in case the task is part of a running process.

  - ### deleteTasks

    void deleteTasks(Collection<String> taskIds)
    Deletes all tasks of the given collection, not deleting historic information that is related to these tasks.
    Parameters:
      `taskIds` - The id's of the tasks that will be deleted, cannot be null. All id's in the list that don't have an existing task will be ignored.
    Throws:
      `FlowableObjectNotFoundException` - when one of the task does not exist.
      `FlowableException` - when an error occurs while deleting the tasks or in case one of the tasks is part of a running process.

  - ### deleteTask

    void deleteTask(String taskId, boolean cascade)
    Deletes the given task.
    Parameters:
      `taskId` - The id of the task that will be deleted, cannot be null. If no task exists with the given taskId, the operation is ignored.
      `cascade` - If cascade is true, also the historic information related to this task is deleted.
    Throws:
      `FlowableObjectNotFoundException` - when the task with given id does not exist.
      `FlowableException` - when an error occurs while deleting the task or in case the task is part of a running process.

  - ### deleteTasks

    void deleteTasks(Collection<String> taskIds, boolean cascade)
    Deletes all tasks of the given collection.
    Parameters:
      `taskIds` - The id's of the tasks that will be deleted, cannot be null. All id's in the list that don't have an existing task will be ignored.
      `cascade` - If cascade is true, also the historic information related to this task is deleted.
    Throws:
      `FlowableObjectNotFoundException` - when one of the tasks does not exist.
      `FlowableException` - when an error occurs while deleting the tasks or in case one of the tasks is part of a running process.

  - ### deleteTask

    void deleteTask(String taskId, String deleteReason)
    Deletes the given task, not deleting historic information that is related to this task..
    Parameters:
      `taskId` - The id of the task that will be deleted, cannot be null. If no task exists with the given taskId, the operation is ignored.
      `deleteReason` - reason the task is deleted. Is recorded in history, if enabled.
    Throws:
      `FlowableObjectNotFoundException` - when the task with given id does not exist.
      `FlowableException` - when an error occurs while deleting the task or in case the task is part of a running process

  - ### deleteTasks

    void deleteTasks(Collection<String> taskIds, String deleteReason)
    Deletes all tasks of the given collection, not deleting historic information that is related to these tasks.
    Parameters:
      `taskIds` - The id's of the tasks that will be deleted, cannot be null. All id's in the list that don't have an existing task will be ignored.
      `deleteReason` - reason the task is deleted. Is recorded in history, if enabled.
    Throws:
      `FlowableObjectNotFoundException` - when one of the tasks does not exist.
      `FlowableException` - when an error occurs while deleting the tasks or in case one of the tasks is part of a running process.

  - ### getSubTasks

    List<Task> getSubTasks(String parentTaskId)
    The list of subtasks for this parent task

  - ### setVariable

    void setVariable(String taskId, String variableName, Object value)
    set variable on a task. If the variable is not already existing, it will be created in the most outer scope. This means the process instance in case this task is related to an execution.

  - ### setVariables

    void setVariables(String taskId, Map<String,? extends Object> variables)
    set variables on a task. If the variable is not already existing, it will be created in the most outer scope. This means the process instance in case this task is related to an execution.

  - ### setVariableLocal

    void setVariableLocal(String taskId, String variableName, Object value)
    set variable on a task. If the variable is not already existing, it will be created in the task.

  - ### setVariablesLocal

    void setVariablesLocal(String taskId, Map<String,? extends Object> variables)
    set variables on a task. If the variable is not already existing, it will be created in the task.

  - ### getVariable

    Object getVariable(String taskId, String variableName)
    get a variables and search in the task scope and if available also the execution scopes.

  - ### getVariable

    <T> T getVariable(String taskId, String variableName, Class<T> variableClass)
    get a variables and search in the task scope and if available also the execution scopes.

  - ### getVariableInstance

    VariableInstance getVariableInstance(String taskId, String variableName)
    The variable. Searching for the variable is done in all scopes that are visible to the given task (including parent scopes). Returns null when no variable value is found with the given name.
    Parameters:
      `taskId` - id of task, cannot be null.
      `variableName` - name of variable, cannot be null.
    Returns:
      the variable or null if the variable is undefined.
    Throws:
      `FlowableObjectNotFoundException` - when no execution is found for the given taskId.

  - ### hasVariable

    boolean hasVariable(String taskId, String variableName)
    checks whether or not the task has a variable defined with the given name, in the task scope and if available also the execution scopes.

  - ### getVariableLocal

    Object getVariableLocal(String taskId, String variableName)
    checks whether or not the task has a variable defined with the given name.

  - ### getVariableLocal

    <T> T getVariableLocal(String taskId, String variableName, Class<T> variableClass)
    checks whether or not the task has a variable defined with the given name.

  - ### getVariableInstanceLocal

    VariableInstance getVariableInstanceLocal(String taskId, String variableName)
    The variable for a task. Returns the variable when it is set for the task (and not searching parent scopes). Returns null when no variable is found with the given name.
    Parameters:
      `taskId` - id of task, cannot be null.
      `variableName` - name of variable, cannot be null.
    Returns:
      the variable or null if the variable is undefined.
    Throws:
      `FlowableObjectNotFoundException` - when no task is found for the given taskId.

  - ### hasVariableLocal

    boolean hasVariableLocal(String taskId, String variableName)
    checks whether or not the task has a variable defined with the given name, local task scope only.

  - ### getVariables

    Map<String,Object> getVariables(String taskId)
    get all variables and search in the task scope and if available also the execution scopes. If you have many variables and you only need a few, consider using `getVariables(String, Collection)` for better performance.

  - ### getVariableInstances

    Map<String,VariableInstance> getVariableInstances(String taskId)
    All variables visible from the given task scope (including parent scopes).
    Parameters:
      `taskId` - id of task, cannot be null.
    Returns:
      the variable instances or an empty map if no such variables are found.
    Throws:
      `FlowableObjectNotFoundException` - when no task is found for the given taskId.

  - ### getVariableInstances

    Map<String,VariableInstance> getVariableInstances(String taskId, Collection<String> variableNames)
    The variable values for all given variableNames, takes all variables into account which are visible from the given task scope (including parent scopes).
    Parameters:
      `taskId` - id of taskId, cannot be null.
      `variableNames` - the collection of variable names that should be retrieved.
    Returns:
      the variables or an empty map if no such variables are found.
    Throws:
      `FlowableObjectNotFoundException` - when no taskId is found for the given taskId.

  - ### getVariablesLocal

    Map<String,Object> getVariablesLocal(String taskId)
    get all variables and search only in the task scope. If you have many task local variables and you only need a few, consider using `getVariablesLocal(String, Collection)` for better performance.

  - ### getVariables

    Map<String,Object> getVariables(String taskId, Collection<String> variableNames)
    get values for all given variableNames and search only in the task scope.

  - ### getVariablesLocal

    Map<String,Object> getVariablesLocal(String taskId, Collection<String> variableNames)
    get a variable on a task

  - ### getVariableInstancesLocalByTaskIds

    List<VariableInstance> getVariableInstancesLocalByTaskIds(Set<String> taskIds)
    get all variables and search only in the task scope.

  - ### getVariableInstancesLocal

    Map<String,VariableInstance> getVariableInstancesLocal(String taskId)
    All variable values that are defined in the task scope, without taking outer scopes into account. If you have many task local variables and you only need a few, consider using `getVariableInstancesLocal(String, Collection)` for better performance.
    Parameters:
      `taskId` - id of task, cannot be null.
    Returns:
      the variables or an empty map if no such variables are found.
    Throws:
      `FlowableObjectNotFoundException` - when no task is found for the given taskId.

  - ### getVariableInstancesLocal

    Map<String,VariableInstance> getVariableInstancesLocal(String taskId, Collection<String> variableNames)
    The variable values for all given variableNames that are defined in the given task's scope. (Does not searching parent scopes).
    Parameters:
      `taskId` - id of taskId, cannot be null.
      `variableNames` - the collection of variable names that should be retrieved.
    Returns:
      the variables or an empty map if no such variables are found.
    Throws:
      `FlowableObjectNotFoundException` - when no taskId is found for the given taskId.

  - ### removeVariable

    void removeVariable(String taskId, String variableName)
    Removes the variable from the task. When the variable does not exist, nothing happens.

  - ### removeVariableLocal

    void removeVariableLocal(String taskId, String variableName)
    Removes the variable from the task (not considering parent scopes). When the variable does not exist, nothing happens.

  - ### removeVariables

    void removeVariables(String taskId, Collection<String> variableNames)
    Removes all variables in the given collection from the task. Non existing variable names are simply ignored.

  - ### removeVariablesLocal

    void removeVariablesLocal(String taskId, Collection<String> variableNames)
    Removes all variables in the given collection from the task (not considering parent scopes). Non existing variable names are simply ignored.

  - ### getTaskFormModel

    org.flowable.form.api.FormInfo getTaskFormModel(String taskId)

  - ### getTaskFormModel

    org.flowable.form.api.FormInfo getTaskFormModel(String taskId, boolean ignoreVariables)

  - ### setPriority

    void setPriority(String taskId, int priority)
    Changes the priority of the task. Authorization: actual owner / business admin
    Parameters:
      `taskId` - id of the task, cannot be null.
      `priority` - the new priority for the task.
    Throws:
      `FlowableObjectNotFoundException` - when the task doesn't exist.

  - ### setDueDate

    void setDueDate(String taskId, Date dueDate)
    Changes the due date of the task
    Parameters:
      `taskId` - id of the task, cannot be null.
      `dueDate` - the new due date for the task
    Throws:
      `FlowableException` - when the task doesn't exist.

  - ### createTaskQuery

    TaskQuery createTaskQuery()

  - ### setAssignee

    void setAssignee(String taskId, String userId)
    Changes the assignee of the given task to the given userId. No check is done whether the user is known by the identity component.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `userId` - id of the user to use as assignee.
    Throws:
      `FlowableObjectNotFoundException` - when the task or user doesn't exist.

  - ### setOwner

    void setOwner(String taskId, String userId)
    Transfers ownership of this task to another user. No check is done whether the user is known by the identity component.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `userId` - of the person that is receiving ownership.
    Throws:
      `FlowableObjectNotFoundException` - when the task or user doesn't exist.

  - ### getIdentityLinksForTask

    List<IdentityLink> getIdentityLinksForTask(String taskId)
    Retrieves the `IdentityLink`s associated with the given task. Such an `IdentityLink` informs how a certain identity (eg. group or user) is associated with a certain task (eg. as candidate, assignee, etc.)

  - ### addUserIdentityLink

    void addUserIdentityLink(String taskId, String userId, String identityLinkType)
    Involves a user with a task. The type of identity link is defined by the given identityLinkType.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `userId` - id of the user involve, cannot be null.
      `identityLinkType` - type of identityLink, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when the task or user doesn't exist.

  - ### addGroupIdentityLink

    void addGroupIdentityLink(String taskId, String groupId, String identityLinkType)
    Involves a group with a task. The type of identityLink is defined by the given identityLink.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `groupId` - id of the group to involve, cannot be null.
      `identityLinkType` - type of identity, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when the task or group doesn't exist.

  - ### deleteUserIdentityLink

    void deleteUserIdentityLink(String taskId, String userId, String identityLinkType)
    Removes the association between a user and a task for the given identityLinkType.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `userId` - id of the user involve, cannot be null.
      `identityLinkType` - type of identityLink, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when the task or user doesn't exist.

  - ### deleteGroupIdentityLink

    void deleteGroupIdentityLink(String taskId, String groupId, String identityLinkType)
    Removes the association between a group and a task for the given identityLinkType.
    Parameters:
      `taskId` - id of the task, cannot be null.
      `groupId` - id of the group to involve, cannot be null.
      `identityLinkType` - type of identity, cannot be null.
    Throws:
      `FlowableObjectNotFoundException` - when the task or group doesn't exist.