Workflow dynamic content
Important
This feature is currently in preview. The Supplemental Terms of Use for Microsoft Azure Previews include additional legal terms that apply to Azure features that are in beta, in preview, or otherwise not yet released into general availability.
You can use dynamic content inside Microsoft Purview workflows to associate certain variables in the workflow or add other expressions to process these values.
When you add dynamic content to your workflows, you're building expressions from provided building blocks that reference and process information in your workflow so you can get the values you need in real-time.
In the dynamic content menu, the currently available options are:
- Built-in variables - variables that represent values coming to the workflow from the items that triggered it
- Expressions - formulas built from functions and variables that can process values in-workflow.
Built-in variables
Currently, the following variables are available for a workflow connector in Microsoft Purview:
Prerequisite connector | Built-in variable | Functionality | Type | Possible values |
---|---|---|---|---|
When data access request is submitted When asset update request is submitted |
Workflow.Requestor | The ID of the requestor of the workflow | string | |
Asset.Name | The name of the asset | string | ||
Asset.Description | The description of the asset | string or null | ||
Asset.Type | The type of the asset | string | ||
Asset.Fully Qualified Name | The fully qualified name of the asset | string | ||
Asset.Owner | The IDs of the data owners of the asset | array of strings | ||
Asset.Classification | The display names of classifications of the asset | array of strings | ||
Asset.Schema.Classification | The display names of classifications applied to a column in the asset schema | array of strings | ||
Asset.Is Certified | The indicator of whether the asset meets your organization's quality standards and can be regarded as reliable | boolean | true or false |
|
When data access request is submitted | Workflow.Request Recipient | The ID of the request recipient of the workflow | string | |
Start and wait for an approval | Approval.Outcome | The outcome of the approval | string | 'Approved' or 'Rejected' |
Approval.Assigned To | The IDs of the approvers | array of strings | ||
Approval.Comments | The names of the approvers and their comments | string | ||
Check data source registration for data use governance | Data Use Governance | The result of the data use governance check | boolean | true or false |
When term creation request is submitted | Workflow.Requestor | The ID of the requestor of the workflow | string | |
Term.Name | The name of the term | string | ||
Term.Formal Name | The formal name of the term | string | ||
Term.Definition | The definition of the term | string | ||
Term.Experts | The IDs of the experts of the term | array of strings | ||
Term.Stewards | The IDs of the stewards of the term | array of strings | ||
Term.Parent.Name | The name of parent term if exists | string | ||
Term.Parent.Formal Name | The formal name of parent term if exists | string | ||
When term update request is submitted When term deletion request is submitted |
Workflow.Requestor | The requestor of the workflow | string | |
Term.Name | The name of the term | string | ||
Term.Formal Name | The formal name of the term | string | ||
Term.Definition | The definition of the term | string or null | ||
Term.Experts | The IDs of the experts of the term | array of strings | ||
Term.Stewards | The IDs of the stewards of the term | array of strings | ||
Term.Parent.Name | The name of parent term if exists | string | ||
Term.Parent.Formal Name | The formal name of parent term if exists | string | ||
Term.Created By | The ID of the creator of the term | string | ||
Term.Last Updated By | The ID of the last updater of the term | string | ||
When term import request is submitted | Workflow.Requestor | The ID of the requestor of the workflow | string | |
Import File.Name | The name of the file to import | string | ||
Http | Http.Body | HTTP response body | object or string | |
Http.Headers | HTTP response headers | object | ||
Http.Status Code | HTTP status code | string | ||
Apply to each | Item | The current item of Apply to Each action | Any | |
Until | Index | The current iteration index of Until action | integer | |
Create record Delete record Get record Update record |
Result | The result of ServiceNow action | object | |
Get record types List records |
Result | The result of ServiceNow action | array of objects |
Expressions
Workflow definitions in Microsoft Purview allow you to use functions in your expressions to process values in your workflows.
To find functions based on their general purpose, review the following tables. Or, for detailed information about each function, see the alphabetical list.
When you're building a workflow and want to add a function to your expressions, follow these steps:
- Select the value you're going to edit.
- Select the Add dynamic content button that appears underneath the textbox.
- Select the Expressions tab in the dynamic content window and scroll to select your value.
- Update your expression and select OK to add it.
Considerations
Function parameters are evaluated from left to right.
Functions that appear inline with plain text require enclosing curly braces ({}) to use the expression's interpolated format instead. This format helps avoid parsing problems. If your function expression doesn't appear inline with plain text, no curly braces are necessary.
The following example shows the correct and incorrect syntax:
Correct:
"<text>/@{<function-name>('<parameter-name>')}/<text>"
Incorrect:
"<text>/@<function-name>('<parameter-name>')/<text>"
Functions may have overloads, which are multiple versions of a function with the same name but different ways of doing a task, depending on the input you give them.
The following sections organize functions based on their general purpose, or you can browse these functions in alphabetical order.
String functions
To work with strings, you can use these string functions and also some collection functions. String functions work only on strings.
String function | Task |
---|---|
endsWith | Check whether a string ends with the specified substring. |
startsWith | Check whether a string starts with a specific substring. |
Collection functions
To work with collections, generally arrays, strings, and sometimes, dictionaries, you can use these collection functions.
Collection function | Task |
---|---|
contains | Check whether a collection has a specific item. |
length | Return the number of items in a collection, or the length of a string. |
Logical comparison functions
To work with conditions, compare values and expression results, or evaluate various kinds of logic, you can use these logical comparison functions. For the full reference about each function, see the alphabetical list.
Logical comparison function | Task |
---|---|
not | Check whether an expression is false. Return true when the expression is false, or return false when true. |
and | Check whether all expressions are true. Return true when all expressions are true, or return false when at least one expression is false. |
or | Check whether at least one expression is true. Return true when at least one expression is true, or return false when all are false. |
equals | Check whether both values are equivalent. |
greater | Check whether the first value is greater than the second value. |
greaterOrEquals | Check whether the first value is greater than or equal to the second value. |
less | Check whether the first value is less than the second value. |
lessOrEquals | Check whether the first value is less than or equal to the second value. |
User functions
To work with users, their relationships with other users and groups, and the resources they access for example their mails, calendars, files, administrative roles, group memberships. For the full reference about each function, see the alphabetical list.
User function | Task |
---|---|
getUserName | Get the name of the user. |
getManager | Get the ID of the user's manager. |
memberOfGroup | Check whether the user is a member of the group. |
Conversion functions
To change a value's type or format, you can use these conversion functions. For the full reference about each function, see the alphabetical list.
Conversion function | Task |
---|---|
createArray | Return an array from any number of inputs. |
createObject | Return an empty object. |
string | Return the string version for a value. |
int | Try to convert the input value into an integer number. |
float | Try to convert the input value into a float number.. |
bool | Try to convert the input value into a boolean value. |
object | Try to convert the input value into an object. |
array | Try to convert the input value into an array. |
nullOrElse | Give a default value to a nullable value. |
All functions - alphabetical list
and
Check whether all expressions are true. Return true when all expressions are true, or return false when at least one expression is false.
Parameter | Type | Description |
---|---|---|
value | boolean | The first expression to check |
values... | boolean | The rest expressions to check |
Return value type | Description |
---|---|
boolean | Return true when all expressions are true. Return false when at least one expression is false. |
Examples
These examples check whether the specified expressions are false:
and(equals(1, 1), equals(2, 2))
and(equals(1, 1), equals(1, 2))
and(equals(1, 2))
And returns these results:
- First example: Both expressions are true, so returns
true
. - Second example: One expression is false, so returns
false
. - Third example: The expression is false, so returns
false
.
array
This function tries to convert the input value into an array. It is used to cast the value from a broader type to array. To create an array from items, see createArray.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
array | The converted array value |
Example
This example asserts Item of an "Apply to each" action to be of array type:
array(items('Appy to each'))
bool
This function tries to convert the input value into a boolean value. It is used to cast the value from a broader type to boolean.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
boolean | The converted boolean value |
Example
This example asserts Item of an "Apply to each" action to be of boolean type:
bool(items('Appy to each'))
contains
Check whether a collection has a specific item. Return true when the item is found, or return false when not found.
Overload 1: A string to find a substring
This overload is case-sensitive.
Parameter | Type | Description |
---|---|---|
collection | string | The string to check |
value | string | The substring to find |
Return value type | Description |
---|---|
boolean | Return true when the substring is found. Return false when not found. |
Overload 2: A array to find a value
Parameter | Type | Description |
---|---|---|
collection | array | The collection to check |
value | Any | The item to find |
Return value type | Description |
---|---|
boolean | Return true when the item is found. Return false when not found. |
Example 1
This example checks the string "hello world" for
the substring "world" and returns true
:
contains('hello world', 'world')
Example 2
This example checks the variable Asset.Owner for the item equal to the variable Workflow.Requestor:
contains(runInput()['asset']['dataOwner'], runInput()['requestor'])
createArray
Return an array from any number of inputs. This function doesn't require the input values to be of a same type.
Parameter | Type | Description |
---|---|---|
values... | Any | Values to create the array. |
Return value type | Description |
---|---|
array | The array created from all the input items |
Examples
These examples create an array from inputs:
createArray('h', 'e', 'l', 'l', 'o')
createArray(true, null)
createArray()
createObject
Return an empty object.
Return value type | Description |
---|---|
object | An empty object |
Example
This example creates an array from inputs, and returns {}.
createObject()
endsWith
Check whether a string ends with a specific substring. Return true when the substring is found, or return false when not found. This function is case-sensitive.
Parameter | Type | Description |
---|---|---|
text | string | The string to check |
searchText | string | The ending substring to find |
Return value type | Description |
---|---|
boolean | Return true when the ending substring is found. Return false when not found. |
Example 1
This example checks whether the "hello world" string ends with the "world" string:
endsWith('hello world', 'world')
And returns this result: true
Example 2
This example checks whether the "hello world" string ends with the "universe" string:
endsWith('hello world', 'universe')
And returns this result: false
equals
Check whether both values, expressions, or objects are equivalent. Return true when both are equivalent, or return false when they're not equivalent.
Parameter | Type | Description |
---|---|---|
value | Any | The values, expressions, or objects to compare |
compareTo | Any | The comparison values, expressions, or objects |
Return value type | Description |
---|---|
boolean | Return true when both are equivalent. Return false when not equivalent. |
Examples
These examples check whether the specified inputs are equivalent.
equals(true, 1)
equals('abc', 'abcd')
And returns these results:
- First example: Both values are equivalent, so the function returns
true
. - Second example: Both values aren't equivalent, so the function returns
false
.
float
This function tries to convert the input value into a float number. It is used to cast the value from a broader type to float.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
float | The converted float value |
Example
This example asserts Item of an "Apply to each" action to be of float type:
float(items('Appy to each'))
getManager
Get the ID of the user's manager in Microsoft Entra ID.
Overload 1: Get for a single user
Parameter | Type | Description |
---|---|---|
userId | string | The ID of the input user |
Return value type | Description |
---|---|
string or null | The ID of the input user's manager or null if not exist |
Overload 2: Get for multiple users
Parameter | Type | Description |
---|---|---|
userId | array | The IDs of the input users |
Return value type | Description |
---|---|
array | The union of IDs of the input users' managers |
Examples
These examples get the manager(s) of the input user(s):
getManager(runInput()['requestor'])
getManager(runInput()['term']['stewards'])
- First example: The input parameter is a string, so returns the ID of the manager of Workflow.Requestor
- Second example: the input parameter is an array, so returns the union set of IDs of managers of Term.Stewards.
getUserName
Get the name of the user in Microsoft Entra ID.
Overload 1: Get for a single user
Parameter | Type | Description |
---|---|---|
userId | string | The ID of the input user |
Return value type | Description |
---|---|
string | The name of the input user |
Overload 2: Get for multiple users
Parameter | Type | Description |
---|---|---|
userId | array | The IDs of the input users |
Return value type | Description |
---|---|
array | The names of the input users |
Examples
These examples get the name(s) of the input user(s):
getUserName(runInput()['requestor'])
getUserName(runInput()['term']['stewards'])
- First example: The input parameter is a string, so returns the name of Workflow.Requestor
- Second example: The input parameter is an array, so returns an array of names of Term.Stewards.
greater
Check whether the first value is greater than the second value. Return true when the first value is more, or return false when less.
Overload 1: Compare numbers
Parameter | Type | Description |
---|---|---|
value | integer or float | The first value to check whether greater than the second value |
compareTo | integer or float | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is greater than the second value. Return false when the first value is equal to or less than the second value. |
Overload 2: Compare strings
Parameter | Type | Description |
---|---|---|
value | string | The first value to check whether greater than the second value |
compareTo | string | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is greater than the second value. Return false when the first value is equal to or less than the second value. |
Examples
These examples check whether the first value is greater than the second value:
greater(10, 5)
greater('apple', 'banana')
And return these results:
- First example:
true
- Second example:
false
greaterOrEquals
Check whether the first value is greater than or equal to the second value. Return true when the first value is greater or equal, or return false when the first value is less.
Overload 1: Compare numbers
Parameter | Type | Description |
---|---|---|
value | integer or float | The first value to check whether greater than or equal to the second value |
compareTo | integer or float | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is greater than or equal to the second value. Return false when the first value is less than the second value. |
Overload 2: Compare strings
Parameter | Type | Description |
---|---|---|
value | string | The first value to check whether greater than or equal to the second value |
compareTo | string | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is greater than or equal to the second value. Return false when the first value is less than the second value. |
Examples
These examples check whether the first value is greater or equal than the second value:
greaterOrEquals(5, 5)
greaterOrEquals('apple', 'banana')
And return these results:
- First example:
true
- Second example:
false
int
This function tries to convert the input value into an integer number. It is used to cast the value from a broader type to integer.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
integer | The converted integer value |
Example
This example asserts Item of an "Apply to each" action to be of integer type:
int(items('Appy to each'))
length
Return the number of items in a collection, or the length of a string.
Parameter | Type | Description |
---|---|---|
value | string or array | The string or the collection with the items to count |
Return value type | Description |
---|---|
boolean | The number of items in the collection or the length of the string |
Examples
These examples count the number of items in these collections:
length('abcd')
length(createArray(0, 1, 2, 3))
And both return this result: 4
less
Check whether the first value is less than the second value. Return true when the first value is less, or return false when the first value is more.
Overload 1: Compare numbers
Parameter | Type | Description |
---|---|---|
value | integer or float | The first value to check whether less than the second value |
compareTo | integer or float | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is less than the second value. Return false when the first value is equal to or greater than the second value. |
Overload 2: Compare strings
Parameter | Type | Description |
---|---|---|
value | string | The first value to check whether greater than the second value |
compareTo | string | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is less than the second value. Return false when the first value is equal to or greater than the second value. |
Examples
These examples check whether the first value is less than the second value.
less(5, 10)
less('banana', 'apple')
And return these results:
- First example:
true
- Second example:
false
lessOrEquals
Check whether the first value is less than or equal to the second value. Return true when the first value is less than or equal, or return false when the first value is more.
Overload 1: Compare numbers
Parameter | Type | Description |
---|---|---|
value | integer or float | The first value to check whether less than or equal to the second value |
compareTo | integer or float | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is less than or equal to the second value. Return false when the first value is greater than the second value. |
Overload 2: Compare strings
Parameter | Type | Description |
---|---|---|
value | string | The first value to check whether less than or equal to the second value |
compareTo | string | The comparison value |
Return value type | Description |
---|---|
boolean | Return true when the first value is less than or equal to the second value. Return false when the first value is greater than the second value. |
Examples
These examples check whether the first value is less or equal than the second value.
lessOrEquals(10, 10)
lessOrEquals('apply', 'apple')
And return these results:
- First example:
true
- Second example:
false
memberOfGroup
Check whether the user is a member of the group in Microsoft Entra ID. Group ID can be found on Microsoft Entra group management page.
Parameter | Type | Description |
---|---|---|
userId | string | The ID of the input user |
groupId | string | The ID of the group to check |
Return value type | Description |
---|---|
boolean | Return true when the user is a member of the group. Return false when the user is not a member of the group or the group doesn't exist. |
Example
This example check whether Workflow.Requestor is a member of the specified group:
memberOfGroup(runInput()['requestor'], '00000000-0000-0000-0000-111111111111')
not
Check whether an expression is false. Return true when the expression is false, or return false when true.
Parameter | Type | Description |
---|---|---|
value | boolean | The expression to check |
Return value type | Description |
---|---|
boolean | Return true when the expression is false. Return false when the expression is true. |
Examples
These examples check whether the specified expressions are false:
not(equals(1, 2))
not(equals(1, 1))
And return these results:
- First example: The expression is false, so the function returns
true
. - Second example: The expression is true, so the function returns
false
.
nullOrElse
Give a default value to a nullable value. Return a non-nullable value.
Overload 1: String version
Parameter | Type | Description |
---|---|---|
value | string or null | The nullable value |
defaultValue | string | The fallback value |
Return value type | Description |
---|---|
string | Return the input value if it is not null. Return the default value if the input value is null. |
Overload 2: Integer version
Parameter | Type | Description |
---|---|---|
value | integer or null | The nullable value |
defaultValue | integer | The fallback value |
Return value type | Description |
---|---|
integer | Return the input value if it is not null. Return the default value if the input value is null. |
Overload 3: Float version
Parameter | Type | Description |
---|---|---|
value | float or null | The nullable value |
defaultValue | float | The fallback value |
Return value type | Description |
---|---|
float | Return the input value if it is not null. Return the default value if the input value is null. |
Overload 4: Boolean version
Parameter | Type | Description |
---|---|---|
value | boolean or null | The nullable value |
defaultValue | boolean | The fallback value |
Return value type | Description |
---|---|
boolean | Return the input value if it is not null. Return the default value if the input value is null. |
Overload 5: Array version
Parameter | Type | Description |
---|---|---|
value | array or null | The nullable value |
defaultValue | array | The fallback value |
Return value type | Description |
---|---|
array | Return the input value if it is not null. Return the default value if the input value is null. |
Overload 6: Object version
Parameter | Type | Description |
---|---|---|
value | object or null | The nullable value |
defaultValue | object | The fallback value |
Return value type | Description |
---|---|
object | Return the input value if it is not null. Return the default value if the input value is null. |
Example
This example gives the nullable variable Term.Definition a default value 'Empty'
:
nullOrElse(runInput()['term']['definition'], 'Empty')
object
This function tries to convert the input value into an object value. It is used to cast the value from a broader type to object.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
boolean | The converted object value |
Example
This example asserts Item of an "Apply to each" action to be of object type:
object(items('Appy to each'))
or
Check whether at least one expression is true. Return true when at least one expression is true, or return false when all are false.
Parameter | Type | Description |
---|---|---|
value | boolean | The first expression to check |
values... | boolean | The rest expressions to check |
Return value type | Description |
---|---|
boolean | Return true when at least one expression is true. Return false when all expressions are false. |
Examples
These examples check whether at least one expression is true:
or(equals(1, 1), equals(1, 2))
or(equals(1, 2), equals(1, 3))
or(equals(1, 2))
And return these results:
- First example: At least one expression is true, so the function returns
true
. - Second example: Both expressions are false, so the function returns
false
. - Third example: The expression is false, so the function returns
false
.
startsWith
Check whether a string starts with a specific substring. Return true when the substring is found, or return false when not found. This function is case-sensitive.
Parameter | Type | Description |
---|---|---|
text | string | The string to check |
searchText | string | The starting substring to find |
Return value type | Description |
---|---|
boolean | Return true when the starting substring is found. Return false when not found. |
Example 1
This example checks whether the "hello world" string starts with the "hello" substring:
startsWith('hello world', 'hello')
And returns this result: true
Example 2
This example checks whether the "hello world" string starts with the "greetings" substring:
startsWith('hello world', 'greetings')
And returns this result: false
string
This function returns the string version of the value.
Parameter | Type | Description |
---|---|---|
value | Any | The value to convert |
Return value type | Description |
---|---|
string | The string version for the specified value. If the value parameter is null, this value is returned as an empty string ("") value. |
Examples
These examples convert the input value into a string:
string('abc')
string(true)
string(createArray())
And return these results:
- First example: The input value is a string, so returns an identity value
'abc'
. - Second example: String version of boolean values are capitalized, so the function returns
'True'
. - Third example: Arrays or objects are converted to JSON form, so the function returns
'[]'
.
Next steps
For more information about workflows, see these articles: