Home > Forum > General > Distribution of tasks assignments

Distribution of tasks assignments
1

MVP

Hey everyone,
I've got a request from my business to automatically split the tasks between people in the department.

Did anyone here had a chance to implement something like round robin / load balance of tasks assigned to people from a group?
The idea would be one person get's the task assigned, but the remaining part of the team will just get edit rights to the document.

I don't recall any built-in solutions, but before creating one, maybe somebody already faced this challenge :)

Hi Maksymilian,

I didn‘t realize this one yet but would do the following:

- Business rule that checks the total number of open tasks for all group members and gives back the bpsuserid having the smallest amount
- On the path to the step or on entry of the step an automation with action Create task. There you use the business rule in Direct and the group members in CC with edit rights

Optional would be a menu button „Assign to myself“ that uses an automation with Create Task and direct assignment to current user. The task CCs can remain for all group members.

Is this what you intend to do?

Kind regards
Sébastien

In reply to: Maksymilian Stachowiak

Seems like a neat idea for the load balance, the business rules would be enough for this one i like it!
I'm still looking for the round robin though, as this was the first go-to from business perspective.

Their original idea which i've assigned to round robin is following:
task 1: user1
task 2: user2
task 3: user3
task 4: user1
task 5: user2
task 6: user3
and repeat.

Ok, then I would create a dictionary with let's say 10 user picker fields and a field containing the next userbpsid and an int field to just save 1 to 10.
Create only one instance for one entry of the dictionary and disable all "New" buttons.
With a business rule you can then just get the userbpsid for the direct assignment and set the next userbpsid field of the dictionary entry with an automation on entry of the step.
To get the round robin working you need to do a concat ot the attribute table names "WFD_AttChoose" and the valueof the int field containing 1 to 10. If the field is empty you need an automatic to the next and after 10 a jump back to 1.

Or you create a default process with only one instance and use an item list there with the column for the user picker and a column with a checkbox as flag for the next assignee user. To set the next assignee you just need to disable the checkbox of the current row id with active checkbox and enable the checkbox of row id + 1 with the same logic to jump back from the last item list entry to the first one.

What do you think about it?

MVP
In reply to: Sébastien Anselment

Ok, then I would create a dictionary with let's say 10 user picker fields and a field containing the next userbpsid and an int field to just save 1 to 10.
Create only one instance for one entry of the dictionary and disable all "New" buttons.
With a business rule you can then just get the userbpsid for the direct assignment and set the next userbpsid field of the dictionary entry with an automation on entry of the step.
To get the round robin working you need to do a concat ot the attribute table names "WFD_AttChoose" and the valueof the int field containing 1 to 10. If the field is empty you need an automatic to the next and after 10 a jump back to 1.

Or you create a default process with only one instance and use an item list there with the column for the user picker and a column with a checkbox as flag for the next assignee user. To set the next assignee you just need to disable the checkbox of the current row id with active checkbox and enable the checkbox of row id + 1 with the same logic to jump back from the last item list entry to the first one.

What do you think about it?

Thank you for the ideas!
I'm much more in favor of the 2nd one, as it scales better, no limit for the size of the group, although it tricked my brain into thinking that it could be also possible to achieve without any additional forms, just an SQL statement should do the job too.

We're able to fetch the tasks that are assigned from WFTasks, and search tasks just for specific process/workflow/form, by joining with WFElements, WFDocTypes, WFSteps, WorkFlows.

The order of assigning the tasks would be alphabetical, so i can just go with give me the last person from group x, who had a task in step y. This gives me the position to who should get the task next 🤔
Although by implementing it this way would require that there is only one path assigning the task, so the order won't get messed up.

In reply to: Maksymilian Stachowiak

Thank you for the ideas!
I'm much more in favor of the 2nd one, as it scales better, no limit for the size of the group, although it tricked my brain into thinking that it could be also possible to achieve without any additional forms, just an SQL statement should do the job too.

We're able to fetch the tasks that are assigned from WFTasks, and search tasks just for specific process/workflow/form, by joining with WFElements, WFDocTypes, WFSteps, WorkFlows.

The order of assigning the tasks would be alphabetical, so i can just go with give me the last person from group x, who had a task in step y. This gives me the position to who should get the task next 🤔
Although by implementing it this way would require that there is only one path assigning the task, so the order won't get messed up.

Hi,

nice idea too with SQL.
But how do you link user groups to different steps? Do you really want to define this statically in the SQL query? It’s not that nice having to change such things (in the case of new workfkows, steps) in the Studio instead of the portal, is it?
Or do you want to read out the assignees of the task of the step with SQL too without manual definition?
If you have multiple paths entering one step you could check if there already has been a task created in this step if the instance and if yes assign the same user and if not use your round robin, couldn’t you?
And what if you don’t want a static alphabetical order? You would need a kind of switch to have different cases in the SQL query.
I’m looking forward to your solution. 😉

Kind regards
Sébastien