Advanced functions

The CASE/WHEN/THEN construct

If you need an expression to return different values depending on the input, you can use the CASE-WHEN-THEN construct.

The example below returns the text "zero" if the value of variable x is 0, the text "negative" if x is less than 0 and the text "positive" in all other cases.

case when x = 0 then "zero" when x < 0 then "negative" else "positive" end

The IN operators

The IN operator allows you to compare one left hand side value (L) with several right hand side values (R) at once. The result of the statement is TRUE if L is equal to any of the values in R.

firstName in ('James', 'Richard', 'Danny')

Truth of Non-Boolean values

FlowScript is fairly permissive when it comes to evaluating the truth of non-Boolean values. The following non-Boolean values count as true:

  • All numbers except 0

  • All strings except the empty string, "0" and "FALSE" (including all upper- and lowercase variants)

The JSON module

The JSON module can be used to transform Flow variables (records or tables) into JSON data and vice versa.

JSON.Decode(data)

The generic Decode function takes a JSON record (as text) and decodes it as the specified type (T). Fields which are present in the type (T) but do not have a corresponding entry in the JSON data will be created with the default value. It is therefore recommended to specify default values for all type structures which will be decoded from JSON.

let data = '{"name" : "Richard", "age" : 28}';
type personType = [name = 'Not specified', age = 0, occupation = 'Unemployed'];

let myPerson = JSON.Decode<personType>(data); // Person will have occupation 'Unemployed' since the key is not present in the json data

return myPerson.age; // Returns 28

JSON.DecodeTable

The generic DecodeTable function takes a JSON table (as text) and decodes it as a table of the specified type (T). Columns which are present in the type (T) but do not have corresponding entries in the JSON data will be created with the default value. It is therefore recommended to specify default values for all type structures which will be decoded from JSON.

let data = '[{"name" : "Richard", "age" : 28}, {"name" : "Samantha", "age" : 21, "occupation" : "Programmer" }]';
type personType = [name = 'Not specified', age = 0, occupation = 'Unemployed'];

let persons = JSON.DecodeTable<personType>(data);

return persons.First().name; // Will return "Richard"

JSON.Encode

The generic Encode function takes any FlowScript record variable and encodes it as JSON.

let animal = [name: 'Cat', numberOfLegs: 4];

return JSON.Encode(animal); // Will return '{"name" : "Cat", "numberOfLegs" : 4.0 }'

JSON.EncodeTable

The generic Encode function takes any FlowScript table variable and encodes it as JSON.

let animals = [name: 'Cat', numberOfLegs: 4] & [name: 'Millipede', numberOfLegs: 1000];

return JSON.EncodeTable(animals); // Will return '[{"name" : "Cat", "numberOfLegs" : 4.0}, {"name" : "Millipede", "numberOfLegs" : 1000.0 }]'

Last updated