### The TaskJuggler User Manual

Project Management beyond Gantt Chart Drawing

<< loadunit << | Table Of Contents | >> logicalflagexpression >>

Keyword | logicalexpression

Purpose

A logical expression is a combination of operands and mathematical operations. The final result of a logical expression is always true or false. Logical expressions are used the reduce the properties in a report to a certain subset or to select alternatives for the cell content of a table. When the logical expression is used with attributes like hidetask or hideresource and evaluates to true for a certain property, this property is hidden or rolled-up in the report.

Operands can be previously declared flags, built-in functions, property attributes (specified as scenario.attribute) or another logical expression. When you combine logical operations to a more complex expression, the operators are evaluated from left to right. `a | b & c` is identical to `(a | b) & c`. It's highly recommended that you always use brackets to control the evaluation sequence. Currently, TaskJuggler does not support the concept of operator precedence or right-left associativity. This may change in the future.

An operand can also be just a number. 0 evaluates to false, all other numbers to true. The logical expression can also be the special constants `@all` or `@none`. The first always evaluates to true, the latter to false.

Date attributes needs special attention. Attributes like maxend can be undefined. To use such an attribute in a comparison, you need to test for the validity first. E. g. to compare the end date of the `plan` scenario with the `maxend` value use `isvalid(plan.maxend) & (plan.end > plan.maxend)`. The `&` and `|` operators are lazy. If the result is already known after evaluation of the first operand, the second operand will not be evaluated any more.

Syntax | `@ (all | none)`
Arguments | none
Context | Global scope
See also | functions

    taskreport "LeaveTasks" {
      hidetask isleaf()
      sorttasks id.up # not 'tree' to really hide parent tasks
    }

    taskreport "Overruns" {
      hidetask isvalid(plan.maxend) & (plan.end > plan.maxend)
    }

<< loadunit << | Table Of Contents | >> logicalflagexpression >>

Copyright (c) 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 by Chris Schlaeger <cs@taskjuggler.org>.TaskJuggler is a trademark of Chris Schlaeger.