Skip to content

Flow Nodes API Guide

Turbo Apps Suite is a Forms and Flow builder that makes it easy for Business Analysts with little or no programming experience and Developers to design forms and automate backend processes by adding and connecting visual components together. Turbo Flows helps modernize your forms processing with Turbo Flows Builder.

Turbo Flow Builder is a no-code (for certain use cases you can also use low-code) flow builder to process submitted data in all supported backend systems. Flows are powerful, shareable and human readable and can automate any process in a flexible fashion. You can use readymade flows or build your own.

Turbo Flows takes a process-based approach to automation, allowing you to define how your automation works and empowering you to also address dynamic cases such as fetching data from systems like SharePoint, Salesforce, SAP or SQL compliant databases and deciding on next steps based on the dynamic state of the data! You have complete control in designing the flow with our graphical, drag and drop builder and customizing it to your specific needs.

Although designing your own Flow is easy using the Flow Builder, there is also a growing repository of ready-made content that integrates with most enterprise systems and communication channels. Use our readymade flows to send PDF versions of forms to DocuSign for Digital Signatures, Notify users on Teams, Slack etc, send Alerts and Emails at will and much more. These flows can be embedded in other flows to automate complex processes.

The Turbo Apps Suite has a drag and drop Flow Builder. You get a limitless canvas to add as many automation steps as you require and connect them up to fulfil every conceivable flow. Starting from simple use cases like updating SQL compliant database, creating Service Orders in Salesforce, sending documents for eSignature via DocuSign or creating Notifications on SAP, setting up Approvals of forms lke Leave Requests, Purchase Orders etc can all be automated in a simple, lucid fashion.

Flow designers do not need any specific coding skills but only need knowledge of the JSON data format and interpreting result sets from systems. To work with databases you have the choice of using SQL queries or no-code, model drive table updates. REST API integration requires understanding of the end points you are posting to and nothing more. OData services can be consumed in a model driven, guided approach. JSON data transformation can be transformed with a graphical editor without writing a single line of code!

Sl.TermDefinition
1.FlowThe series of steps to execute
2.Flow stepsThe individual steps / parts of the flow, It consists of the operation, the data definition for the step and the system configuration
3.OperationsThe predefined operations that can be used to define the flow steps. Operations are the technical building blocks to access databases, REST or OData services etc
4.SystemsSystems are the backend systems that you need to connect to fulfil your processes. For e.g. to create an opportunity in Salesforce you will need to configure the Salesforce systems as part of the flow step
5.FormsEach flow has to be associated with a form. A form can have any number of flows associated with it but each flow is associated to one form. The flow has access to the user submitted data of the associated form
6.Task IDEvery form that has to be filled is treated as a task for a user and identified with a unique TaskID
7.Submission IDEvery form that is filled and submitted is identified with a unique SubmissionID. Every form filling task has at least one submission id. If a task is for a form set, each form of the form set that is completed will also have a submission id
8.Run on SaveFlow to run when a form is saved. Note that a form can be saved any number of times until it is completed
9.Run on CompleteFlow to run when a form is completed. This flow is run only once (unless there is an error) and data is finalized
10.Run on CreateFlow to run when a form is created or instantiated. The flow can be used to prefill the data of the form
11.Run for MasterdataFlow to run when master data is required to be updated in the system or sent directly to the Turbo Forms App for form filling
12.Run via Smart Data Component (SDC)The flow is run as part of a Smart Data Component to fetch data from external systems based on user input and update form with results
13.Test DataTest data for a form that you can save for testing flows before deploying them
14.RunRun a flow in the builder to test it. View detailed results and copy intermediate results
15.SaveSaving a flow also runs a syntax check and returns a list of errors to fix. The flow step with the error is also highlighted
16.DeployDeploy a flow so that it can be run with the associated action (Save, Complete, Create, SDC, Masterdata)

The flow builder canvas allows you to drag and drop any number of operations and create the different steps of the flow. Chain steps by connecting them so that dependent steps can be created. Add decision steps to decide on how the process has to proceed. Success of the current step will result in the next step chained to the “Success” connector being executed. Signal an error and terminate the flow at will.

In the Flows list, click + Add and fill in the details. The most important step is to select the type of flow to create.

Create a Manual Flow if you are building a flow to learn, or try something out or if the requirement is to run the flow adhoc. These flows can only be triggered manually using the Run button in the Turbo Apps Builder.

  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow

Create a Webhook flow if you need to run a flow due to some activity in an external system or similar. The URL provided can be used to post optional data and run the flow for e.g. when a Ticket is created in Salesforce you may want to run a flow and check if there are contractors available to attend to it in your HRM system.

  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow
  • URL: The created webhook is displayed here and you can copy the URL and configure it in the external system. When a POST happens to teh webhook all parameters and the post body is passed to the flow and can be used for further processing. There is no pre-requisite on parameter names etc.
  • Expiry: Date until when he webhook to be valid. A webhook can be revoked and/or extended as the need may be.

Scheduled flows are triggered as per a configured schedule. Use this to run flows at pre-configured intervals for e.g to create an Inspection form every month on the first day etc. You can also use it to refresh Master Data on a schedule.

  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow
  • Schedule: Minute/Hour/Day/Week/Month/Year based schedules

These flows are triggered on certain form actions as below: - Create: Triggered when a form is created per a schedule. Use this to prefill data in the form on creation - Save: Triggered when the form is (partially) saved by the user. Use this to process the submitted data and take decisions, enable other sections of form once some sections are filled in etc. - Complete: Triggered when the form is completed. Use this to submit the form data to SAP, a database, post a notification to Teams to let others know, archive a PDF version of the submitted data in Sharepoint etc. - Approval: Triggered when a user approves a form as part of the configured approval flow.

  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow
  • Action: Choose from Create, Save, Submit and Approval

These are flows that can be included as a step in other flows. Common and repetitive actions like posting a Teams notification can be created as Sub Flows. These can then be called as a step in any other flow thus enabling reuse. Further sub flow execution can be controlled when defining the step in the parent flow:

  1. Run as a part of the parent flow, synchronous execution and the result is available for further processing
  2. Run as a separate parallel flow but in sequence, useful when running sub activities but need to maintain order execution
  3. Run as a separate parallel flow, useful when running sub activities and order execution is not important
  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow

These flows are triggered by Smart Data Components in forms and can be executed on button click, barcode scanning etc. For e.g. when a work permit is to be assigned to a contractor or technician, check their credentials to make sure they are holding current certifications to attend to the job.

  • Title: Enter a title to identify the flow
  • Description: Enter a detailed description regarding the purpose of the flow

Expression builder is used to specify the input to the flow operations (steps). Expressions can be made up of:

  • Form Fields
  • Flow Input
  • Previous flow step results
  • Calculated values (using different functions)
  • Data mapper (JSON extraction)
  • Defined Environment variables
  • Pre-defined macros

For any input to operations, choose the :material-wrench: icon to access the Expression Builder. The expression Builder has multiple panes to organize the data.

  • Left Pane: Select form fields, select functions to operate on strings and numbers in calculate nodes
  • Right Pane: Select from previous node results. If the current node is a Calcualte node, then the variables/expressions already calculate are also available. Any environment variables that are defined for the form can also be used. And a few predefined macros such as the form submitter’s First Name, Last Name etc can also be used.
  • Bottom Pane: The expression

Turbo Apps supports JSONata expressions to extract and convert JSON formats. JSONata allows to manipulate JSON data without the need to write any code.

The JSONata expression builder has three panes:

  • Left Pane : The sample data to operate on
  • Right Top Pane : The JSONata expression. Refer JSONata Docs
  • Right Bottom Pane : The result of applying the expression on the data. This is a live preview and results are calculaed and displayed as the expression is built

The Database expression builder allows to list tables, select key columns and also the list of columns to be queried.

Turbo Apps supports loading metadata from OData services. Once the endpoint is configured, the builder automatically loads all the OData services.

The OData Expression Builder allows to:

  • Select the Entity
  • Select the Entity to Expand
  • Select all the required fields from the selected entities

Other fields can then be manually configured

Turbo Apps supports loading metadata from SAP RFC and BAPI. Once the endpoint is configured, you can search for RFC and BAPI functions from the SAP system.

The SAP Expression Builder allows to:

  • Search and select the custom RFC or BAPI
  • Select all the required fields for Input to the function and map form fields and other calculated values to the input
  • Select all the fields that need to be returned from the Output of the function

All the Integration Services in the flow such as REST, OData, Database etc operate on systems. Systems can be configured in the individual operations.

Systems typically define:

  • URL / Server Address
  • Port / Protocol
  • Authentication Mechanism such as OAuth, Basic etc
  • Optional User ID / Password
  • And other optional parameters

Systems are defined for each operation type and can be used across flows. For e.g. a flow upload document to SharePoint can define the SharePoint system and in another flow the same system can be used with a differente REST API

System authentication can be configured at a system level (Common user id / password, API token etc) or at an individual level based on UserID/Password or OAuth. The entire authentication process is seamlessly managed by Turbo Apps and flow designers only need to choose the authentication model.


Various operations are supported by Turbo App. They are grouped as below

  • Services : Operations for Integration
    • REST : REST web services
    • OData : OData web services
    • SAP : Connect to SAP custom RFC functions and BAPI
    • Query : SQL queries on databases
    • Stored Procedure : Execute database stored procedures
    • Active Directory : Lookup on MS Active Directory
    • FTP : Query, Upload and Download files from an FTP server
  • Forms : Operations on forms and form data
    • Create : Create and assign a new form
    • Update : Update the existing form data
    • Assign : Assign (add) the form to a new user
    • Read : Read a form’s data
    • Search : Search for forms
    • Share : Share the form with external users
    • Archive : Archive the form and create an archive URL to view archived data
    • Create PDF : Create a PDF of the form
    • Alert : Send an alert
    • Contact : Add / Update external contacts
  • Master Data : Operations on Master Data
    • Update a row of data
    • Replace all data
    • Query data
  • Code : Executors to customize the flow
    • Execute Java: Execute a Java function as part of the flow
    • Execute JavaScript : Execute JavaScript function as part of the flow
    • Execute Python Script : Execute Python Script (2.7) function as part of the flow
  • Others : Miscellaneous operations
    • JSON Parser : Extract and transform JSON data without writing code
    • CSV Parser : Extract and transform CSV data without writing code
    • Condition : Add conditions to determine next steps
    • Calculate : Add expressions to calculate values
    • For Loop : Loop over and process array data
    • Email : Send an email as part of the flow
    • Response : Customize the response from the flow
    • File Store : Upload or Download a file from the file store (cache)
    • Sub Flow : Execute another sub flow (child) as a step of the main (parent) flow
    • Approval Workflow - Execute an approval (decision) workflow

Every flow step (comprising of an operation)) has a set of common properties

  • Name : Technical flow step name. Needs to be all lowercase and used when accessing the results of this step
  • Description : Detailed notes about the flow step and its purpose
  • System : System to use for the flow step (if required)

Execute any REST request on a remote server. The authentication for the endpoint is provided via the SystemProperty file

  1. Add or choose an existing system providing the REST end point
  2. Choose the contenttype and accepttype
  3. Choose the HTTP Verb that is to be executed (default GET)
  4. Add other optional parameters that are necessary
  5. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  6. Save
