Our next round of updates is here – say hello to our Formulaic Update!
As you may have guessed from the release name, this update involves a lot of improvements in the formula engine which drives so many dynamic scenarios across your apps. We’ve added a number of new formula functions and upgraded several others.
Beyond this, we’ve introduced formula capability into several new areas of the platform to allow you to build ever more customised app experiences.
We’ve also upgraded other areas along with a long list of minor fixes and improvements outlined below.
Formula Engine Improvements
This release includes a new set of List functions dedicated to gathering and working with lists of values – e.g. summing up a list of Form field answers matching a given pattern.
We think this will make many scenarios much simpler to implement, such as scoring or weighting cases where many survey questions need to be summed/counted for an overall score.
To this end, we’ve added the following List specific functions:
- LIST(pattern, filter)
Collects answers from fields with data names matching the given regular expression pattern. List results are typically used with functions like SUM()/COUNT() to calculate results on fields that follow a common naming convention – e.g. survey fields like q1, q2, q3 etc.
The second optional parameter applies a filter formula to the answers gathered, leaving only answers that pass the condition. - TOLIST(value, filter)
Converts the given value to a List. The value must be text containing delimited List elements – e.g. 34|76|9 – while an optional filter formula can also be specified. - IN(value, list), NOTIN(value, list)
Searches the given List for the given value, returning a true/false result. - COUNT(list), SUM(list) AVERAGE(list), MIN(list), MAX(list)
Returns an aggregate result based on a List of values. These functions previously only worked with repeat page/Table use only, now List results are also supported. - FIRST(list/repeatfield), LAST(list/repeatfield)
New functions which return the first or last value of a given List of values or repeat field answers.
We’ve also added/improved the following miscellaneous formula functions:
- PRIOR()
Returns prior answer value(s) for a Form field within a repeating Page and/or Table field. - DEVICENAME(), DEVICEOS(), DEVICEOSVERSION()
Provides access to device environment info - APPVERSION(), SCREENVERSION(), SCREENDATE()
Provides info about the current app and screen version - VAL()
Returns the currently stored answer value of the given field, useful for avoiding circular loop issues - CONTAINS()
Returns true/false based on whether a text value is found within another text value - INDEXOF()
Returns the zero-indexed position of a text value within another text value - FORMAT-NUM()
Now supports an optional 3rd parameter which lets you specify the desired culture to format the number with. This should help European and other customers who format decimals using comma instead of period characters. - All DS functions
All Data Source (DS) formula functions now support Form field references within filter formulae - All Repeat/Table functions
Several improvements have been made to ensure POSITION() and aggregate functions like COUNT() evaluate/refresh correctly when a repeat/row is added/deleted.
All of the above formula functions will appear in the next few days on the Formula Builder dialog of the secure website, available for use with the preview app version.
Detail Screen Upgrades
The Detail screen type now has a lot more options for customisation, including:
- Text and background styling options for all detail row lines
- Ability to embed formulae in static text of Labels and Detail positions in detail lines
- New Visibility option to apply conditional display of detail lines based on a true/false formula result
- New button functionality around detail line user interactions. Allows you to specify a button, text and/or icon combination to be displayed on the right hand side of your detail line.
- Support for referring to columns by name (instead of by index number) in formulae
Listing & Mapping Screen Improvements
- Listing & Mapping screen types now have a default filter formula option in the designer. Previously filtering formula could only be passed into these screens to filter data rows displayed. Any incoming filter formula parameters will override a default filter formula.
- Mapping screen now remains zoomed at the level/position when the user returns to a Mapping screen after navigating forward to another screen.
- Background synchronisations of the app do not reload Listing or Mapping screens if the user is interacting with the screen.
- Various fixes to Listing screen reloads as well as improvements to memory use around thumbnail images on Android devices.
- Support for referring to columns by name (instead of by index number) in formulae
Form Screen Improvements
- New “Always Trigger On Button Press” option on Action fields in Form designer.
By default, buttons only trigger dependent formulae once; on the first time a user taps. This new option allows you to specify that formulae must be triggered every time the button is pressed.
This is useful for scenarios such as counters/clickers where a number increases/decreases on each click.
e.g. you could increase a Number field every time an Action button is pressed by using a Dynamic Value formula of:
IF(NOTBLANK({{button}}), VAL(‘numfield’)+1, 0) - Action fields now also set their answer to be the title of the pressed button by default. This is useful for cases where you have multiple buttons in a field and need to run formulae based on which button was pressed.
- Bind to Data Source functionality now provides un-ambigious binding to selected row of a specific Choices/Data Source field, thus allowing multiple rows from the same Data Source to be updated at once within a Form.
- Added an option to customise the “Add New Row” button of a Table field in the Form designer.
- New Auto-Complete Pattern option on Choices fields in the Form designer – allows you to specify a custom regular expression for the app to use when matching user typed keywords against Choices rows.
Form Entry Editing
We know there are cases where Form entry data is incorrectly captured by an app user and thus needs to be updated. So we’ve added the ability to edit Form data on the secure website after it’s been uploaded. Users receive this ability via a new “Edit Data Entries” permission on the Edit User page of the secure website. Once granted permission, users will see an edit link on the View Entry page (accessed via the Data area -> select Form -> roll over entry row to select view entry).
Improvements to Vendor Billing
To date, our billing system allowed for vendor customers to have a billing-free “support user” in each of their client accounts – these users being identified via a specially formatted “$ prefix” email address – e.g.12345$support@company.com.
While we continue to support this prefixing approach, by default we now create support user accounts in new client accounts without this prefix. This is because we have improved our billing system to automatically identify support users as being any email address that already exists in your vendor master account.
Find out more about this in our Billing documentation area.
Other Improvements and Fixes
On the app side:
- New “Refresh Screen” user interaction option – useful for giving users a button to force a screen refresh (e.g. to load up thumbnail images in a Listing screen).
- Improved validation of numeric inputs in Number field
- Improvements to Android memory management of images
- Improvements to background sync, particularly around parallelising Data Source row downloads and supporting compression on Hosted GET calls.
- Improvements to read-only state of media type Form fields, allowing visibility and zoom of images but no editing when read-only.
- User meta-data changes now sent on every app sync, instead of only at app login.
- Fixes to scenario-specific cases on iOS where visibility of Form fields was not working correctly
- Fixes to issues with certain text operations on devices running Turkish culture/language
- Fixes to crashes resulting from scenario-specific user filters on Listing/Mapping screens
- Fix for AM/PM changes on Time fields not triggering formula updates
- Fix to crash bug when Form entry is Tasked directly back to the same user as part of a Process Step
On the website/platform side:
- Added “Bind to Global Value” option to hidden Form field types
- New option to disable the default behaviour of appending random text characters to the names of files generated from Form connectors
- GeoOp data source connector now supports custom query filtering – e.g. to return only active jobs instead of all
- SharePoint and Box connectors are no longer in Beta status. We have more upgrades for SharePoint planned, particularly around inserting/updating rows in SharePoint Lists.
- Removed case-sensitivity on email address for user (re)activations