Assigning tasks to users, sending out reminders, having escalation of tasks via delegation, these are all great concepts and available in Nintex Workflow out of the box.
Although waiting on users to respond is one way of building your workflow process and is actually the most common, there is another concept to look into. It would be the ability to look at a users status and see if they are available, then assigning a task to me.
To this end, Nintex Workflow comes with an action named Get User Status. The scenarios I will be showing you here, are where you have a list of approvers and in a workflow, we iterate through that list, find the approver that is available, and assign a task to them only. This actions works by talking to OCS/Lync server and queries the user status. This is an interesting piece of information, since this gives us the users presence and that will, more often than not, tell us if the user is at their desk/computer or not. It will also tell us if the user is offline (not working) or away (working but not at his desk at this moment).
Approval based on User Status - Basic
We'll start off with a list called Approvers. This is going to be a list in SharePoint that contains a People/Group field and will contain all the users that I could potentially assign my tasks to.
Potentially, we'll have some users available and some who are away.
The Nintex Workflow does workflow logic that I'm sure all of us have done before. Querying a list and iterating through it using a For Each action. If not, and you're interesting in getting a better feel for it, let me know and I'll post something about it.
The workflow design shows you basically what this workflow does. I've tried to put labels on the bottom of the important actions to describe what it is doing. In this scenario, we are only interested in the first approver we find that is Available via Lync. So once we find that user, we jump out of the For Each and continue on.
What is not visible in the screenshot above, is that there is a Flexi Task action that is using this user. You may not be aware, but the Flexi Task action can notify approvers via email, Lync, both or none. So if you think about how this can improve your business process, we are checking if a user is available at this desk, and then assigning a task to that user, at the same time, notifying them via Lync so they'll know straight away that they have a task they need to action.
This scenario works fine in most cases, but you can take it further.
Approval based on User Status - Advanced
The Flexi Task action supports reminders and escalation. So to extend the workflow above, we can find two users. One user who is available and one who is away. That way, we can configure the Flexi Task action to assign a task to the first available user, and if they don't respond within a specified period of time (eg. 10 mins), we can escalate it to the next approver. In the workflow below, I'm looking for an Available user and an Away user. You could change it to look for two Available users or even find the first available and store the rest as the escalation points. Either way you do it, the concept is around trying to improve your business process in such a way, that you can get faster response time to tasks and as a result, speed up the automated business processes.
You can see from the workflow design above, that it's a little more elaborate. I'm even using Run Parallel Actions, because I generally think about efficiency and performance when I do my workflow design. Again, for maintainability for the future, I've labeled my actions so that if I need to come back later to this workflow, I'll know what each part does.
The aim of this post, is to once again open your eyes to the possibilities of Nintex Workflow. You can build some very elaborate and complex workflows, without actually using that many actions. Not to mention, no code (sorry fellow developers).