Branch Step children - Mutually Exclusive?

When using Evaluate Labels = true, and using expressions, I am wishing to have two child steps:

%value% > 10: Do A
%value% > 5: Do B

So that A will occur if value is > 10 and B when value is > 5 (but < 10)

HOWEVER, the User Documentation states (DeveloperUsersGuide.pdf, p.170):
“Important! The expressions you create for the children of a BRANCH step need to be mutually exclusive (only one condition should evaluate to true at run time).”

Can anyone tell why this is so? Or is it just plain wrong?

Kind Regards,
Robin McKenzie

A BRANCH is similar to a CASE statement: the first option that evaluates to true will be chosen and no further evaluation will occur. So you would need to add the condition %value% < 10 to child step B to make it exclusive.

Thanks for your reply. If it’s like a CASE statement, then the expressions need not be mutually exclusive, and the documentation is wrong, yes?

Is there definitely no subtle reason why they must be mutually exclusive? If they are evaluated in order and only one evaluates to true, then I can’t see any reason why they should be. However, the fact that it is in the documentation as IMPORTANT! is a little worrying - why would they have included that?

It’s “similar” to a CASE statement but apparently there is this difference. I suspect that they require mutually exclusive conditions because the order in which the conditions are evaluated may be unpredictable, even if they appear to be sequential in the editor. Someone with more knowledge of the inner workings of FLOW might be able to comment here. Is there a reason you don’t want to make the conditions exclusive?

On a related note, is the selection of a $null or $default case affected by the order in which it is placed inside the Branch statement when evaluate labels = “false”?


That’s an interesting question. I did a quick test and the answer appears to be no. The correct path was chosen no matter where I placed the $default or $null cases, even if I placed $default in front of the path that should have been (and was) selected.


no matter what , default and null steps are evaluated last.
and the step b in the above branch should have a regular expression
%value%>5 & %value%<10
then it works fine.
but logically every step in the branch should be mutually exclusive.if u give expressions such that two steps evaluates to true for the same value .
then just the first one which ever evaluates to true(usually first in sequence) is taken and the flow comes out of branch .
thats what i think the reasoning for the branch step .

Just to be clear %value%>5 & %value%<10 is not a regular expression although it is a logical expression.

Did you read this in the docs, confirm it by testing or is this just your opinion?

I guess it always helps to RTFM. From the Developer 6.1 user’s guide: “Developer always evaluates the default step last. The default step does not need to be the last child of the BRANCH step.” The null step does not appear to have any such special status and the condition is evaluated like any other, based on whether the switch variable is present in the pipeline or has been set to null.