Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
The smallest building block in a flow. Typically a Control is represented by some kind of visual component together with data from some data source.
Two categories of controls are available:
Basic
Advanced.
Basic controls are comparable to simple HTML inputs, such as checkboxes.
Advanced controls are more like mini-applications with specific goals. For example, they could display a list of Entra-ID users or groups as the first step in a Flow.
Both types are implemented on the front-end using react-jsonschema-form.
All controls follow the same structure:
type: Defines what control to be used.
id: Unique identifier to the current flow. In subsequent pipe calls the id is sent to the pipe along with value(s) from the control and accessed in the piped using {{request.<id>}}
config: Block of control-specific configuration. Se each control for appropriate values.
data: Value to be injected in control.
ui: Any additional ui-related data sent to frontend, unfiltered. See https://rjsf-team.github.io/react-jsonschema-form/ UISchema for more information. Typically this is used for layout management.
schema: Any additional control-related data not available in current control implementation.
Data binding is typically done using "data" configuration for a control. Most likely date is set by using some template {{flow.givenName}}.
Not all controls rely on data. Read documentation for appropriate control.
Advanced controls are more like mini-applications with specific goals. For example, they could display a list of Entra-ID users or groups as the first step in a Flow.
Basic controls are comparable to simple HTML inputs, such as checkboxes.
An input field control, similar to an HTML input.
Below is a screenshot of the control. This is from a create step where an admin has added Clarke and Kent in two input controls. Email and Mobile number has no value yet.
Scenarions when the control can be used:
Like above when an admin creates a new object and needs to add data about the object. You can add data controllers to an inout control to verify correct syntax, an @ for email adress, no characters for an mobile number.
You like to display data about an object. You search an LDAP directory and display a user with data about the user. The input control can be in edit or read-only mode.
Markdown is a lightweight markup language that you can use to add formatting elements to a step.
Add one or several labels and/or descriptions text elements to a step. Example below shows a markdowns example, one label and one description.
The example can be added as one markdown or two separate markdowns.
Note. When using several markdowns in one step, make sure the id is unique.
Click following link for a number of examples on how to use markdown in a step. https://www.markdownguide.org/cheat-sheet/
A value picker component, that lets the user select a given value from a list.
The ValuePicker is often used as a drop-down list for admins to select predefined values from. See example below.
Properties for Input control
This is an example from a create step where values are to be added. Mail and mobile have checks for correct syntax.
This is an example from a create step where values are to be added from a session. In this scenario a user has logged in using Swedish BankID.
This is an example from a step where values are to be added from a previous step or from a pipe in a previous step.
The 'config.type' determines how the control is displayed in the view.
For the type 'string' the field can be validated before it is sent to the pipe or next step. The 'strict' validation is recommended as it blocks several common special characters not suitable for Pipe/Valve data handling. Postal is post address.
Markdown is a lightweight markup language that you can use to add formatting elements to a step.
This from a step where two lines of text, one heading and one paragraph with a line break between, using one markdown control.
This an example where three different markdowns are used in the same step. Note that each markdown need a unique id.
This an example with one markdown using lang-file to add data from a previous step. It combines string and variable data. For example. "You have selected Donald Duck." where Donald Duck is data from a previous step.
The top example is from a step. The below example is from a language file., en.json.
Click following link for a number of examples on how to use markdown in a step.
Use to find objects in data store, e.g. Active Directory. It performs searches using pipes and stores a selected value for next steps to consume.
Control type: Selector
To populate list of items in UI a pipe must be executed. List of items returned should at least contain properties defined in columns.
Data sent to pipe is:
search - containing user input if config -> search is set to true
columns - comma separated string of defined columns
Return data must be in a form of a list of items.
When pressing Select, data exposed to flow is found using key if control id. Value is item id returned from pipe
A value picker component, that lets the user select a given value from a list.
Update group membership for a selected user.
Use this control to manage groups for a selected user. Note. To select the user, which often is done in a previous step, use the control Selector.
type
Control implementation
N/A
id
Unique ID within the flow
N/A
data
Value to display from session or flow. {{{flow.attribute}}} {{{session.attribute}}}
N/A
config.required
Must have a value when leaving the step. true
/false
false
config.readonly
Open to edit by enduser. true/false
false
config.type
Type of input value. Valid JSON types are: string, number, integer, boolean.
"string"
schema.format
Validation of input data. Valid checks: strict, email, phone, postal. See below for more info.
N/A
type
Control implementation, must be Markdown
N/A
id
Unique ID within the flow
N/A
data
Text to display
N/A
pipe_id
Id of pipe searching for objects
Same as control id
columns
What columns to be displayed in UI.
N/A
submit_on_change
Should selection of an item move to next step. true
/false
true
search
Should user be able to enter custom search data.
false
readonly
Should control be readonly?
false
type
Control implementation. Must be ValuePicker
N/A
id
Unique ID within the flow
N/A
config.required
Must have a value when leaving the step. true
/false
false
config.readonly
Open to edit by enduser. true
/false
false
config.default_value
This value is selected per default
config.options
Select options (array of JSON objects).
N/A
config.options.title
An option title
N/A
config.options.value
An option value
N/A
Use to select one option from a list that is populated from the result of an LDAP query.
type
Must be ActiveDirectorySingleSelect
N/A
config.required
Must have a value when leaving the step. true
/false
false
config.readonly
Open to edit by enduser. true
/false
false
config.base_dn
Search base DN
config.scope
Search scope
config.attributes
Query these attributes
config.pre_filter
Display current value if present
config.filter
Query filter
config.display_key
This attribute is displayed to the user
config.value_key
This attribute is the selected value.
The search filter is a template that has access to all data that is available in the flow. Additionally, the template can use the parameter search_query
, that contains the user input.
The attributes defined by display_key
and value_key
are always queried.
Manage group members for a selected Active Directory group.
An LdapClient module deployed with matching name as defined in "namespace".
type
Must be
ActiveDirectoryGroupEditGroupMember
N/A
config.namespace
Identifier of LdapClient module to use
"default"
config.columns
List array with columns to display
["displayName", "mail", "mobile"]
config.base_dn
Search base DN.
"DC=company,DC=local"
config.scope
Search scope.
"SUB"
config.current_filter
Search filter. Used to fetch current members of the group.
N/A
config.available_filter
Search filter. Used to fetch available members of the group.
N/A
This control works in conjunction with LdapClient module. It must be installed.
Object array, "ad_pending_remove" - contains data on what members to remove from group.
Object array, "ad_pending_add" - contains data on what members to add to group.
Example data in finalize pipe:
ActiveDirectoryAddGroupToMembers
Used to add group members to a specified group
ActiveDirectoryRemoveGroupFromMembers
Used to remove group members from a specified group
Use to select one option from a list that is populated from the result of an LDAP query.
Below is a screenshot of the control. This is from a create step where an admin like to choose a manager for a user to be created.
Use to find objects in data store, e.g. Active Directory. It performs searches using pipes and stores a selected value for next steps to consume.
Edit Entra ID group, update group members
Use this control to manage users for a selected group. Note. To select the user, which often is done in a previous step, use the control EntraGroupSelect.
An Entra ID module deployed with matching name as defined in "namespace".
An Entra ID identifier, "selected_entra_id", located in either session or flow. Data is taken from session first and flow second. selected_entra_id must reference a Entra ID group.
Find an Entra ID group based on search data
Find an Entra ID group based on search data
The configuration is divided in two blocks, config
& ui
where config parameters are marked as config.<parameter name>
and ui parameters are marked as ui.<parameter name>
.
See the Example tab for a full example.
In this scenario the grid will contain two columns. The query will also be executed before grid is displayed. This is what "ui:search": false will do, if you add true the grid will let you add Bob* before search is executed.
In addition to example 1 this grid will also contain the owners of the groups returned.
This control works in conjunction with EntraID module. It must be installed.
Set owned_groups_only_attribute will cause control match the data from owned_groups_only_attribute. Matching is done using data from owned_groups_only_attribute and entra_identifier.
entra_identifier is read from session or flow. Session read first then flow.
Settings "owned_groups_only_attribute":"owner", will match value from entra_identifier with id in "owner". Only showing groups where user is set to owner.
"selected_entra_id" - id of selected group
"selected_entra_displayName" - display name of selected group.
Edit Entra ID group, update group members
In this example the grid will have five columns.
This control works in conjunction with Entra ID module. It must be installed.
Object array, "entra_pending_remove" - contains data on what groups to remove from user.
Object array, "entra_pending_add" - contains data on what groups add to user.
Array data will ha the syntax:
[{"id":"1234567","displayName":"Group 1"}]
Edit Entra ID user, update group membership.
Use this control to manage groups for a selected user. Note. To select the user, which often is done in a previous step, use the control EntraUserSelect.
An Entra ID module deployed with matching name as defined in "namespace".
An Entra ID identifier, "selected_entra_id", located in either session or flow. Data is taken from session first and flow second. selected_entra_id must reference a Entra ID user.
Use to display text from a text file. Markdown is supported as well as templating: {{flow.xxxx}} etc. Currently translation is not supported
Edit Entra ID user, update group membership.
The configuration is divided in two blocks, config
& ui
where config parameters are marked as config.<parameter name>
and ui parameters are marked as ui.<parameter name>
.
See the Example tab for a full example.
In this example grid will have two columns.
In this example the grid will have three columns where the owner columns contain the user managing the group.
This control works in conjunction with EntraID module. It must be installed.
Object array, "entra_pending_remove" - contains data on what groups to remove from user.
Object array, "entra_pending_add" - contains data on what groups add to user.
Array data will ha the syntax:
[{"id":"1234567","displayName":"Group 1"}]
Use to display text from a text file. Markdown is supported as well as templating: {{flow.xxxx}} etc. Currently translation is not supported
Find an Entra ID user based on search data
The configuration is divided in two blocks, config
& ui
where config parameters are marked as config.<parameter name>
and ui parameters are marked as ui.<parameter name>
.
See the Example tab for a full example.
In this scenario the grid will contain two columns. The query will also be executed before grid is displayed. This is what "ui:search": false will do, if you add true the grid will let you add Bob* before search is executed.
In addition to example 1 this grid will also contain the manager of the users returned.
This control works in conjunction with EntraID module. It must be installed.
Set owned_users_only_attribute will cause control match the data from owned_users_only_attribute. Matching is done using data from owned_users_only_attribute and entra_identifier.
entra_identifier is read from session or flow. Session read first then flow.
Settings "owned_users_only_attribute":"manager", will match value from entra_identifier with id in "manager". Only showing users where user is set to owner.
"selected_entra_id" - id of selected group
"selected_entra_displayName" - display name of selected group.
Find an Entra ID user based on search data
type
Backend implementation. Must be Attestor
N/A
type
Must be EntraGroupSelect
N/A
config.namespace
Identifier of EntraID module to use
"default"
config.columns
List array with columns to display
["displayName","description"]
config.search_attributes
List array with columns used for searching. Search is done using "starts with".
["displayName","mail"]
config.owned_groups_only_attribute
If set, groups will filtered based on the attribute.
N/A
ui.ui:search
Should search input be visible for end user, true
/false
true
ui.ui:submit_on_change
Should selection of an item move to next step. true
/false
false
type
Must be EntraGroupEditGroupMember
N/A
config.namespace
Identifier of EntraID module to use
"default"
config.columns
List array with columns to display
["displayName", "mail", "mobilePhone", "companyName", "department"]
config.change_is_required
Force admin to update user, true
/false
false
config.exclude_id
Typically the id of current user. ID will not be visible. Configured value is taken from session or flow. First session, flow second.
N/A ("")
config.readonly
Should control be readonly?
false
type
Must be EntraUserEditGroupMember
N/A
config.namespace
Identifier of EntraID module to use
"default"
config.columns
List array with columns to display
["displayName","description"]
config.change_is_required
Force admin to update user, true
/false
false
config.owned_groups_only
If set, groups will filtered based on the attribute.
false
config.owner_entry_id_key
Where to find the owner. If owned_groups_only
is true
. Configured value is taken from session or flow. First session, flow second.
"entra_owner"
ui.ui:submit_on_change
Should selection of an item move to next step. true
/false
false
type
Backend implementation
N/A
config.file_template
File to load
N/A
type
Must be EntraGroupSelect
N/A
config.namespace
Identifier of EntraID module to use
"default"
config.columns
List array with columns to display
["displayName", "mail", "mobilePhone", "companyName", "department"]
config.search_attributes
List array with columns used for searching. Search is done using "starts with".
["displayName","mail"]
config.owned_users_only_attribute
If set, users will be filtered based on the attribute.
N/A
ui.ui:search
Should search input be visible for end user, true/false
true
ui.ui:submit_on_change
Should selection of an item move to next step. true/false
false
Update group membership for a selected user.
An LdapClient module deployed with matching name as defined in "namespace".
Control type: ActiveDirectoryUserEditGroupMember
namespace
Identifier of LdapClient module to use
"default"
columns
List array with columns to display
["cn","description"]
change_is_required
Force admin to update user, true
/false
false
base_dn
Search base DN.
"DC=company,DC=local"
scope
Search scope.
"SUB"
current_filter
Search filter. Used to fetch all groups the the user is a member of.
N/A
available_filter
Search filter. Used to fetch available groups.
N/A
This control works in conjunction with LdapClient module. It must be installed.
Object array, "ad_pending_remove" - contains data on what groups to remove from user.
Object array, "ad_pending_add" - contains data on what groups to add to user.
Array data will have the syntax:
Valves used in finalize pipe
ActiveDirectoryAddMemberToGroups
Used to add a single group member to groups
ActiveDirectoryRemoveMemberFromGroups
Used to remove a single group member from groups