Voting Using the Avoka Rendezvous DSC
Scenario
A position change process exists in an organization. This allows employees to apply to redefine their positions, if necessary. For example they can use this process to ask for greater scope in their responsibilities and in turn request additional salary.
Such a process requires approval by a group of four executives in the financial arm of the corporation. The business rule we wish to capture here is that at least 75% or more of the members of this group must approve the position change in order for the change to take place.
A Solution? Using native ES components we could use a Gateway Task, forking the process into 4 parallel threads - each thread containing a User/Assign Task for each executive. The problem is, however, that this method would require each assignee to be hard-coded.
Another problem with using the Gateway Task is that for each assignee there would be redundant process code in need of heavier maintenance. Also adding new assignees to the process would require adding new branches to the Gateway (as shown below).
Problems with this approach include: Klunki-ness, Hard-coded group members/size; and overly complicated scripting to process votes.

The Rendezvous Solution Component

The Rendezvous Solution Component, by Avoka Technologies, is designed to allow processes to perform many instances of an approval sub-process concurrently and then aggregate their results back together.
The Rendezvous is able to create an appropriate number of instances of the sub-process, based on data passed into it at runtime eliminating the hard-coding problem mentioned above. It can also pass slightly customized data to each instance (such as which executive needs to perform the approval).
To obtain an evaluation copy of the Rendezvous DSC, go to the Avoka Website: http://www.avoka.com and follow the links.
The Rendezvous Component, once installed, will appear as a new service in your LiveCycle WorkBench.
The Process
The process containing a Rendezvous task ("Group Approval") can create many instances of the process on the right - as many as there are members in the group "All Principals in Sample Organization, Finance". The task "Lookup Approvers" gives us this list ("Lookup Approvers" relies on the LookupGroup Solution Component, by Avoka Technologies).
Each member of the group "All Principals in Sample Organization, Finance" will receive their own task instance of the Decide Approval task in their Workspace.
Once each group member has finished their Decide Approval task, the task "Set Decision" consults the form used in Decide Approval to assign a value to a process output parameter (boolean: decision).
These output parameters are then passed into the process from the sub-processes on the right and passed back to the Rendezvous ("Group Approval"), which counts them. Depending on whether 75% or more of the group members have chosen to approve the request will determine which path the process will take.
You can download and install this example Rendezvous Process and the Rendezvous Sub-process. If you install it make sure that you:
- add Taskmanager endpoint to process "TestRendezvousTask".
- Set security setting on the endpoint such that "All principals in Sample Organisation, FinanceCorp" are in the list of users who can start process "TestRendezvousTask."
- In the user manager system extend kvarsen's rights such that he is a "workspace user".
Setting Properties on the Rendezvous Task

First we select task "Group Approval" and view the properties tab. Then we click the button "...", under "Input: Settings".

This will open the "Rendezvous Task Design Settings" dialog box. In our case we wish to pass a partially completed form to each approver showing details about what it is they are being asked to approve. Therefore we select the form variable in this process to be passed into the sub-process ... including all form data (Step 1).
We want to give the rendezvous a list of userIDs. One to be passed into each sub-process instance. We do that as shown by identifying the variable holding this list and the delimiter used to separate userIDs (Step 2).

The Rendezvous provides a sequence of helpful drop-down lists to help select the sub-process that contains the approval step. This can be done by selecting Process Category, and then selecting one of the processes in that category (Step 3).
Our sub-process has an input parameter into which to pass a copy of the form obtained from the parent process (Step 4).
Each userID from Step 2 gets passed into the sub-process through the instance parameter. This way the User/Assign Task in each sub-process instance can be assigned to the user identified by the process parameter "userAssign" (Step 5).
Each sub-process outputs the decision of one executive. The rendezvous task is informed to use the output parameter "decision" (Step 6).

Since we want to keep the model simple let's assume that we only want to know the decision of each executive. In that case we can use "Consensus Mode" which allows us to do the vote counting inside the rendezvous task (Step 7).
Referring back to our initial requirement 75% of the executives need to approve the request. Therefore we set "Percentage of approvals.." to be at least 75% (Step 7).