ParamTypeRequiredDefaultDescription
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
systemStringTrueThe REST system endpoint configuration
contenttypeStringTrueapplication/jsonThe content type
acceptStringTrueapplication/jsonThe accept type
httpverbStringTruegetThe HTTP verb (action) to call
postquerystringBooleanFalseFalseIndicates if the post parameters also have to be sent as a query string (True or False)
instanceurlStringFalseWith some services like Salesforce, ServiceNow etc, the URL is dynamic and may need to be changed from what is configured in the system properties. This is usually referred to as the instanceUrl and can be set to override the system properties
urlpathStringFalseThe (url) path for the call
attachmentsStringFalseComma separated list of Attachment IDs of the files to be posted to the end point. The attachment IDs are obtained by uploading the files to the Unvired Platform using the attachmentrequest flow
headerparametersKey-ValueFalseJSON array of header parameters to pass to this call
postparametersKey-ValueFalseJSON array of post parameters to pass to this call
bodyStringFalseData to be posted as raw body to the endpoint
failonerrorBooleanFalseFalseIf this is a non-critical step in the flow, failonerror can be set to false so that the flow will continue
OutputTypeValue
resultStringThe result of the REST execution
errorStringThe error from the REST execution if any
NavigationComment
SUCCESSIf the REST call executed successfully
FAILUREIf there was an error while executing the REST call

Execute any SAP RFC or BAPI function on an SAP server. The authentication for the endpoint is provided via the SystemProperty file

  1. Add or choose an existing system providing the SAP server details
  2. Choose the function
  3. Select the Input and Output structures and the mapping for input
  4. Add other optional parameters that are necessary
  5. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  6. Save
ParamTypeRequiredDefaultDescription
systemStringTrueThe REST system endpoint configuration
operationStringTrueExecuteThe SAP operation
acceptStringTrueapplication/jsonThe accept type
functionStringTrueThe BAPI or RFC to execute
dataJSONTrueThe data for the function call
transactionBooleanFalseFalseIf an SAP transaction is required or not
OutputTypeValue
resultStringThe result of the REST execution
errorStringThe error from the REST execution if any
NavigationComment
SUCCESSIf the REST call executed successfully
FAILUREIf there was an error while executing the REST call

Run a SQL query on a database or insert/update/delete data directly using JSON input

  1. Add or choose an existing database system
  2. Add other optional parameters that are necessary
  3. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
systemStringTrueThe Database system configuration
queryStringFalseFalseThe query to execute on the database.
operationStringFalseThe database operation: insert, update or delete
keysStringFalseThe keys of the table(s) for the specified operation
dataJSONFalseThe data to be persisted in the database as JSON for the specified operation
flattenoutputBooleanFalseFalseFlatten output if single row of data
errormessageonnodataStringFalseIf no data found has to be treated as an error, set this error message
OutputTypeValue
resultStringThe result of the DB execution
errorStringThe error from the DB execution if any
NavigationComment
SUCCESSIf the DB call executed successfully
FAILUREIf there was an error while executing the DB call or if errormessageonnodata is set and no data found

Run a Stored Procedure on a database

  1. Add or choose an existing database system
  2. Set the stored procedure name to execute
  3. Add other optional parameters that are necessary
  4. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  5. Save
ParamTypeRequiredDefaultDescription
systemStringTrueThe Database system configuration
spnameStringTrueThe stored procedure name
spinputJSONTrueThe input for the stored procedure (SP) specified above. A valid input provides the input and output parameters as JSON
errormessageonnodataStringFalseIf no data found has to be treated as an error, set this error message
{"whereclause":{"type":"in","value":"'colname'=2"}, "countrows":{"type":"OUT"}}

Here the parameter whereclause is an input parameter and has the value ‘colname=2’ and countrows is an output parameter

OutputTypeValue
resultStringThe result of the stored procedure execution
errorStringThe error from the stored procedure execution if any
NavigationComment
SUCCESSIf the stored procedure executed successfully
FAILUREIf there was an error while executing the stored procedure or if errormessageonnodata is set and no data found

Query a Microsoft Active Directory Service for user and other information

  1. Add or choose an existing MS Active Directory system
  2. Choose the desired action a. Authenticate: Authenticate the give domain, user and password on the ADS server
    b. GetAttributes: Retrieves the given User’s attributes from the ADS
    c. SetAttribute: Sets the provided attrubute for the user. Attributes may be added (Add), changed (Replace) or deleted (Delete) as specified in the input
    d. ListObjects: Retrieves a list of users matching the listing (input) criteria
    e. SearchObjects: Searches for a list of users matching the searc (input) criteria
  3. Add other optional parameters that are necessary. Depending on the Action, additional parameters need to be provided
  4. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  5. Save
ParamTypeRequiredDefaultDescription
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
systemStringTrueThe Active Directory system configuration
actionStringTrueThe action to perform on the Active Directory server (Authenticate, GetAttributes, SetAttribute, ListObjects, SearchObjects)
operationStringFalseThe operation to perform, required if action is SetAttributes (Add/Replace/Delete)
searchcontrolsStringFalseThe scope of the search to be performed, required if action is SearchObjects (Object, OneLevel, SubTree)
fieldStringFalseThe attibute to modify or the field to search for (e.g. sAMAccountName)
valueStringFalseThe value to set for the attibute or the field value to search for
basednStringFalsebase DN or point from where to search for users, specified here or in system configuration
domainStringFalseADS domain of the authenticating user, specified here or in system configuration
userStringFalseADS user id of the authenticating user, for other operations can be specified here or in system configuration
passwordSensitiveFalseADS password of the authenticating user, for other operations can be specified here or in system configuration
OutputTypeValue
resultStringThe result of the ADS operation specified
errorStringThe error if any from running the ADS operation
NavigationComment
SUCCESSIf the operation executed successfully
FAILUREIf there was an error while executing the operation

