This site has moved to the integrated Appfire documentation and information site for our apps.

From February 2024 this site is no longer updated.

Take a look here! If you have any questions please email support@appfire.com

Add an approval counter to fast-track an approval

Overview

Content reviews will often assign several reviewers. Once assigned the workflow requires that all the assigned reviewers agree – either Approve or Reject – before the workflow transitions to another state.


Rather than waiting for all the assigned reviewers to approve the content, the workflow author may want to transition the workflow after receiving approvals from a set number of the assigned reviewers.

We can do this using a metadata item as a counter and incrementing the counter using the{increment-metadata} macro.

Set and increment the approval counter to action the approval

The workflow uses the following trigger actions:

In the simple increment metadata example, the content is approved when three of the five assigned reviewers have approved the content.


{workflow:name=Increment Metadata Counter for an approval}
    {description}
        A simple approval workflow with use of increment-metadata macro to set the number 
        of assigned reviewer approval decisions to trigger the approval transition.
    {description}
    {state:Review|approved=Approved|Rejected=Rejected|taskable=true}
        {approval:Review|user=&suni,adam,elle,matilde,milo}
    {state}
	{state:Rejected|submit=Review|taskable=true}
	{state}
    {state:Approved|final=true|updated=Review|hideselection=true}
    {state}
	{trigger:statechanged|state=Review}
    	{set-metadata:approval-counter}0{set-metadata}
	{trigger}
	{trigger:pageapproved|approval=Review|partial=true}
    	{increment-metadata:approval-counter}
	{trigger}
	{trigger:pageparameterupdate|parameter=@approval-counter@|@approval-counter@=3}
    	{approve-page:Review|comment=Three reviewers have approved the content}
	{trigger}
{workflow}


This example may be useful when you have a large number of users who are members of a global Confluence group that is the assigned reviewer group but your approval practice does not require all assigned users to undertake the content review.


Here's how each trigger action works

TriggerEventAction macroNotes
Initialize the metadatastatechanged

{set-metadata} 

  • sets the metadata as approval-counter
  • initializes (or resets) the metadata approval-counter value to zero on the state change event to Review state
Approval counterpageapproved{increment-metadata}
  • increments the approval-counter value by 1 each time a reviewer approves the content
  • condition partial=true  means that the trigger listens for each individual approval decision
Approve the pagepageparameterupdate{approve-page}
  • approves the content when the parameter value is updated of the approval-counter is incremented to a value of 3 (trigger event condition is @approval-counter@=3)


An individual reviewer rejection decision on its own does not impact the metadata approval-counter value but be aware there is an impact on the context of an approval transition. For example

  • the {approve-page} macro is triggered when the approval-counter value is 3 even if one or more of the assigned reviewers have rejected the content
  • the approval-counter value is not decreased if a previous user changes their approved decision to rejected.

This may mean the approve-page action may occur if

  • an assigned approver has rejected the content but three other assignees have approved the content
  • a single assignee approves and rejects the content two times and then undertakes a third approval decision without any other assignee approving the content

We obviously need to avoid these mixed decisions causing an overall approval by managing a rejection decision.

Manage reviewer rejection of the content

An additional trigger may be useful to initiate a fast-tracked rejection.

{trigger:pagerejected|approval=Review|partial=true}
      {set-state:Rejected}
{trigger}


A single rejection decision will transition the content to the Rejected state.

The addition of the fast-tracked rejection trigger to this workflow can be used to manage: 

  • when a single reviewer rejects the content
  • when a reviewer changes their content review decision before any transition occurs