Conditional Logic Macro Function -------------------------------- Conditional logic in macros is supported by the ``fn.conditional_logic`` function that takes two parameters: * the name of an instance of the ``data/ConditionalLogic`` data model * a value that serves as input to ``data/ConditionalLogic`` the data model. The namespaces that can be used as ``left_expression`` values in the data model can depend on the reference to the data model in a Provisioning Workflow. The namespaces - that can also be referenced in full - include: * ``{{self}}`` * ``{{previous}}`` * ``{{input}}`` * ``{{cft}}`` * ``{{pwf}}`` Consider the following example ``data/ConditionalLogic`` data model called "Is_SLC_Allowed": :: "conditions": [ { "unary_operator": "NOT", "right_expression": "{{ logic.DATA }}", "conditional_operator": "AND", "condition": "contains", "left_expression": "{{ pwf.SLCS }}" }, { "unary_operator": "NOT", "right_expression": "{{ input.CURRENT_SLC }}", "conditional_operator": "AND", "condition": "containsStartOf", "left_expression": "{{ logic.DATA }}" }, { "right_expression": "{{ input.CURRENT_SLC }}", "condition": "containsStartsWith", "unary_operator": "NOT", "left_expression": "{{ logic.DATA }}" } ] Also suppose the Provisioning Workflow for this example has a list variable ``SLCS`` and receives an ``input.CURRENT_SLC`` value. Furthermore, during the call of the ``fn.conditional_logic`` function in the Provisioning Workflow, it receives a *scalar* value as an argument, for example: ``{{ fn.conditional_logic Is_SLC_Allowed,128 }`` * The scalar value reference ``{{ logic.DATA }}`` can be ommitted from either ``left_expression`` or ``right_expression``. Its reference is then assumed. * The input value is referenced as ``{{ input.CURRENT_SLC }}`` * The list that is the Provisioning Workflow variable, is ``{{ pwf.SLCS }}`` As another example, consider a ``data/ConditionalLogic`` model called "TestData" with three conditions: :: "conditions": [ { "conditional_operator": "OR", "left_expression": "{{input.DATA}}", "condition": "contains", "right_expression": "AAA" }, { "conditional_operator": "AND", "left_expression": "{{input.DATA}}", "condition": "contains", "right_expression": "BBB" }, { "left_expression": "{{input.DATA}}", "condition": "contains", "right_expression": "CCC", "unary_operator": "NOT" } The following function checks if a received input value "AAAaaaBBBaaaCCc" fulfills the condition: contains "AAA" OR "BBB" AND NOT "CCC", as in the macro test using a scalar value: ``{{ fn.conditional_logic TestData,AAaaaBBBaaaCCc }}`` The condition resolves to true. Finally in the following example, the conditional function is used as a condition in a Provisioning Workflow. The Data Model instance of data/ConditionalLogic called "Does Newland Exist" tests a single string matching condition: :: "data": { "conditions": [ { "right_expression": "Newland", "condition": "isexactly", "left_expression": "{{pwf.EXIST}}" } ], "name": "Does Newland Exist" } The Provisioning Workflow step to apply a Configuration Template if the condition is false. So the step is carried out only if there is not already a ``country_name`` called "Newland". :: "workflow": [ { "templates": [ { "conditions": [ { "condition": "(( fn.conditional_logic \"Does Newland Exist\" == False ))" } ], "template": "CFT1" } ], "entity": "data/Countries", "set_list": [ { "set_var_name": "EXIST", "set_var_value": "{{data.Countries.country_name|country_name:Newland}}" } ], "method": "add", "entity_type": "model" }