Execute any OData request on a remote server. The authentication for the endpoint is provided via the SystemProperty file

  1. Add or choose an existing database system
  2. Set the metadata to the OData definition from the service metadata. Use the Odata Expression Builder as required
  3. Choose the operation
    a. Create: Create an entity b. Update: Update an entity c. Merge: Merge an entity d. Delete: Delete an entity e. Select: Search for entities based on filter f. Read: Read/Get an entity
  4. Set the desired entity name
  5. Add other optional parameters that are necessary
  6. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  7. Save
ParamTypeRequiredDefaultDescription
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
systemStringTrueThe OData system configuration
metadataJSONTrueMetadata of Entities and fields to retrieve/save as part of this operation
operationStringTrueThe operation to perfor (Create, Update, Merge, Delete, Select, Read)
entityStringTrueName of the entity to operate on
entitydataJSONFalseThe entity to process
filterStringFalseRefer OData documentation to provide the filter https://www.odata.org/getting-started/basic-tutorial/#filter
parametersStringFalseRefer OData documentation to provide the filter https://www.odata.org/getting-started/basic-tutorial/#count
expandStringFalseRefer OData documentation to provide the filter https://www.odata.org/getting-started/basic-tutorial/#expand
errormessageonnodataStringFalseIf no data found has to be treated as an error, set this error message
[{"entitySet":"Customers","entityType":"customer","keys":["CustomerID"],"fields":[{"name":"CustomerID","type":"String","nullable":false},{"name":"CompanyName","type":"String","nullable":false}],"navigation":["Orders","CustomerDemographics"]}]
OutputTypeValue
resultStringThe result of the OData execution
errorStringThe error if any from running the OData service
NavigationComment
SUCCESSIf the operation executed successfully
FAILUREIf there was an error while executing the operation or if errormessageonnodata is set and no data found

Upload and Download files from an FTP server

  1. Add or choose an existing FTP system
  2. Set the FTP action (Get, Put, Delete, Create Directory, List, Rename)
  3. Choose Transfer Mode (Ascii/Binary) and Connection Mode (Active/Passive)
  4. Set the remote directory
  5. Add other optional parameters that are necessary
  6. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  7. Save
ParamTypeRequiredDefaultDescription
systemStringTrueThe FTP system configuration
operationStringTrueChoose the operation from Get, Put, Delete, CreateDir, List, Rename
modeStringTrueChoose the mode from ASCII, Binary
connectionmodeStringTrueChoose the connection mode from Active and Passive
currentdirectoryStringTrueThe remote directory to operate in
filenameStringFalseThe file to upload or download. For listing a regex to filter can be passed. For rename operation, the remote source file name with full path. Required for operation Get, Put, Delete and Rename (Optional for List)
attachmentidStringFalseThe attachment ID of the file to upload to FTP server from cache. Required for operation Put
newdirectoryStringFalseThe directory to create within the working directory. Required for operation CreateDir
newfilenameStringFalseFor rename operation the remote destination file name with full path
mimetypeStringFalseThe mime type of the file to upload
OutputTypeValue
resultStringThe result of the FTP command execution
errorStringThe error from the FTP command execution if any
NavigationComment
SUCCESSIf the FTP command executed successfully
FAILUREIf there was an error while executing the FTP command

Execute any Java function (Process Agent) that is designed and developed using the Unvired Modeller

  1. Choose the library that has the function that needs to be executed
  2. Choose the function that needs to be executed (based on the Library selected above)
  3. Add as many inputs as may be required for the function. You will need to use any documentation provided for the function or check with the developer. Every input is added as a key-value pair and will be posted to the function in the right format
  4. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  5. Save
ParamTypeRequiredDefaultDescription
functionStringTrueFunction that needs to be executed
inputKey-ValueFalseChoose as many key value pairs providing the parameter name and the value that forms to input to the function
OutputTypeValue
resultStringThe result of the function execution
errorStringThe error if any from running the function
NavigationComment
SUCCESSIf the function executed successfully
FAILUREIf there was an error while executing the function

Execute a Python script snippet as part of the flow

  1. Choose all the input parameters that are required for the Python script using the Expression Builder
  2. Click Generate to generate the function stub. Add your code to the execute() method only
  3. Any additional local functions you require can be added after this method and before the main reference section
  4. Follow the inline comments and edit the Python code as required
  5. Outputs that need to be returned from the function and available for subsequent flow steps are returned as part of a result[] JSON dictionary.
  6. Save
ParamTypeRequiredDefaultDescription
inputStringTrueComma separated list of input parameters that are required as input for the Python script
functionStringTrueChoose the function that needs to be executed
ScriptPythonTrueThe skeleton of the script is generated for you. Subsequently when changes are made to the input parameters, the input propagation will be automatically regenerated. Outputs that need to be returned from the function and available for subsequent flow steps are returned as part of a result[] JSON dictionary. Follow the inline comments to ensure proper syntax and structure
OutputTypeValue
resultStringAll the variables that are assigned to the result[] JSON dictionary
errorStringThe error if any from running the function present in the result[] dictionary
NavigationComment
SUCCESSIf the function executed successfully
FAILUREIf there was an error while executing the function

Execute a JavaScript snippet as part of the flow

  1. Choose all the input parameters that are required for the JavaScript using the Expression Builder
  2. Click Generate to generate the function stub. Type in your code in the execute() method only
  3. Any additional local functions you require can be added after this method
  4. Follow the inline comments and edit the JavaScript code as required
  5. Outputs that need to be returned from the function and available for subsequent flow steps are returned as part of a result[] JSON dictionary.
  6. Save
