1 - Multiple task responsibles
You can now assign multiple responsible parties to a single task. Gone are the days of using complex workarounds like creating dynamic roles and assigning users to them before they can be linked to tasks.
We’ve simplified the terminology across all of our Public APIs. The term activator is no longer used; instead, we consistently refer to "responsible" or "responsibles." These are the roles or users who can claim and work on a task.
With this change, there will be a performance impact, as SQL queries may take longer. This is due to the additional table join required when displaying task lists or case lists. I highly recommend considering the use of our OpenSearch index for serving these lists to mitigate performance degradation.
The development workflow UI has been updated to reflect these changes. On the task list, you’ll see the primary responsible party, and a popup will show all other assigned responsibles. On the task detail page, you can view all responsible parties at once.


When adding a responsible to a task, you can select Member from attribute and provide a list of strings with the member names. The member name for a role is simply the role name itself, while the member name for a user is their username, prefixed with a hashtag #.

Audience
Value
- Less complex ivy processes
Version
Discussion
Next steps
- Multiple "activators" for request start
Screenshots / Code
// New Public APIs are available; all others have been deprecated:
var responsibles = ch.ivyteam.ivy.workflow.ITask.responsibles();
ISecurityMember alex;
responsibles.all();
responsibles.add(alex);
responsibles.remove(alex);
responsibles.set(alex);
var expiry = ch.ivyteam.ivy.workflow.ITask.expiry();
var expiryResponsibles = expiry.responsibles();
ISecurityMember alex;
expiryResponsibles.all();
expiryResponsibles.add(alex);
expiryResponsibles.remove(alex);
expiryResponsibles.set(alex);
TaskQuery.create().where().responsibleId().isEqualTo("UUID");
TaskQuery.create().where().responsibleName().isEqualTo("#alex");
TaskQuery.create().where().responsibleDisplayName().isEqualTo("Alex Suter");
// APIs to read, write, or query original responsibles are no longer provided.