2. OpenFlow¶
2.1. What is OpenFlow?¶
OpenFlow is the heart of the OON stack, orchestrating all the activities between the applications. Here are some of its main features:
-
Managing, invoking and configuring your robots and workflows;
-
Managing users and their permission levels;
-
Creating forms whenever a human must participate in a process and viewing all currently assigned or idle workflows pending to the user;
-
Managing MongoDB collections and entries;
-
A central cloud repository, allowing its content (workflows, forms, MongoDB files, …) to be available to the robots, users and other applications .
2.2. Installing, First Run¶
This section’s purpose is to help the user install an OpenFlow instance locally. If you already have an OpenFlow URL provided, you may skip this step.
Please use guide provided at Install guides Using docker is the preferred and recommended way Install using docker
2.3. Accessing for the first time¶
To access OpenFlow webpage, simply go to the URL as specified by your working
environment (contact your IT responsible, if needed). If running a local version, by default the URL
should be http://localhost.openiap.io
.
If you do not have access to OpenFlow and you are not running a local version, we
encourage you to do some experimentation using our own environment, which can be found at https://app.openiap.io
.
After accessing the page, users are prompted to authenticate themselves. After signing in, the user is redirected to the home page of OpenFlow home page.
Note
If you are accessing OpenFlow environment (https://app.openiap.io
),
when prompted for credentials, you may type any username/password combination and your user will
be then created automatically with the same credentials. Please keep note of your
username/password!

Authentication page.¶

OpenFlow’s home page.¶
2.4. Creating a new user¶
To create a new user, first click the Admin dropdown and select the Users option.

Admin dropdown.¶
Now click the navy blue Add user
button.

Users page.¶
Now, input the name
,
username
and password
and click
Save. Notice that the recently created user
does not have any Roles
assigned to them. More information about Roles is available in the next section.