ParamTypeRequiredDefaultDescription
inputStringTrueChoose all the input parameters that you require for the Pytho script to operate on
functionStringTrueChoose the function that needs to be executed
ScriptJavaScriptTrueThe skeleton of the script is generated for you. Subsequently when changes are made to the input parameters, the input propagation will be automatically regenerated. Outputs that need to be returned from the function and available for subsequent flow steps are returned as part of a result[] JSON dictionary. Follow the inline comments to ensure proper syntax and structure
OutputTypeValue
resultStringAll the variables that are assigned to the result[] JSON dictionary
errorStringThe error if any from running the function present in the result[] dictionary
NavigationComment
SUCCESSIf the function executed successfully
FAILUREIf there was an error while executing the function

Creates a new form / formset (and the corresponding task) and assigns it to a team or user

  1. Choose the Form from the dropdown. If the technical name of the form has to be picked up from a different form field (for e.g. based on a user’s choice a particular form has to be created), choose form field and select the form field
  2. Enter the comment to inform the user of the need of this form assignment to them
  3. Add any of the optional parameters to provide more input to the creation
  4. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  5. Save
ParamTypeRequiredDefaultDescription
formnameStringTrueThe (technical) formname to create a submission
userStringFalseUser (named user who is part of the company/domain) to whom the form needs to be assigned to.
teamStringFalseTeam to whom the form needs to be assigned to. Note that either user or team needs to be provided
commentStringTrueHelpful notes to fill the form
formdataJSONFalseData to prefill the form if required
relatedtaskStringFalseProvide the related task id if this form is a consequence of the other form. It could be for e.g. the form that is currently creating this new form
tasktypeStringFalsefillChoose from fill or review
priorityStringFalselowChoose the priority for filling this form. Acceptable values are low, medium and high
duedateDateFalseProvide an optional due-date by when the form has to be completed. MM/DD/YYYY format.
extreferenceStringFalseExternal reference for the task. For e.g if this form is being created due to a Service Order in Salesforce, the extreference can be set to the Service Order ID of Salesforce for later association
OutputTypeValue
resultStringThe task ID of the form / formset created
errorStringThe error from the creation if any
NavigationComment
SUCCESSIf the form / formset was created successfully
FAILUREIf there was an error while creating the form / formset

Updates the (current) form and saves it. Use this operation if you want to update the data that has been submitted and make changes to it and save. For e.g. the external system might compute certain values that need to be also saved in the form.

  1. Set the updated form data
  2. Add any of the optional parameters to provide more input to the creation
  3. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
updateddataJSONTrueForm data to update and save
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
extreferenceStringFalseExternal reference for the task. For e.g if this form is being created due to a Service Order in Salesforce, the extreference can be set to the Service Order ID of Salesforce for later association
OutputTypeValue
resultStringThe data of the updated form
errorStringThe error from the update if any
NavigationComment
SUCCESSIf the form data was updated successfully
FAILUREIf there was an error while updating the formdata

Assigns the (current) form to another user. You can also unassign (delete) a user from a form if they are not required any longer.

  1. Enter a comment for the change
  2. Choose the user to assign/unassign
  3. Alternatively you can choose a team to assign/unassign
  4. Set the parameter remove to true to unassign
  5. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  6. Save
ParamTypeRequiredDefaultDescription
commentStringTrueHelpful notes for the user/team
userStringFalseUser (named user who is part of the company/domain) to whom the form needs to be assigned to.
teamStringFalseTeam to whom the form needs to be assigned to. Either one of user or team needs to be provided
removeBooleanFalseFalseSet to true to unassign the form
OutputTypeValue
resultStringIf the form is assigned or unassigned
errorStringThe error from the assignment or unassignment if any
NavigationComment
SUCCESSIf the form data was assigned successfully
FAILUREIf there was an error while assigning the form

Reads the form identified by the task id (and submission id if form set) and returns the data. Useful if data from an already filled in form is needed for any other operation later.

  1. Enter the task Id that identifies the submission uniquely.
  2. Enter the submission Id also if it task refers to a form set.
  3. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
taskidStringTrueUnique ID identifying the task to fill the form
submissionIdStringFalseUnique ID identifying the form submission (required if the task is for a formset)
teamStringFalseTeam to whom the form needs to be assigned to. Either one of user or team needs to be provided
removeBooleanFalseFalseSet to true to unassign the form
OutputTypeValue
resultStringIf the form is assigned or unassigned
errorStringThe error from the assignment or unassignment if any
NavigationComment
SUCCESSIf the form data was assigned successfully
FAILUREIf there was an error while assigning the form

Search submissions matching the criteria provided. At least one of the search criteria (users, teams, fornname, status or date) is required

  1. Enter any one of the search criteria for searching for submissions
  2. Enter the submission Id also if it task refers to a form set.
  3. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
formnameStringFalseThe technical form name to search for submissions
returnfieldsStringFalseList of comma separated field names to return as part of search fields in addition to the standard search fields
completedbyusersStringFalseUser(s) who have completed the forms
completedbyteamsStringFalseTeam(s) who have completed the forms
submitstartdateDateFalseSubmissions that were submitted after this date (format based on user’s locale)
submitenddateDateFalseSubmissions that were submitted before this date (format based on user’s locale)
statusStringFalseStatus of the forms to search for (open, inprogress, completed, archived, failed)
formdataJSONFalseSearch based on form data. The input is a JSON object of fieldname:value. Multiple fields can be included.
extreferenceStringFalseExternal reference to find submissions
OutputTypeValue
resultJSONJSON array of submissions matching the criteria
errorStringThe error from the search if any
NavigationComment
SUCCESSIf the search was successful
FAILUREIf there was an error during the search

Create a link to share with external users who do not have a login to the forms system

  1. Enter task ID to share, for current you can set it to ${taskid}
  2. Choose the share type. Public will allow anyone with the common URL to submit data and private can be accessed only by the user with the URL (each private share generates a unique share URL)
  3. Enter the days for the share to be valid
  4. Enter the email ids to share with (These users should already be present as external users in the system)
  5. Choose if (in private share only) users can save and return to the form later or they need to complete it in one session
  6. Optionally disable email invite (if the URL is going to be shared otherwise for e.g. maybe via text)
  7. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  8. Save
