Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Contact Us
Online Help
Domain Status
Man Pages

Virtual Servers

Topology Map

Server Agreement
Year 2038

USA Flag



Man Pages

Manual Reference Pages  -  WORKFLOW::CONDITION::NESTED (3)

.ds Aq ’


Workflow::Condition::Nested - Evaluate nested workflow conditions



Typically, the workflow conditions are evaluated directly by the framework in Workflow::State when the action is evaluated. This module allows a workflow condition to contain nested conditions that are evaluated directly rather than via separate workflow actions.

This allows the workflow to be designed to group multiple conditions and perform advanced operations like an OR comparision of multiple conditions with greedy evaluation (as opposed to lazy evaluation).

A usage example might be a case where 3 of 5 possible approvals are needed for an action to be allowed. The Greedy OR condition would define the list of conditions to be evaluated. After checking each condition, it would return the total number of successes. The result is then checked against the number needed, returning the boolean value needed by Workflow::State.

<B>Note:B> This class is not used directly, but subclassed by your class that implements the evaluate() method and calls methods declared here.


In condition.xml:

    <condition name="cond1" ... />
    <condition name="cond2" ... />
    <condition name="cond3" ... />
    <condition name="cond4" ... />
    <condition name="cond5" ... />

    <condition name="count_approvals" class="Workflow::Condition::GreedyOR">
        <param name="condition" value="cond1" />
        <param name="condition" value="cond2" />
        <param name="condition" value="cond3" />
        <param name="condition" value="cond4" />
        <param name="condition" value="cond5" />

    <condition name="check_approvals" class="Workflow::Condition::CheckReturn">
        <param name="condition" value="count_approvals" />
        <!-- operator "ge" means: greater than or equal to -->
        <param name="operator"  value="ge" />
        <param name="argument"  value="$context->{approvals_needed}" />

In workflow.xml:

    <state name="CHECK_APPROVALS" autorun="yes">
        <action name="null_1" resulting_state="APPROVED">
            <condition name="check_approvals" />
        <action name="null_2" resulting_state="REJECTED">
            <condition name="!check_approvals" />


This wicked hack runs the condition half-outside of the Workflow framework. If the Workflow internals change, this may break.

CW$self->evaluate_condition( CW$WORKFLOW, CW$CONDITION_NAME )

The child object class that subclasses this object calls this method to evaluate a nested condition.

If the condition name starts with an ’!’, the result of the condition is negated. Note that a side-effect of this is that the return value of the nested condition is ignored. Only the negated boolean-ness is preserved.

This does implement a trick that is not a convention in the underlying Workflow library. By default, workflow conditions throw an error when the condition is false and just return when the condition is true. To allow for counting the true conditions, we also look at the return value here. If a condition returns zero or an undefined value, but did not throw an exception, we consider it to be ’1’. Otherwise, we consider it to be the value returned.


See Workflow


This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Search for    or go to Top of page |  Section 3 |  Main Index

perl v5.20.3 WORKFLOW::CONDITION::NESTED (3) 2016-04-03

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.