User creation page.¶
2.5. Roles¶
Here we will explained what Roles in OpenFlow are and how they impact with OpenRPA and Node-RED access privileges.
2.5.1. What are Roles?¶
Roles in OpenFlow are a units or collection of privileges and permissions that can be assigned to one or more users or to a group of users. These Roles serve various purposes, such as granting access to projects/workflows inside OpenRPA or granting access to specific flows inside Node-RED.
Remember that both human users and robots are called users
in
OpenFlow and Roles work the same way for both.
2.5.2. RPARole (Pool)¶
Sometimes it is desired to create a Pool of users
, e.g. “Buyers”, so
that many users
(buyer_John, buyer_Maria, buyer_robot1, …) can be inserted in this Pool. By doing so, it will
become easier to manage privileges and accesses when compared to manually adjusting each user
’s Roles.
RPARole also allows workflows or Node-RED flows to assign a task to the “Buyers” Pool instead of
a specific user
. This
way, a workflow can be assigned to any user
from a Pool, the
framework will automatically assign the task to the first available listening user
.
Therefore, RPARole is a parameter set in the Role’s editing page of a role which enables a Role to become a Pool of users instead.
If set, all users
added to the Role start listening to the Role-Queue id
. Users
now become consumers
of the Queue. When an user
logs in, they listen
natively to their own User-Queue id
. For each Role with the
parameter RPARole that this user is memberof, the user will also start listening to Role-Queue
id
. See more at pool (https://cs.stackexchange.com/q/86372
).
2.5.2.1. But what is a consumer?¶
The term “consumer” means different things in different contexts. Here a consumer is an application (or application instance) that consumes messages. The same application can also publish messages and therefore is a publisher at the same time. In this case a consumer is a subscription for message delivery that has to be registered before deliveries begin and it can also be cancelled by the application.
RabbitMQ is a messaging broker. It accepts messages from publishers, routes them. If there were queues to route to, stores them for consumption or immediately delivers to consumers, if any. Consumers consume messages from the queue. In order to consume them there has to be a queue. When a new consumer is added, assuming there are already messages ready in the queue, deliveries will start immediately. The target queue can be empty at the time of consumer registration. In that case first deliveries will happen when new messages are enqueued.¹
¹ - Consumers
(https://www.rabbitmq.com/consumers.html
)
2.5.3. Granting permissions (admin, nodered, user)¶
Changing permissions in OpenFlow is very easy.
In order to change roles, the user must be an Admin
, i.e., be assigned to
the admins
role.
Then, the user must click the Admin
dropdown inside
OpenFlow’s webpage.
All you need to do now is go to the Roles page inside OpenFlow’s page and click
the Pencil/Edit
icon
corresponding to the Role that you want to add users to. As an example, we’re going to change the
personal nodered users
Role.
After clicking the Pencil/Edit
icon, the user
is redirected to the Role page, which contains the Name
of the role, the rparole
checkbox, the add
input field and the
member
list, as seen
below. To add a new user
/Role
to that Role, simply
insert the name of this user
/Role
in the add
input field. A dropdown
list will then appear and the user chooses which user
/Role
it is desired to be
added to that Role.
After selecting the desired values, the add button will become clickable. After
clicking it, the recently selected user/Role
will be added to
the member
list.
Remember to Save the changes, otherwise they will not take place.
2.5.3.1. Node-RED permissions¶
Everytime a Workflow In
node is set with a Queue name
and the flow to which it belongs to is deployed inside Node-RED, a new Role is
created inside the Roles page with the prefix of the subdomain for the
Node-RED (default: “nodered1”), the middle part is the name of the queue (as
defined inside the node properties) and the suffix is “users”. E.g.:
“nodered1google-vision-apiusers”.
Note
When logged in as a non-Admin
user, to have
access and invoke that workflow inside the Workflows page, the user must be
added to that Role!
2.5.3.2. List of Main Roles inside OpenFlow¶
Here are the main Roles inside OpenFlow and their permissions.
-
filestore users - members of this Role can see all files uploaded to OpenFlow.
-
filestore admins - members of this Role have full control (delete, update, …) on all files uploaded to OpenFlow.
-
robot users - currently unused, supposed to represent all robots.
-
robot admins - currently unused, members from this role have full control (delete, update, …) on all objects related to robots.
-
personal nodered users - members of this Role can create new Node-RED instances, if OpenFlow is running on Kubernetes.
-
nodered users - members from this Role have read-only access to all Node-RED instances.
-
nodered admins - members from this Role have full access to all Node-RED instances.
-
nodered api users - members from this Role can call APIs exposed from all Node-RED instances, when
api_allow_anonymous
is set totrue
. -
users - All users are members of this Role.
-
admins - Members from this role have access to everything inside the system. At the moment,
admins
can do everything theroot
user is able to do.
2.6. Workflows Tab (Node-RED)¶
2.6.1. What is it?¶
Workflows in Node-RED are mainly called ‘Flows’. These flows are made to connect different services, applications and logic functions. When grouped together they can be used to process data and output the results to a given service or file.
At the Workflows
page (eg. http://localhost.openiap.io/#/Workflows
)
in OpenFlow, it is possible to remotely invoke these flows.

Node-RED subflow example.¶
2.6.2. Invoking¶
Workflows can be started through all three applications: OpenRPA, OpenFlow and Node-RED. Invoking a workflow does not change it’s content, it merely executes it remotely. Think of it as a read-only procedure.
-
Deploying a Workflow to Node-RED
Upon accessing Node-RED, flow tabs are shown containing all the flows available for deployment. To execute a Node-RED flow, simply click the starting node inside a Node-RED subflow. Everytime a change is made to a Node-RED flow or subflow it is required to deploy it again so the changes are applied.
If it is desired to invoke a workflow through OpenFlow according to the settings set on the Node-RED application, a few more steps are required.
-
Enter the Node-RED page and select the desired flow tab where you want to create the subflow containing the invoke call to OpenFlow.
-
Create a subflow with a
Workflow In
node as its starting point. -
Click twice the
Workflow In
node corresponding to the workflow you want to create. -
Name it by setting up the
Queue name
input field. -
If desired, route it to send a form back to the user by using
Workflow Out
(more about Forms below). -
Check one or both of the checkboxes: RPA - to enable this node to be invoked from OpenRPA - and WEB - to enable invoking from OpenFlow.
-
Deploy the current flow.
It is important to remark that when a
Workflow In
node is deployed, it will create a corresponding role inside OpenFlow named “nodered$<Queue name
>”, and only users that are members of this role can invoke this workflow. On the following next steps, if you can’t see your workflow when attempting to remotely invoke it, double check and see if your user is a member of that role! -
Note
The user must have the nodered users
role enabled in order to able to invoke Node-RED flows from within OpenFlow.

