Triggers are where the active part of patterns begin. Triggers define the conditions in which the body of the pattern are evaluated. From the point of view of pattern authors, conditions are based on data events - creation or modification of nodes in the datastore. Triggers take the form:
In a simple example:
The name assigned to the trigger is made available as a variable in the pattern body.
Trigger conditions consist of a subset of the more general
where clauses available in searches (described later in the section on search expressions). The only operations supported are simple attribute comparisons of the form:
and combinations of such comparisons using
The only operators available are:
Regular expression match
Attribute existence check – does not take an expression.
Note that to avoid "greedy" triggers that trigger on almost all data,
not expressions are not permitted in triggers.
Expressions must be literal values, constants, or expressions based entirely on literal values and constants.
By default, patterns only trigger when a node is created. In some circumstances, it may be necessary to only trigger when a node is modified, not when it is created. It may also be necessary to trigger if a node is superseded / destroyed.
In Foundation 7.1 and later, patterns can trigger when a node is confirmed to exist, even if it is not modified. Such a pattern triggers when a pattern confirms the existence of a node using one of the Model node assertion functions and, for Host nodes, when a Host is confirmed to exist during a scan.
Triggers can specify a comma-separated set of "change kinds". The kinds are
confirmed (in 7.1 and later),
destroyed (in 7.1 and later – in 7.0, the same trigger kind is specified as
The pattern will only trigger when a matching SoftwareInstance is confirmed to exist, not when a matching SoftwareInstance is first created.
More than one change kind can be selected by separating them with commas, e.g.:
The default change kind is
When triggering on a node being
modified, great care must be taken if the triggering node is modified in the pattern, since the modification inside the pattern causes the pattern to trigger again.
To trigger on relationships rather than nodes, simply use a prefix of
relationship to the kind in the trigger:
A trigger on a relationship can of course include a
Note that patterns normally only trigger when data in the datastore changes (or is confirmed by another pattern for the
confirmed trigger) – if nodes matching a pattern's trigger conditions already exist at the time the pattern is activated, the pattern will not execute for those nodes. Patterns can be executed against existing nodes using Manual pattern execution.