Hello,
I’m trying for hours to find a way to skip the execution of a User Task (Form). Use case is e.g. when an credit card validation service is broken, we also want to disable the form where you type in the credit card information.
For Service Tasks it is possible to suspend the Task using the Cockpit web application. It’s also possible to define a variable and implement your own skip procedure using expressions [1]. But both ways are not applicable for User Tasks.
So I tried to complete the Task in a global TaskListener. But everytime I try to pass over the Task, I’m getting a SQL-Error [2].
My approaches were:
public class SkipTaskBpmnParseListener extends AbstractBpmnParseListener {
@Override
public void parseUserTask(Element userTaskElement, ScopeImpl scope, ActivityImpl activity) {
ActivityBehavior behavior = activity.getActivityBehavior();
if (behavior instanceof UserTaskActivityBehavior) {
((UserTaskActivityBehavior) behavior).getTaskDefinition().addTaskListener(TaskListener.EVENTNAME_CREATE,
new TaskListener() {
@Override
public void notify(DelegateTask delegateTask) {
TaskService taskService = delegateTask.getProcessEngineServices().getTaskService();
RuntimeService runtimeService = delegateTask.getProcessEngineServices().getRuntimeService();
String pid = delegateTask.getProcessInstanceId();
String activityInstanceId = delegateTask.getExecution().getActivityInstanceId();
String currentActivityId = delegateTask.getExecution().getCurrentActivityId();
String taskId = delegateTask.getId();
// Trying using taskService
taskService.complete(taskId);
// OR (not both at same time) using
// createProcessInstanceModification
runtimeService.createProcessInstanceModification(pid)
.cancelActivityInstance(activityInstanceId)
.cancelAllForActivity(currentActivityId)
.startAfterActivity(currentActivityId).execute();
}
});
}
}
}
Is it possible to implment a way to skip/disable/suspend a User Task?
Thanks a lot!
[1] https://github.com/camunda/camunda-consulting/tree/master/snippets/skip-service-task-expression
[2] The exception is:
The process could not be started. : Cannot instantiate process definition MyProcess:1:6: ENGINE-03004 Exception while executing Database Operation ‘INSERT IdentityLinkEntity[29]’ with message ’ ### Error updating database. Cause: org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: “ACT_FK_TSKASS_TASK: PUBLIC.ACT_RU_IDENTITYLINK FOREIGN KEY(TASK_ID_) REFERENCES PUBLIC.ACT_RU_TASK(ID_) (‘28’)” Referential integrity constraint violation: “ACT_FK_TSKASS_TASK: PUBLIC.ACT_RU_IDENTITYLINK FOREIGN KEY(TASK_ID_) REFERENCES PUBLIC.ACT_RU_TASK(ID_) (‘28’)”; SQL statement: insert into ACT_RU_IDENTITYLINK (ID_, TYPE_, USER_ID_, GROUP_ID_, TASK_ID_, PROC_DEF_ID_, TENANT_ID_, REV_ ) values (?, ?, ?, ?, ?, ?, ?, 1 ) [23506-191] ### The error may involve org.camunda.bpm.engine.impl.persistence.entity.IdentityLinkEntity.insertIdentityLink-Inline ### The error occurred while setting parameters ### SQL: insert into ACT_RU_IDENTITYLINK (ID_, TYPE_, USER_ID_, GROUP_ID_, TASK_ID_, PROC_DEF_ID_, TENANT_ID_, REV_ ) values (?, ?, ?, ?, ?, ?, ?, 1 ) ### Cause: org.h2.jdbc.JdbcSQLException: Referentielle Integrität verletzt: “ACT_FK_TSKASS_TASK: PUBLIC.ACT_RU_IDENTITYLINK FOREIGN KEY(TASK_ID_) REFERENCES PUBLIC.ACT_RU_TASK(ID_) (‘28’)” Referential integrity constraint violation: “ACT_FK_TSKASS_TASK: PUBLIC.ACT_RU_IDENTITYLINK FOREIGN KEY(TASK_ID_) REFERENCES PUBLIC.ACT_RU_TASK(ID_) (‘28’)”; SQL statement: insert into ACT_RU_IDENTITYLINK (ID_, TYPE_, USER_ID_, GROUP_ID_, TASK_ID_, PROC_DEF_ID_, TENANT_ID_, REV_ ) values (?, ?, ?, ?, ?, ?, ?, 1 ) [23506-191]’. Flush summary: [ INSERT HistoricVariableInstanceEntity[27] INSERT HistoricVariableInstanceEntity[30] INSERT HistoricVariableInstanceEntity[34] INSERT HistoricVariableInstanceEntity[36] INSERT HistoricVariableInstanceEntity[37] INSERT HistoricVariableInstanceEntity[38] INSERT HistoricVariableInstanceEntity[39] INSERT HistoricTaskInstanceEventEntity[28] INSERT HistoricTaskInstanceEventEntity[40] INSERT HistoricProcessInstanceEventEntity[23] INSERT HistoricActivityInstanceEventEntity[EndEvent_12b4dai:42] INSERT HistoricActivityInstanceEventEntity[StartEvent_1:24] INSERT HistoricActivityInstanceEventEntity[skip:26] INSERT HistoricActivityInstanceEventEntity[zf.line1.sampletask:32] INSERT ExecutionEntity[23] INSERT ByteArrayEntity[33] INSERT ByteArrayEntity[35] INSERT VariableInstanceEntity[30] INSERT IdentityLinkEntity[29] INSERT IdentityLinkEntity[41] DELETE_BULK deleteByteArrayNoRevisionCheck 33 ]