Enabling Node-RED invoking from OpenFlow.¶
-
Invoking a Node-RED workflow in OpenFlow
After the steps above are complete, go to the Workflows page (eg.
http://localhost.openiap.io/#/Workflows
) and directly invoke the desired workflow. A form page will then open to choose the input parameters, if any.The forms are either automatically generated by OpenRPA, according to the variables preset - more on that on OpenRPA’s Variables section - or manually generated by the user on the Forms page (eg.
http://localhost.openiap.io/#/Forms
).Upon clicking submit on a form, the parameters are sent to the robot for processing and execution of the given workflow.

Workflows page.¶

Form example.¶
2.7. RPA Workflows Tab (OpenRPA)¶
2.7.1. What is it?¶
Workflows in OpenRPA and OpenFlow are the same thing, an algorithm or a sequence of steps that execute a meaningful task. The difference is that when you invoke a workflow in OpenFlow, it creates an instance of that workflow. By accessing the Workflows tab, you may invoke workflows remotely, meaning, the stack in OpenFlow will send a message to the available agent to process and execute the given workflow.
From OpenFlow you can create forms, grant permissions to a given workflow and most importantly invoke it.
OpenFlow automatically manages the workflow repository. When properly connected, by saving a workflow inside OpenRPA, it will also automatically appear inside the Workflows webpage.
To download a workflow, simply go to the RPA Workflows link and click download. After dowloading the .XAML file, you may share it with others or import it into your OpenRPA client.
2.7.2. Invoking¶
-
Methods for Invoking
Here we discuss the methods for invoking a workflow using OpenFlow.
-
Invoking through OpenFlow’s RPA Workflows Page
To invoke a workflow through OpenFlow, simply go to RPA Workflows page (eg. http://localhost.openiap.io/#/Workflows) and click Invoke, another page for the specific workflow will be opened where all the forms needed to be filled are going to be presented. Simply fill them and click Invoke again. The input data is then sent to the chosen robot/agent and it will start processing the workflow.
Data processing is bi-directional: input parameters are sent to a robot/agent and the workflow output will also be returned. That means that you can make many workflows calling different applications. Think of it as a message, messages are sent, read and replied to. Nothing prevents that message from being sent, read or replied to multiple times.
Note
For the user to invoke a workflow using OpenFlow, the user must have the proper permissions. See more at OpenRPA’s chapter Granting permissions to users/roles.

RPA Workflows page.¶
2.8. Forms¶
Forms are an user-friendly way of passing input to a workflow by creating dynamic OpenFlow’s webpages. There are two ways of generating a Form: one of them is through OpenFlow’s automatically generated Forms which are created upon saving a Workflow into its repository and the other one is manually creating a Form and connecting it to a Node-RED workflow.
For thorough information on how to use Forms, please refer to form.io Intro (https://help.form.io/userguide/introduction/
).
Most of this chapter is based on this guide.
2.8.1. Creating a Form¶
Creating a form is rather easy and simple. Go to the Forms page, where all Forms are listed,
available under the Admin dropdown or in the Forms page (eg. http://localhost.openiap.io/#/Forms) and click
the Navy blue Add form
button.

OpenFlow’s Forms page.¶
Now at the Forms edit page, there are many Form components from which you can choose. For general purposes, we are only going to discuss the most used one here: Text Field Component. The other ones will be discussed further on in their specific sections.

OpenFlow’s Forms creation page.¶
Drag the Text Field Component Form from the Basic category into the Form workspace. Immediately after, a window containing all the parameters to configure the Form Component will appear.

OpenFlow’s Forms starter configuration tab.¶
2.8.2. Configuring the Form Component¶
Below are the steps needed to properly configure a Form Component, a TextField in our example.
-
Changing Form Label
To change the Form’s label, i.e., the title which will appear for the end-user, simply click the Display tab and change the input form titled Label. The changes are shown real-time.

OpenFlow’s Form Display configuration tab.¶
-
Assigning Input Variable
To assign the input form to a variable configured inside the OpenRPA workflow you’ve mapped to OpenFlow, simply go to the API tab and insert the name of the variable inside Property Name and press save. Now the next time this workflow is called, a new parameter will appear.

OpenFlow’s Form API configuration tab.¶
-
Assigning Form to Node-RED Workflow
Now it is required that you assign a Form to a Node-RED workflow. To do that, go to Node-RED and click twice on the
Workflow Out
node you want to assign the form to. TheEdit workflow out node
tab appears and you must select the form you’ve just created in theUserform
dropdown.

Assigning Form to Node-RED workflow.¶
For more information on how to configure the Form Component, please refer to the OpenFlow Forms section.
2.8.3. General Form Settings¶
In this section, users will see a list of general settings that are offered for the majority of our components. In the later sections, only the specific settings for the given Forms will be shown.
Display
Here belong the general properties related to the display methods and usage of this Form Component.
Label
Label Position
Placeholder
Description
Prefix
Suffix
Widget
Input Mask
This property allows the user to insert one or more input masks to verify the input data. If you do no know what this means or want special customization, please refer to Inputmask (
https://github.com/RobinHerbots/Inputmask
).If you activate this option with either Show Character Count or Show Word Count, none of the latter will work properly.
Input Mask Property
The users can also allow for multiple masks. Checking this option will generate a prefix dropdown in the input field where he can select from which mask he desires to choose input fors.
Settings multiple masks
Custom CSS Class
This property allows the users to make use of one of the custom CSS classes for Bootstrap’s input text fields as defined in Input group (
https://getbootstrap.com/docs/4.0/components/input-group/
).![]()
Custom CSS Property¶
Tab Index
If set to
0
, this property allows the users to use the{TAB}
key to navigate through the input fields. Else, if set to1
it makes the input field unnavigable by using the{TAB}
key. If this property is not very clear, users can find more information about it on MSDN - tabindex (https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/tabindex
).![]()
Tab Index Property¶
Hidden
If checked, this property allows the users to hide the form when it is invoked. The component will still be part of the form.
Hide Label
This option allows users to hide the label of this component when the form is rendered. It will still be visible in the form builder.
Show Word counter
If checked, this property shows a live of number of words in the component.
Show Character Counter
If checked, this property shows a live of number of characters in the component.
Hide Input
This option hides the input in the browser. However, it does not encrypt the input in the server, so it should not be used with passwords.
Initial Focus
This option makes the component the initially focused in the form.
Allow Spellcheck
This option enables the spellcheck for this component.
Disabled
This option disabled the component in the form.
Always Enabled
This option makes the component always enabled, even if the form itself is disabled.
Table View
If checked, this option shows the input value within the table view of the submissions.
Data
Multiple Values
This option allows multiple values to be entered for this field.
Default Value
If checked, there will be an default value for this field before user interaction. This value will override placeholder text.
Persistent
This option stored a persistent field in the database when the form is submitted. The available option are: None, Server and Client. These correspond to where the information will be stored, if checked.
Input Format
This option forces the output of this field to be sanitized in a specific format. The available options are: Plain, HTML and Raw. Please note that the last option (“Raw”) is considered insecure.
Protected
If checked, this field will not be returned when queried via API.
Database Index
This option sets this field as the index within the database. It increases performance for submission queries.
Text Case
With this option, user may control the case of the text in the field. There are the possibilities here: Mixed (allows upper and lower cases in the text), Uppercase and Lowercase. These two last options make the whole text to be in the specific case.
Encrypted (Enterprise Only)
This option encrpyt the input of the field in the server. Please note that it is not recommended for passwords, since it is two way encryption.
Redraw On
This option redraws this component if another component changes. It may be useful when interpolating parts of the component, as the label.
Clear Value When Hidden
When the field is hidden, it clears its value.
Custom Default Value
This option opens a JavaScript text field for the user to customize the default value. All available variables are listed for the user to handle them. As shown in the example, information within the system can be used to fill in the field for the end user as a suggestion.
Calculated Value
Similar to Custom Default Value, that is, the end user may be provided with an already calculated value for this field. A JavaScript text field will be opened for the user to treat the information as desired. Again, all available variables are listed.
Allow Manual Override of Calculated Value
If checked, this option allows end users to manually override the calculated value.
Validation
Validate On
This option determines when this component should trigger frond-end validation. The available option are Change and Blur.
Required
If checked, the form can not be submitted if this field is empty.
Unique
This option makes the input of this field unique, that is, one end user can not submit the form if the text in this field is the same as another end user.
Minimum Length
The minimum length required for the input. It must be an integer represent the number of characters.
Maximum Length
The maximum length required for the input. It must be an integer represent the number of characters.
Minimum Word Length
The minimum number of words that can be entered in this field.
Maximum Word Length
The maximum number of words that can be entered in this field.
Regular Expression Pattern
The Regular Expression Pattern against which the input of this field must be tested before the form can be submitted.
Error Label
The label for this field when an error occurs.
Custom Error Message
An error message to be displayed if an error occurs.
Custom Validation
Customizable validation based in JavaScript syntax. All available variables are shown. A Secret Validation option is provided for those who wish to perform valition only in the server side. It keeps validation logic private and secret.
JSONLogic Validation
This option allows users to enter validation using JSONLogic syntax.
API
Property Name
The name of this field in the API endpoint.
Field Tags
Tags of field to be used in custom logic.
Custom Properties
This option allows users to configure any custom properties for this field.
Conditional
Any form component can use conditional logic to determine when to hide or display itself. The settings for a conditional field are configured on the component itself and can be found by viewing the Conditional tab within the components settings. Please note that the conditional component requires an API key to be configured to function correctly.
Advanced
In addition to Simple Conditional logic, you can also use Advanced Conditional logic, which uses actual JavaScript for any combination of conditions. JavaScript conditional logic requires you to set the value of show to either true or false. You have access to the current value of any form component via the data object and the components API key. Advanced Conditional logic will only work if Simple Conditional logic isn’t already defined.
Logic
This option allows users to set conditional actions in the form based on triggers. The difference between this Logic and the previous tab (“Conditional”) is that here the user is presented with more Actions other than showing the component or not. For instance, based on this logic, the user can set the Value of the field, a Property (such as Label, Title, Placeholder etc.) or even Validation.
Layout
HTML Attributes
This options provides a map of HTML attributes for component’s input element. Please note that the attributes provided by other component settings or other attributes generated by form.io take precedence over attributes in this option.
PDF Overlay
Options for rendering this component in PDF.
2.8.4. Basic Form Components¶
The Basic Form Components contain the most basic input types.
2.8.4.1. Text Field¶
The Text Field Component allows the user to insert text inside an inline input field.
To use this Form Component, simply drag the Text Field component to the form you’re building.

After dragging it to the Form Designer, a new window will appear - the configuration window for
this specific Form Component. It is divided by sections: Display
, Data
, Validation
, API
, Conditionals
, Logic
and Layout
. These sections
and their properties are discussed further below.

2.8.4.2. Text Area¶
A Text Area has the same options as the textfield form component. The difference is that it will be a multi-line input field that allows for longer text. The Text Area can also be utilized as a CK Editor WYSIWYG for the end user which is configured within the component settings.
Display
2.8.4.3. Number¶
Number fields should be used whenever a field should be limited to a type of number value.
Data
Use Thousands Separator
This option separes thousands by local delimiter.
Decimal Places
The maximum number of decimal places for the values in this field.
Require Decimals
Always show decimals for this field, even if trailing zeros.
2.8.4.4. Password¶
The password field has the same options as a text field component. It differs from a text field in that its html <input> type will be password instead of text. This will cause the field to display asterisks instead of the value entered.
2.8.4.5. Checkbox¶
A check box is a boolean value input field. It will either be on or off.
Validation
- Required
If checked, the field will be required to be checked. If it is required, you may not need to persist the value as it can be assumed to be checked when a form was submitted or it will not submit.
2.8.4.6. Select Boxes¶
The Check Boxes form component works like the Radio component, but allows the user to check multiple values.
Display
Inline Layout
If checked, this field will layout the checkboxes horizontally instead of vertically.
Validation
Required
If checked, the field will be required to have at least one box checked. If it is required, you may not need to persist the value as it can be assumed to be checked when a form was submitted or it will not submit.
2.8.4.7. Select¶
A select field will display a list of values in a drop down list to users. Users can select one of the values.
Display
Widget Type
This option allows the user to select the type of widget to be used. The available options are ChoicesJS and HTML 5.
Data
Data Source Type
Select the type of data the options will be pulled from.
Values
These are the values that will be selected on this field. The Value column is what will be stored in the database and the Label is what is shown to the users.
Storage Type
The type to store the data. It is suggested to choose “autotype”, which means it will use the type of the data from URL.
Item Template
The HTML template for the result data items.
Enable Static Search
When checked, the Select dropdown will allow for searching within the static list of items provided.
Search Threshold
A number from 0 to 1 representing the point that the matching algorithm gives up. A threshold of 0.0 required a perfect match, while a threshold of 1.0 will match anything.
Read Only Value
If checked, it will show just the value when in Read Only mode.
Choices.js options
A raw JSON object to use as options for the Select component.
Raw JSON
Enter a JSON Array to use. It should be formatted as an array of objects with named properties.
URL
Enter a url with a data source in JSON Array format. This can be used to populate a Select list with external JSON values.
Lazy Load Data
When set, this option will not fire off the request to the URL until this control is within focus. It can improve performance in case of many Select dropdowns in the form.
Request Headers
The headers that should be sent along with the request to the URL. It can useful for authentication.
Data Path
The property within the source data, if the items are iterable.
Disable limiting response
When enabled the request will not include the limit and skip options in the query string.
Search Query Name
The name of the search querystring parameter used when sending a request to filter the results with. The server at the URL must handle this query parameter.
Filter Query
This filter is used to provide additional filtering when using query parameters.
Sort Query
This option is used to provide sorting when using query parameters.
Limit
This option is used to limit the number of items to request or view.
Refresh Options On
If checked, it will refresh data when another field changes.
Clear Value On Refresh Options
When Refresh Options On is on, the component will have its value cleared.
Formio Authenticate
The user must check this option if Formio Authentication is desired with the request.
2.8.4.8. Radio¶
Radio form components should be used when presenting a list of options from which one should be chosen.
2.8.4.9. Button¶
Buttons can be added to perform various actions within the form.
Display
Action
The action to be performed by the button.
Submit
A submit action submits the form to either the form.io server or a custom callback url that has been priorly set up.
Save in state
The state the user wishes to save the submission under when this button is pressed.
Event
An event to be fired when the button is clicked. The user must enter the name of the event.
Show Validation
When the button is pressed, it will show any validation errors on the form.
Custom
A custom logic to evaluate when the button is clicked.
Reset
Reset the form fields back to their original state.
OAuth
Perform OAuth authentication.
POST to URL
The URL where the submission will be sent.
Headers
Headers properties and values for the request.
Theme
The color theme of the button.
Size
The size of the button.
Block Button
This control should span the full width of the bounding container.
Left Icon
The full icon class string to show the icon.
Right Icon
The full icon class string to show the icon.
Shortcut
The shortcut for this component.
2.8.5. Advanced Form Components¶
The Advanced forms contain the most advanced forms of inputs.
2.8.5.1. Email¶
The email component is nearly identical to the text field component. The Email component has a custom validation setting that, if set up correctly, can ensure the value entered is a valid email address. The email component can also more easily be integrate into a form’s email action. Use this component when you want an email address field for your form.
2.8.5.2. URL¶
The URL component is nearly identical to the text field component, except that it does not accept simple text.
2.8.5.3. Phone Number¶
The phone number form component can be used to enter phone numbers in a form. A textfield can be used for general text input that is shorter than a sentence. There are options to define input masks and validations so information can be molded into desired formats.
2.8.5.4. Tags¶
The Tags component is very similar to text field, but is used to add tags to the form.
Data
Delimiter
The delimiter to be used to separate the tags.
Max Tags
The maximum amount of tags that can be added. If set to 0, there will be no limit.
Store As
The data type in which the tags will be stored. There are two options: string (CSV) or array of tags.
2.8.5.5. Address¶
The address form component is a special component that does lookups for addresses entered. It can be entered in free form and will save the address as well as geolocation and other information.
Display
Region Bias
The region bias to use for this search.
Google Maps API Key
The API kay for Google Maps. A full account on how to get an Google Maps API key, please visit Google’s Developers site on the theme (https://developers.google.com/maps/documentation/geocoding/get-api-key).
2.8.5.6. Date / Time¶
Date/Time form components can be used to input dates, times or both.
Display
Display in Timezone
This will display the captured date time in the selected timezone. The user can selected between datime of: the Viewer, Submission, Location or UTC. In case of “Location”, the user will have to choose the location in the dropdown menu.
Use Locale Settings
Use locale settings to display date and time.
Format
The date format for displaying the datetime value. For a complete list of accepted formats, please visit this site (https://github.com/angular-ui/bootstrap/tree/master/src/dateparser/docs#uibdateparsers-format-codes).
Date
Enable Date Input
This option enables date input for this field.
Minimum Date
The minimum date that can be picked.
Maximum Date
The maximum date that can be picked.
Time
Enable Time Input
This option enables time input for this field.
Hour Step Size
The number of hours to increment/decrement in the time picker.
Minute Step Size
The number of minutes to increment/decrement in the time picker.
12 Hour Time (AM/PM)
This option enables 12 hour time with AM/PM.
2.8.5.7. Day¶
Component to input dates.
Day
Select
In this option, users can choose between “Number” and “Select”. It means that the end user will be presented with an empty field for typing the number of the Day or with a dropdown menu with all available Days.
Day first
Display the Day field before Month field.
Month
Select
In this option, users can choose between “Number” and “Select”. It means that the end user will be presented with an empty field for typing the name of the Month or with a dropdown menu with all available Months.
Year
Select
In this option, users can choose between “Number” and “Select”. It means that the end user will be presented with an empty field for typing the number of the Year or with a dropdown menu with all available Years.
Minimum Year
The minimum year that can be entered.
Maximum Year
The maximum year that can be entered.
2.8.5.8. Time¶
Component to input time.
Display
Input Type
The type of widget to use. There are two options: HTML 5 Time Input and Text Input with Mask.
Data
Data Format
The moment.js format for saving the value of this field.
2.8.5.9. Currency¶
The Currency component should be used when a field should display currency amounts on a form. This component holds a numeric input mask that allows two decimal values and automatically adds commas as a user inputs a currency amount.
Data
Currency
The currency to use in the currency formatting. Possible values are currency codes (ISO-4217).
2.8.5.10. Survey¶
The Survey component works similar to the radio. Instead of one question, users are able to select a value for multiple questions which are configured within the component settings. Survey is a great component to utilize when asking multiple questions with the same context of answers or values.
Data
Questions
The questions users want to ask in the survey.
Values
The values that can be selected per question.
2.8.5.11. Signature¶
A signature field is a special field that allows someone to sign the field with either their finger on a touch enabled device or with the mouse pointer. This signature will be converted into an image and stored with the form submission.
Display
Footer Label
The footer text that appears below the signature area.
Width
The width of the signature area. This can be in pixels or percents.
Height
The height of the signature area. This can be in pixels or percents.
Background Color
The background color of the signature area. This can be an RGB value in RGB(255,255,255) format, a hex value like #000000 or the name of a color.
Pen Color
The ink color of the signature area. This can be an RGB value in RGB(255,255,255) format, a hex value like #000000 or the name of a color.
2.8.6. Layout Form Components¶
The Layout forms contain view-related forms of input.
2.8.6.1. HTML Element¶
This component adds an HTML element to the form page.
Display
HTML Tag
The tag of this HTML element.
Attributes
The attributes of this HTML element. Only safe attributes are allowed, such as src, href and title.
2.8.6.2. Content¶
This component adds text or other types of content (such as images, lists, tables and media) to the form page. The users may edit this content in the editor that will pop up.
2.8.6.3. Columns¶
The Column layout component can be used to split any area into two columns. Simply drag and drop the Column button onto the form and the area you drop it on will be split in two.
2.8.6.4. Field Set¶
A fieldset can be used to create a title of an area of the form. This is useful to put inside Layout components or in between lots of related fields. This form component is display only and will not be saved to the API.
Display
Legend
The legend for this Fieldset.
2.8.6.5. Panel¶
Panels are used to wrap groups of fields with a title and styling. These currently map to Bootstrap Panels.
Display
Title
The title text that appears in the header of this panel.
Theme
The theming of the panel. Select one of the options to have the class added to the wrapper div.
2.8.6.6. Table¶
The table component allows creating a table with columns and rows that allow adding additional components within it.
Display
Number of Rows
The number of rows on the table. This can be adjusted at any time.
Number of Columns
The number of columns on the table. This can be adjusted at any time.
Cell Alignment
Horizontal alignment of the cells of the table.
Stripped
This will stripe the table if checked. Whether or not the table is striped for odd and even rows.
Bordered
This will border the table if checked. Whether or not the table has a border set on it (this can be changed by your own CSS as well).
Hover
Highlight a row on hover. Whether or not to add a hover class on rows when the mouse hovers over them.
Condensed
Condense the size of the table by removing padding.
2.8.6.7. Tabs¶
This component adds tabs to the form’s page.
2.8.6.8. Well¶
Wells are wrapped in a div with a class. These currently map to Bootstrap Wells.
2.9. Entities - MongoDB¶
2.9.1. What are Entities?¶
Entities are groups of data that compose a meaningful object inside OpenFlow - ie. a workflow, a
workflow instance, a user, etc. These groups of data are stored as Documents inside Collections
in MongoDB. Collections
are analogous to tables in relational databases. Think of an Entity
as a row inside a
relational table. In layman terms, a Collection
would correspond
to a category inside your phonebook and an Entity
would correspond to
a single entry. Please check below for more on Collections
, Collections.
In OpenFlow, these
Collections
are grouped by their name inside the Entities page (http://demo.openiap.io/#/Entities
). Currently, there exist 10 groups, listed below.
2.9.1.1. workflow_instances¶
Here lie all instances of workflows invoked through the Workflows page (http://demo.openiap.io/#/Workflows
).
2.9.1.2. openrpa¶
All objects pertaining to workflows created inside OpenRPA are found in this
section. By clicking the Edit button in one of these objects, the user can see
the XAML code
which was generated by the OpenRPA workflow.
2.9.1.3. entities¶
This section contains all objects serialized into OpenFlow by using the OpenRPA.OpenFlowDB activities.
2.9.1.4. config¶
Lists config data for Providers. For more on providers, please refer to Providers (https://github.com/open-rpa/openflow/blob/master/docs/providers.md
).
2.9.1.5. openrpa_instances¶
Here lie all instances of workflows invoked either through the RPA Workflows page (http://demo.openiap.io/#/Workflows
)
or through OpenRPA itself.
2.9.1.6. users¶
This section contains all users and roles automatically created by Node-RED or through OpenFlow itself.
2.9.1.7. workflow¶
This section contains all queues created from Node-RED’s workflow in
nodes
2.9.1.8. forms¶
This section holds all Forms created inside OpenFlow.
2.9.1.9. nodered¶
Lists config variables for Node-RED.
2.9.1.10. audit¶
This section contains data on all authentication and reauthentication attempts inside OpenFlow.
2.9.2. Usages¶
The user can make use of the OpenRPA.OpenFlowDB activities to query these entities and manipulate them accordingly.
2.9.3. Collections¶
Collections are groups of documents in MongoDB, analogous to tables in relational databases. Collections do not require documents to have the same schema. However, it is possible to enforce that the collection only accepts a certain type of document (document’s properties). This process is called Schema Validation.
For a comprehensive account on MongDB Collections, please refer to the official MongoDB webpage
(https://docs.mongodb.com/manual/core/databases-and-collections/
).
2.10. OpenFlow - FAQ¶
2.10.1. Installation issues¶
Here pertain questions related to issues commonly seen during OpenFlow installation.
2.10.1.1. windows-build-tools
is
stuck at Successfully installed Python 2.7
¶
First uninstall current Python version.
Then install the following Python version - https://www.python.org/downloads/release/python-2717/.
Deactivate any Anaconda environments, if installed and add C:\Python27
to the Path
Environment
Variables (https://superuser.com/questions/949560/how-do-i-set-system-environment-variables-in-windows-10
).
For more information, please visit the following issue on GitHub (https://github.com/felixrieseberg/windows-build-tools/issues/172
).
2.10.1.2. VS Code was unable to import js_stream
when trying to
run OpenFlow in Developer mode¶
Run the following command:
Now update your NodeJS
version to the one
pointed at OpenFlow
GitHub page (https://github.com/open-rpa/openflow
).