Description
The activity GroupVote is responsible for collecting necessary data about the voting of a group on a special topic. Unlike the UserVote, it is not possbile to delegate the task. A user that is part of a group can accept or decline a vote and also leave a comment that justifies their decision. The voting result is determined by whatever threshold has been reached first and ends the activity.
Short profile | |
---|---|
Name | GroupVote |
Async | No |
BPMN type | bpmn:userTask
|
BPMN Extension Element "wf:type" | group_vote
|
Properties
Name of property | Description | Type |
---|---|---|
due_date
|
Due date for task completion | date/timestamp |
assigned_group
|
Name of the user group that should vote; can be plain grouname as used in the DB (e.g. "sysop") | string |
instructions
|
Text that is shown to the group of user, so they know what to vote about | string |
users_voted
|
Not to be set in the workflow definition. Used to store data during the activities life cycle. E.g.[
{ "userName": "UserA", "vote": "yes", "comment": "Good" },
{ "userName": "UserB", "vote": "no", "comment": "Not good" }
]
|
string |
threshold_yes_unit | can be user or percent - absolute number of users required to a approve a page
|
user, percent |
threshold_yes_value | number of users or percentage of users required to approve a page | |
threshold_no_unit | can be user or percent - absolute number of users required to a reject a page
|
user, percent |
threshold_no_value | number of users or percentage of users required to reject a page |
Full example
Once one of the thresholds is reached, the activity will be completed and a <bpmn:exclusiveGateway>
(referenced by <bpmn:outgoing>
) will be called. It will choose its outgoing <bpmn:sequenceFlow>
by mapping its name
to the "type" of the threshold that has been reached.
In this example, after the first user either voted yes or no, the workflow will simply reach the end point:
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wf="http://hallowelt.com/schema/bpmn/wf" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1vrglfw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="bpmn-js (https://demo.bpmn.io)" exporterVersion="8.7.1">
<!-- Process part -->
<bpmn:process id="Group_Vote" isExecutable="false">
<bpmn:extensionElements>
<wf:context>
<wf:contextItem name="pageId"/>
<wf:contextItem name="revision"/>
</wf:context>
</bpmn:extensionElements>
<!-- StartEvent -->
<bpmn:startEvent id="TheStart">
<bpmn:outgoing>FromTheStartToGroupVote</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="FromTheStartToGroupVote" sourceRef="TheStart" targetRef="GroupVote"/>
<!-- Collect group vote -->
<bpmn:userTask id="GroupVote" name="GroupVote">
<bpmn:extensionElements>
<wf:type>group_vote</wf:type>
</bpmn:extensionElements>
<bpmn:property name="assigned_group">QM-reviewer</bpmn:property>
<bpmn:property name="instructions">Please vote</bpmn:property>
<bpmn:property name="comment"/>
<bpmn:property name="vote">vote</bpmn:property>
<bpmn:property name="users_voted"/>
<bpmn:property name="due_date">{{#time:YmdHis|now + 7days}}</bpmn:property>
<bpmn:property name="threshold_yes_unit">user</bpmn:property>
<bpmn:property name="threshold_yes_value">1</bpmn:property>
<bpmn:property name="threshold_no_unit">user</bpmn:property>
<bpmn:property name="threshold_no_value">1</bpmn:property>
<bpmn:incoming>FromtheStartToGroupVote</bpmn:incoming>
<bpmn:outgoing>FromGroupVoteToGatewayGroupVote</bpmn:outgoing>
</bpmn:userTask>
<bpmn:sequenceFlow id="FromGroupVoteToGatewayGroupVote" sourceRef="GroupVote" targetRef="GatewayGroupVote"/>
<!-- Check on voting -->
<bpmn:exclusiveGateway id="GatewayGroupVote" name="GroupVote.vote">
<bpmn:incoming>FromGroupVoteToGatewayGroupVote</bpmn:incoming>
<bpmn:outgoing>FromGatewayGroupVoteToTheEndYes</bpmn:outgoing>
<bpmn:outgoing>FromGatewayGroupVoteToTheEndNo</bpmn:outgoing>
</bpmn:exclusiveGateway>
<bpmn:sequenceFlow id="FromGatewayGroupVoteToTheEndYes" name="yes" sourceRef="GatewayGroupVote" targetRef="TheEnd"/>
<bpmn:sequenceFlow id="FromGatewayGroupVoteToTheEndNo" name="no" sourceRef="GatewayGroupVote" targetRef="TheEnd"/>
<!-- EndEvent -->
<bpmn:endEvent id="TheEnd">
<bpmn:incoming>FromGatewayGroupVoteToTheEndYes</bpmn:incoming>
<bpmn:incoming>FromGatewayGroupVoteToTheEndNo</bpmn:incoming>
</bpmn:endEvent>
</bpmn:process>
</bpmn:definitions>