ParamTypeRequiredDefaultDescription
taskIdStringTrueTask ID identifying the form to be shared
sharetypeStringTrueThe type of shared link to create. Public share can be accessed by anyone with the link, private share links are for sharing with the specified users email
expirydaysNumberTrueThe number of days until when the shared link is valid
sharetoStringFalseComma separated list of email ids for sharing, required only if share type is private
draftsaveBooleanFalseFalseAllow users to save the form with partly filled data and fill later, required only if share type is private
sendshareemailBooleanFalseTrueShould an email with a link be sent?
OutputTypeValue
resultStringShare link on success
errorStringThe error from the share if any
NavigationComment
SUCCESSIf the share was successful
FAILUREIf there was an error during the share

Archive the form and create a link to the archived data to view it. Archived data cannot be modified any longer.

  1. Enter task ID to archive, for current you can set it to ${taskid}
  2. Enter the submission Id also if it task refers to a form set.
  3. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
taskIdStringTrueTask ID identifying the form to be shared
submissionIdStringFalseUnique ID identifying the form submission (required if the task is for a formset)
OutputTypeValue
resultStringArchive link on success
errorStringThe error from the archive operation if any
NavigationComment
SUCCESSIf the archive was successful
FAILUREIf there was an error during the archive operation

Export the form to PDF

  1. Enter task ID to export to PDF, for current you can set it to ${taskid}
  2. Enter the submission Id also if it task refers to a form set.
  3. Choose the orientation desired (portrait or landscape)
  4. Enter the Header and Footer text if you want to override defaults from settings
  5. Optionally choose if the flow has to stop / fail if the PDF creation failed for some reason
  6. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  7. Save
ParamTypeRequiredDefaultDescription
taskIdStringTrueTask ID identifying the form to be shared
submissionIdStringFalseUnique ID identifying the form submission (required if the task is for a formset)
orientationStringFalseThe orientation for generating the PDF (portrait or landscape)
headerHTMLFalseThe PDF header HTML
footerHTMLFalseThe PDF footer HTML
failonerrorBooleanFalseFalseIf this is a non-critical step in the flow, failonerror can be set to false so that the flow will continue
OutputTypeValue
resultStringAttachment ID of the cached PDF file if successful
errorStringThe error from the PDF export if any
NavigationComment
SUCCESSIf the PDF was successfully exported
FAILUREIf there was an error during the PDF export

Send an alert to a user or team regarding a form they are working on

  1. Enter task ID to attache the alert to, for current you can set it to ${taskid}
  2. Choose the orientation desired (portrait or landscape)
  3. Enter the Header and Footer text if you want to override defaults from settings
  4. Optionally choose if the flow has to stop / fail if the PDF creation failed for some reason
  5. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  6. Save
ParamTypeRequiredDefaultDescription
taskIdStringTrueTask ID identifying the form to be shared
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
usersStringFalseUser (named user who is part of the company/domain) to whom the alert needs to be sent to.
teamsStringFalseTeams to whom the alert needs to be sent to. Either users or teams needs to be specified
commentStringTrueThe alert message / comment
severityStringFalseInfoThe alert severity. Choose from Error, Warning, Info, Mention
failonerrorBooleanFalseFalseIf this is a non-critical step in the flow, failonerror can be set to false so that the flow will continue
OutputTypeValue
resultStringAlert text on success
errorStringThe error from the alert creation if any
NavigationComment
SUCCESSThe alert was sent successfully
FAILUREIf there was an error during the alert creation

Manage master data. Use this operation to create flows that download master data from backend systems such as SAP and replace the data in the Turbo Apps database.

  1. Compute the data and set it
  2. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  3. Save
ParamTypeRequiredDefaultDescription
masterdatanameStringTruehe Masterdata entity to update
dataJSONTrueJSON object with rows of data for udpating the database
OutputTypeValue
resultStringMessage that all master data is updated successfully
errorStringThe error while performing the masterdata operations
NavigationComment
SUCCESSIf the master data creation / modification / deletion was successful
FAILUREIf there was an error while performing the required action on the master data

Manage master data. Use this operation to Add, Modify or delete a single Master data record

  1. Compute the data and set it
  2. Choose the operation mode - Update or Delete. Update will insert if row not existing
  3. Delete and Update will be performed based on the key field selected in the master data design
  4. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  5. Save
ParamTypeRequiredDefaultDescription
masterdatanameStringTruehe Masterdata entity to update
operationStringTrueUpdateUpdate or delete data. Update will insert if not existing
dataJSONTrueJSON object with row of data for udpating or deleting from the database
OutputTypeValue
resultStringMessage that all master data is updated successfully
errorStringThe error while performing the masterdata operations
NavigationComment
SUCCESSIf the master data creation / modification / deletion was successful
FAILUREIf there was an error while performing the required action on the master data

Read master data. Use this operation to read master data with an optional filter

  1. Provide a filter condition to filter the master data
  2. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  3. Save
ParamTypeRequiredDefaultDescription
masterdatanameStringTruehe Masterdata entity to update
filterStringFalseThe filter condition to restrict the master data
OutputTypeValue
resultStringMessage that all master data is read successfully
errorStringThe error while performing the masterdata read
NavigationComment
SUCCESSIf the master data read was successful
FAILUREIf there was an error while reading the master data

Run a JSONata expression on the source data to extract the required data

  1. Choose from either Forms Fields or Previous Nodes
  2. Click on the expression builder
  3. Paste a sample JSON to operate on (It is expected that at run time, the variable you selected at step 1 will have this data).
  4. Type in your JSONata expression. Refer the JSONata Docs for more information.
  5. Use the JSONata Expression Builder to check the sameple output and make sure that the data is what you need and has no errors.
  6. Save
