Definition Conditionality
Within the app definition, you can create conditional statements and matchers that can return data or evaluate boolean conditions to determine the outcome.
Matchers
A matcher is an object definition that instructs the system to match a field value to another field, to a custom literal or to evaluate a conditional. The matcher always returns a value - this is the value that will be used by the schema.
The example below is a matcher created with a conditional. The conditional checks if the Field Day_Type__c (which is a picklist with Morning and Afternoon options) matches any value and if it does, it converts the select type to a string literal - i.e. Morning becomes AM and Afternoon becomes PM. In addition to the "literal" return type, you can also define a "targetField" return type - this will return the value of the field path defined.
//Example 1
"match": {
"field": "Day_Type__c",
"equals": {
"Morning": {
"literal": "AM" //Returns the string "AM"
},
"Afternoon": {
"literal": "PM"
},
},
"otherwise": {
"literal": null
}
}
//Example 2
"match": {
"field": "Day_Type__c",
"formatter": "date",
"equals": {
"Morning": {
"targetField": "Start_Date__c" //Returns the field value from Start_Date__c
},
"Afternoon": {
"targetField": "Placement__r.Start_Date__c"
}
},
"otherwise": {
"literal": null
}
}
The example below is a matcher created to return the value of a specific field path.
"match": {
"field": "b3s__Contact__r.Name"
}
The fingerprint for a matcher is as follows
- field - this is the record field to evaluate
- formatter - optional addition - you can specify the following formatters: Date, Time, Date Time
- evaluation (equals) - this is the evaluation operator - defaulted to "equals"
- otherwise - optional "then that" block. Will be executed when neither of the values were matched in the "equals" object.
Selectors
Selectors are if-this-then-that conditional objects that control the flow of the operations. In some instances, a group of selectors can be added, but generally, a single selector has the following footprint:
- field - the field is the field path, the value of which will be used for the comparison
- operator - the operator can be 'equals', 'isnull', 'notequals' and 'in' ("in" checks if the field value is in the selector value)
- value/ targetField - value is the static value for comparison - a string, boolean or array; targetField is the dynamic value for comparison (i.e. check against another field)
//Example 1
{
"field": "Day_Type__c", //Schedulable object field
"operator": "equals", //Operator
"value": "Morning" //A literal value
}
//Example 2
{
"field": "Day_Type__c",
"operator": "equals",
"targetField": "Request__r.Day_Type__c" //Matching another field on the same object record
}
You can also assign multiple selectors like so:
//Example 1
{
"required": "condition": {
"allOrSome": "all", //all or some
"selectors": [
{
"field": "Id",
"operator": "isnull",
"value": false,
},
],
},
}
//Example 2
"condition": {
"allOrSome": "all",
"selectors": [
{
"field": "Day_Type__c",
"operator": "in",
"value": ["Morning", "Evening"]
},
{
"field": "Cancelled__c",
"operator": "equals",
"value": true
},
{
"field": "Contact__c",
"operator": "isnull",
"value": false
}
]
}
Multiple selectors can be chained via a conditional object (also called conditional). The conditional object has two properties: allOrSome (which accepts the values all or some) and an array of selectors. the allOrSome attribute controls how the selectors are executed. Here's the footprint for defining a multi-selector conditional:
- allOrSome - all will equivalate to "AND" conditional and some will equivalate to "OR" conditional across the array of selectors.
- selectors - an array of selectors
The "operator" can be set to:
- 'equals' checks for equality
- 'isnull' - checks if the value is null
- 'notequals' - checks of inequality
- 'in' - checks if the value is in a given array