Definition Conditionality

From 3B Knowledge
Jump to navigation Jump to search

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