ParamTypeRequiredDefaultDescription
sourcedataJSONTrueThe input JSON data to extract from.
mapexpressionStringTrueChoose the function that needs to be executed
OutputTypeValue
resultStringThe extracted JSON data
errorStringThe error from the JSONata extraction
NavigationComment
SUCCESSIf the extraction executed successfully
FAILUREIf there was an error while running the extraction

Parse the CSV file or data and create an array of JSON objects or viceversa for further processing

  1. Choose the input data format (CSV or JSON)
  2. Choose the file or data to process
  3. Use the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
inputformatStringTrueCSVThe input format to convert - CSV or JSON
attachmentidStringFalseThe cached file ID to convert
dataStringFalseThe CSV or JSON data. Either attachmentID or data needs to be provided
OutputTypeValue
resultStringThe converted CSV or JSON data
errorStringThe error from the CSV conversion
NavigationComment
SUCCESSIf the conversion executed successfully
FAILUREIf there was an error while converting

Evaluate a condition to decide on what the next step in the flow should be. Conditions are typical If-Then-Else steps. Conditions can be chained in that Then or Else can lead to other condition evaluations.

  1. Use the Query Builder UI to add And / Or condition groups.
  2. For example if And is chosen, all expressions within that will be combined with an AND operator. Similarly if Or is chosen, all expressions within that will be combined with an OR operator.
  3. Add as many condition groups and expressions within to make up the condition.
  4. Select from form fields, calculated expressions and previous step results for the condition expressions.
  5. Save the condition
ParamTypeRequiredDefaultDescription
queryJSONTrueThe JSON representation of the designed condition
OutputTypeValue
resultStringThe result of the evaluation of condition as a True or False
errorStringThe error from the JSONata extraction
NavigationComment
THENCondition evaluated to a True, execute the THEN step
ELSECondition evaluated to a False, execute the ELSE step
FAILUREIf there was an error while evaluating the condition

Evaluate expressions and store results that can be used in following flow steps. Expressions can be made from form fields, previous results and combined with functions as required. Expressions already defined can be used in further computations.

  1. You can add a simple Expression (String/Math) or JSONata expression to operate on JSON data
  2. Once added set the variable name.
  3. Expression: a. Set the variable type (String, Number, Date) b. Use the Expression Builder to combine fields and functions
  4. JSONata expression:
    a. Set the variable type (String, Number, Date) b. Choose the field or other results on which the JSONata expression has to be applied c. Use the JSONata Expression Builder to build and test the expression
  5. Add as many variables as required (maximum 50 in each calculat enode)
  6. Save the condition

Functions supported as part of Expressions

Section titled “Functions supported as part of Expressions”

A number of functions are supported as part of the calculate expression. Complete list below:

CategoryNameInputDetailsExample
DateadddatesDateFld1, DateFld2Adds two dates (form fields formats are used)adddates(${start}, ${end})
diffdatesDateFld1, DateFld2Difference of DateFld2 - DateFld1 (form fields formats are used)diffdates(${end}, ${start})
advancedateDateFld, Number, UnitAdvances date in field by number of days,weeks,months or years as specified by unit. If time in field then unit is hours,minutes or secondsadvancedate(${start}, days, 2)
Number+NumFld1, NumFld2Adds two numeric fields${num1} + ${num2}
-NumFld1, NumFld2Subtracts two numeric fields${num1} - ${num2}
*NumFld1, NumFld2Multiplies two numeric fields${num1} * ${num2}
/NumFld1, NumFld2Divides two numeric fields${num1} / ${num2}
roundNumFld, DecimalsRounds numeric field to desired decimalsround(${num1},2)
truncateNumFld, DecimalsTruncates numeric field to desired decimalstruncate(${num1},2)
StringassignStrFldAssigns string value to variableassign(“Text to assign”)
concatStrFld1 to StrFldNConcatenates all the string values and/or fieldsconcat(“This”, “is”, “a”, ${StrFld})
trimStrFldTrims leading and trailing spacestrim(${StrFld})
uppercaseStrFldUppercase of string fielduppercase(${StrFld})
lowercaseStrFldLowercase of string fieldlowercase(${StrFld})
lengthStrFldReturns length of string (number)length(${StrFld})
indexofStrFld, SearchStrReturns index of SearchStr in StrFld if found, else -1indexof(${StrFld},“search”)
substringStrFld, Start, EndSubstring from Start index to End index (0 based)substring(${StrFld}, 1, 3)
searchStrFld, SearchStrReturns JSON array of all occurences of search string, empty array if not foundsearch(${StrFld}, “search”)
searchregexStrFld, RegexReturns JSON array of all occurences of regular expression, empty array if not foundsearch(${StrFld}, “search”)
replaceStrFld, Search, ReplaceReplaces all occurences of search string with replace stringreplace(${StrFld}, “search”, “replace”)
replaceregexStrFld, Regex, ReplaceReplaces all occurences of search string with replace stringreplace(${StrFld}, “regex”, “replace”)
splitStrFld, PatternSplits string field into a JSON array based on patternsplit(${StrFld}, ”,“)
base64encodeStrFldEncodes string field base64base64encode(${StrFld})
base64decodeStrFldDecodes base64 stringbase64decode(${StrFld})
encryptStrFldEncrypts string field AES256encrypt(${StrFld})
decryptStrFldDecrypts string field AES256decrypt(${StrFld})
ParamTypeRequiredDefaultDescription
queryJSONTrueThe JSON representation of the designed condition
OutputTypeValue
variable-name(s)StringResult of the expressio
errorStringThe error from the evaluation
NavigationComment
SUCCESSIf the evaluation executed successfully
FAILUREIf there was an error while evaluating the expression

