Background
LiveCycle Process Management ES uses User Service to assign task to a workflow user in workflow. Once the process hits the User step, the thread of the process instance halts until the task is completed.
The "Assign Task" operation of User Service allows you to setup task reminders up to 2 reminders, task escalation and task deadline.
However, if you would like to have a bit more sophisticated business rules in place to satisfy your particular business needs, for example, having more reminders and some reminder you want to cc to the one-up manager, you find yourself constrained in the property settings that are available on the User "Assign Task" operation. Another example would be to have multiple level of escalations, before the task is deadlined.
Calling a Sub-process to Handle Custom Task Escalation
One of the possible ways to solve the above scenario is to call a sub-process to handle the task after the task assignment. The only problem is once the process execution hits the user step, it halts the thread and therefore we can't do anything until the task is completed.
The idea is to call a sub-process before just before the user step asynchronously, with an initial step of the sub-process set to wait for a minute or two, passing in the parent process ID and/or the user task name. The sub-process will then have sufficient information to look-up for the active task that would have been assigned after a short wait.
Here is how you should call the sub-process just before the user step:

Note that in calling the sub-process, it passes in the current process id to its sub-process enabling the sub-process to look-up its parent process active task. The invocation policy is also set to "Do not wait for response" (i.e. asynchronous call) allowing the parent process to proceed without halting on that step and move on to the user step.
The sub-process will then use the parent process id to locate its latest active task, after a short wait to ensure the user step is executed in the parent process.
Here is how the sub-process could look like this:

In the sample process above, it waits for a minute, and then look-ups the active task for the parent process. It waits for a few days before the first escalation, if the task status is still active, another few days for another escalation also if the task is still active, and finally, wait another few more days and deadline the task if the task is still active.
There are a few custom components developed by Avoka used in the process to manipulate the task:
- find latest running task for parent process (Process Utilities)
- escalate a task (Task Utilities), this operation has two versions: one that supports user's out of office settings that is only available to server running ES Update 1 or later versions, another is the basic task escalation operation.
- deadline a task (Task Utilities).
If you want to have a go yourself with manipulating the task in the sub-process, you can download the LCA file for this example, which contains the parent process, the sub-process and the required components.
Please note: If you are using a sub-process like this to customize task reminders and escalations, please DO NOT specify anything on the reminders and escalation. Otherwise, you will get redundant actions, i.e. multiple reminders by the user step and the sub-process.
We would appreciate feedback or suggestions if you find there are other operations you would like to perform in the sub-process that are not yet available.