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.


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). 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.

images/openflow_roles_click_save_button.png 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”.


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! 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 to true.

  • 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 the root 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.

    1. Enter the Node-RED page and select the desired flow tab where you want to create the subflow containing the invoke call to OpenFlow.

    2. Create a subflow with a Workflow In node as its starting point.

    3. Click twice the Workflow In node corresponding to the workflow you want to create.

    4. Name it by setting up the Queue name input field.

    5. If desired, route it to send a form back to the user by using Workflow Out (more about Forms below).

    6. Check one or both of the checkboxes: RPA - to enable this node to be invoked from OpenRPA - and WEB - to enable invoking from OpenFlow.

    7. 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!


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.


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. The Edit workflow out node tab appears and you must select the form you’ve just created in the Userform 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.


Here belong the general properties related to the display methods and usage of this Form Component.


The name or title for this component.


Label Property


Demo of Label Property set

Label Position

Position for the label for this field. Selecting Top shows the label above the input field, whereas Bottom shows the label below the input field.


Label Position Property


Demo of Label Position Property set to Bottom


This property sets the placeholder text that will appear when the field is empty.


Placeholder Property


Placeholder Property set


This property sets a description which will appear below the input field.


Description Property


Description Property set


This property sets a prefix text which will be passed along with the text inserted in the input field.


Prefix Property


Prefix Property set


This property sets a suffix text which will be passed along with the text inserted in the input field.


Suffix Property


Suffix Property set


This property allows the user to choose between an input field and a calendar picker.


Widget Property

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 to 1 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


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.


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.


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.


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.


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.


Validate On

This option determines when this component should trigger frond-end validation. The available option are Change and Blur.


If checked, the form can not be submitted if this field is empty.


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.


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.


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.


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.


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.


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. 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.

images/text_field_general_config_page.png 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.



This allows control over how many rows are visible in the text area.




Options for selecting the type of WYSIWYG editor to use for this text area.



Auto Expand

This will make the Text Area auto expand its height as the user is typing into the area. Number

Number fields should be used whenever a field should be limited to a type of number value.


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. 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. Checkbox

A check box is a boolean value input field. It will either be on or off.



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. Select Boxes

The Check Boxes form component works like the Radio component, but allows the user to check multiple values.


Inline Layout

If checked, this field will layout the checkboxes horizontally instead of vertically.



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. Select

A select field will display a list of values in a drop down list to users. Users can select one of the values.


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 Source Type

Select the type of data the options will be pulled from.


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.


Enter a JSON Array to use. It should be formatted as an array of objects with named properties.


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.


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. Radio

Radio form components should be used when presenting a list of options from which one should be chosen. Button

Buttons can be added to perform various actions within the form.



The action to be performed by the button.


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.


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.


A custom logic to evaluate when the button is clicked.


Reset the form fields back to their original state.


Perform OAuth authentication.


The URL where the submission will be sent.


Headers properties and values for the request.


The color theme of the button.


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.


The shortcut for this component.

2.8.5. Advanced Form Components

The Advanced forms contain the most advanced forms of inputs. 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. URL

The URL component is nearly identical to the text field component, except that it does not accept simple text. 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. Tags

The Tags component is very similar to text field, but is used to add tags to the form.



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. 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.


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). Date / Time

Date/Time form components can be used to input dates, times or both.


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.


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).


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.


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. Day

Component to input dates.



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.



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.



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. Time

Component to input time.


Input Type

The type of widget to use. There are two options: HTML 5 Time Input and Text Input with Mask.


Data Format

The moment.js format for saving the value of this field. 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.



The currency to use in the currency formatting. Possible values are currency codes (ISO-4217). 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.



The questions users want to ask in the survey.


The values that can be selected per question. 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.


Footer Label

The footer text that appears below the signature area.


The width of the signature area. This can be in pixels or percents.


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. HTML Element

This component adds an HTML element to the form page.



The tag of this HTML element.


The attributes of this HTML element. Only safe attributes are allowed, such as src, href and title. 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. 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. 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.



The legend for this Fieldset. Panel

Panels are used to wrap groups of fields with a title and styling. These currently map to Bootstrap Panels.



The title text that appears in the header of this panel.


The theming of the panel. Select one of the options to have the class added to the wrapper div. Table

The table component allows creating a table with columns and rows that allow adding additional components within it.


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.


This will stripe the table if checked. Whether or not the table is striped for odd and even rows.


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).


Highlight a row on hover. Whether or not to add a hover class on rows when the mouse hovers over them.


Condense the size of the table by removing padding. Tabs

This component adds tabs to the form’s page. 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. workflow_instances

Here lie all instances of workflows invoked through the Workflows page (http://demo.openiap.io/#/Workflows). 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. entities

This section contains all objects serialized into OpenFlow by using the OpenRPA.OpenFlowDB activities. 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). openrpa_instances

Here lie all instances of workflows invoked either through the RPA Workflows page (http://demo.openiap.io/#/Workflows) or through OpenRPA itself. users

This section contains all users and roles automatically created by Node-RED or through OpenFlow itself. workflow

This section contains all queues created from Node-RED’s workflow in nodes forms

This section holds all Forms created inside OpenFlow. nodered

Lists config variables for Node-RED. 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. 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). 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).