Conditional steps
Parts of a Flow process can be evaluated conditionally, depending on the value of a predicate, using
an if
step. It has the following properties:
if
: the predicate,then
: steps that are evaluated in case the predicate is true, andelse
: steps that are evaluated in case the predicate is false. It is optional.
{
"type": "if",
"if": {
"type": "form_value",
"form": "basic_form",
"participant": "alice",
"scope": "#/properties/optional"
},
"then": {
"type": "sign",
"participant": "alice",
"documents": ["doc1"],
},
"else": {
"type": "sign",
"participant": "alice",
"documents": ["doc2"],
},
}
Predicate
There are three types of predicates: one that has a constant value and two that use results of previously filled-in forms.
Constant value
Constant value predicate is useful mainly for testing. Its value
field takes the constant boolean value.
For example, to always evaluate the then
branch use:
{
"type": "constant",
"value": true
}
Form field has a value
First of the two form-related predicates has a form_value
type. It uses a value of a form check-box
as the predicate. It takes a participant and a form reference and
a JSON Pointer to a boolean form input field.
For example, the following predicate uses the value of an optional
check-box in a form labeled basic_form
as submitted by the participant alice
:
{
"type": "form_value",
"form": "basic_form",
"participant": "alice",
"scope": "#/properties/optional"
}
Form matches a schema
The last predicate type, form_schema_match
, takes a form reference and a JSON Schema
and checks that the submitted data matches the schema.
For example, the following predicate checks that the participant alice
filled-in Correct answer
in
the question
input field of the basic_form
form:
{
"type": "form_schema_match",
"form": "basic_form",
"participant": "alice",
"schema": {
"type": "object",
"const": {
"question": "Correct answer"
}
}
}