Send emails to users as part of the flow. This could be notifications or other messages as required.

  1. Set the subject of the email. You can use form fields and other results as part of the subject text
  2. Set the message of the email. You can use form fields and other results as part of the message text
  3. Add users and/or groups who are part of the Forms application. You can also add external users by typing in their email directly
  4. Add any attachments that you may need. These could be PDF versions of the filled form or files that have been attached to the form. If needed use the Data Mapper to extract the Attachment IDs from the forms which can then also be attached to the email.
  5. Save
ParamTypeRequiredDefaultDescription
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
systemStringTrueThe REST system endpoint configuration
usersStringFalseList of users to send email to
groupsStringFalseList of groups to send email to
emailsStringFalseList of external email ids to send email to
subjectStringTrueEmail subject
messageStringTrueEmail message
attachmentStringFalseComma separated list of attachments to attach to the email
failonerrorBooleanFalseFalseIf this is a non-critical step in the flow, failonerror can be set to false so that the flow will continue
OutputTypeValue
resultStringThe result of the send email operation
errorStringThe error from the email sending
NavigationComment
SUCCESSIf the send email executed successfully
FAILUREIf there was an error while executing the send email call

Upload and/or Download a file to/from the File Store (cache) in the BASE64 or text format.

  1. Set the attachment ID to download.
  2. Save
ParamTypeRequiredDefaultDescription
attachentidStringTrueUnique ID identifying the attachment to retrieve. Could be the output of a PDF conversion call or attachments that are uploaded as part of the form etc.
formatStringFalsebase64Format to return the data in. Default is base64, else pass text for utf-8 text
OutputTypeValue
resultStringThe base64 or utf-8 text version of the file contents
errorStringThe error from the file upload or download
NavigationComment
SUCCESSIf the file was uploaded or downloaded successfully
FAILUREIf there was an error while uploading or downloading the file

A simple operation that publishes the respponse of the workflow

  1. HTTP return code (default 201)
  2. Either the result or error for response has to be provided.
  3. Optionally HTTP headesrs can also be passed in
  4. Save
ParamTypeRequiredDefaultDescription
responsetypeStringTrueSuccessSuccess or Failure to return
httpcodeNumberTrue201HTTP code to return
bodyStringTrueContents to return in HTTP body
headersKey-ValueFalseChoose as many key value pairs providing the parameter name and the value to add to the HTTP response header
OutputTypeValue
resultStringThe configured result
errorStringThe configured error if any
NavigationComment
SUCCESSIf responsetype is SUCCESS, the operation results in a success
FAILUREIf responsetype is ERROR, the operation results in an error

Execute any sub flow from the parent flow

  1. Choose the sub flow to execute
  2. Choose the mode of execution (As part of parent, Separately in sequence or parallel)
  3. Save
ParamTypeRequiredDefaultDescription
flownameStringTrueThe flow to execute
flowinputJSONFalseThe special input for the sub flow
modeStringTrueAs part of parent flow, Asynchronously in sequence, Asynchronusly in parallel
OutputTypeValue
resultStringThe subflow result
errorStringThe subflow error if any
NavigationComment
SUCCESSIf subfow is executed successfully
FAILUREIf subfow is executed with an error

Execute the subsequent step in a loop with an element of the array data

  1. Choose the data to iterate on
  2. Choose the format of the aggregated result of the loop (JSON Array or CSV)
  3. Save
ParamTypeRequiredDefaultDescription
iterabledataJSONTrueThe array to iterate on
aggregateddataformatStringTrueJSON Array or Comma separated values
OutputTypeValue
resultStringThe aggreagated result
errorStringThe error if any
NavigationComment
SUCCESSIf all loop executions executed successfully
FAILUREIf any loop execution is executed with an error

:fontawesome-solid-code-branch: approvalworkflow

Section titled “:fontawesome-solid-code-branch: approvalworkflow”

Execute the workflow approval steps

  1. Choose the approval levels required and the approvers for each level
  2. Handle the different decisions
  3. Use the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  4. Save
ParamTypeRequiredDefaultDescription
approvaldataJSONTrueThe approval levels and approvers
approvalformStringTrueThe form being approved
formdataJSONTrueThe input form data to calculate from. Will be set by default, override if form data has been updated in flow or as required
OutputTypeValue
resultStringThe result of the apprvoal
errorStringThe error from the approval
NavigationComment
APPROVEDIf the approval is completely approved
REJECTEDIf the approval is rejected
RETURNEDIf the approval is returned to requestor
CONTINUEIf the approval cycle has to still continue
FAILUREIf there was an error while approving

Manage contacts (external users). For external form sharing with contacts, the external users need to be maintained in the system. Use this operation to Create/Modify/Delete contacts.

  1. Choose the action to perform from Create, Update and Delete
  2. Set the First Name if creating or updating it
  3. Set the Last Name if creating or updating it
  4. Set the Email ID of the external user
  5. Choose if the external user is private to you or to be shared with other members of your organization
  6. Enter the phone number if required
  7. For all variables make use of the Expression Builder to inject fields and other results that will be substituted with actual values at run time
  8. Save
ParamTypeRequiredDefaultDescription
actionStringTrueCreateChoose the action to perform with the external user (Create/Update/Delete)
firstnameStringFalseFirst Name needs to be provided for Create and optionally for update
lastnameStringFalseLast Name needs to be provided for Create and optionally for update
emailStringTrueEmail ID of the external user. External users are uniquely identified by their email id.
privateBooleanFalseFalsePublic contacts will be shared with other users within your organization
phoneStringFalsePhone number of the external user
OutputTypeValue
resultStringUnique ID of the created/modified/deleted user
errorStringThe error from the operation if any
NavigationComment
SUCCESSIf the external user creation / modification / deletion was successful
FAILUREIf there was an error while performing the required action on the external user