Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Overview

This page contains information about how to use the formula builder within the Calculated control and conditional display areas of nFORM. 

Table of Contents

Formula Essentials

Introduction to Formulas

Formulas are powerful tools within Windsor applications that enable you to automate tasks, perform calculations, and manipulate data. They are essential for creating dynamic and interactive forms that adapt to user input and provide meaningful insights.

...

Formula syntax is the structure and rules that govern how formulas are written and interpreted. It consists of elements such as operators, operands, and functions.

Operators

Operators are symbols that perform operations on operands. Common operators include:

...

  • Addition (+)

  • Subtraction (-)

  • Multiplication (*)

  • Division (/)

  • Equality (==)

  • Inequality (!=)

  • Less than (<)

  • Greater than (>)

  • Less than or equal to (<=)

  • Greater than or equal to (>=)

  • Logical AND (&&)

  • Logical OR (||) (jump to example)

  • Logical NOT (!)

  • Ternary Operator ( ? )

Operands

Operands are the values or expressions that operators act upon. They can be numbers, strings, dates, or references to other cells or fields.

Functions

Functions are built-in routines that perform specific tasks, such as calculations, data manipulation, and text processing. They can take arguments (inputs) and return values (outputs).


Formula Building Techniques

...

Performing Null Checks

Null checks ensure that formulas handle missing or empty values appropriately. Common functions for null checks include:

  • ISNULL(): Checks if a value is null.

  • ISBLANK(): Checks if a value is null or an empty string.

  • COALESCE(): Replaces a null value with a specified alternative value.

...

Using the select() Function to Select Values Based on Cases

Select() Function Syntax

The select() function is used to select a value from a set of possible values based on a given case. It takes three arguments:

...

  1. The select() function evaluates the value of the variable FEE_CATEGORY.

  2. If the value of FEE_CATEGORY matches the case identifier in any of the case objects, the corresponding value from that case object is returned.

  3. If the value of FEE_CATEGORY does not match any of the case identifiers, the function returns an empty string.

...

Utilizing the LOOKUP() Function

The LOOKUP() function retrieves a value from a specified table based on a given identifier. It's commonly used for data lookup and retrieval.

...

Optimization Strategies

Optimizing formulas enhances their performance and efficiency. Here are some optimization strategies:

  • Use CONTAINS() instead of multiple TAG checks: The CONTAINS() function checks if a value exists within a list, while multiple TAG checks involve checking each tag individually. CONTAINS() is generally more efficient.

Rounding Numbers

Rounding involves adjusting numbers to a desired precision. Common rounding functions include:

  • ROUND(): Rounds a number to the nearest specified number of decimal places.

  • ROUNDUP(): Rounds a number up to the nearest specified number of decimal places.

  • ROUNDDOWN(): Rounds a number down to the nearest specified number of decimal places.

Contact Phone Property Access

Access contact phone-related properties using the new array properties: phoneNumber, phoneType, and phoneExtension. You can now access these properties directly without using array notation.

For example, instead of CONTACT.phoneNumber[0], you can use CONTACT.phoneNumber or first(CONTACT.phoneNumber).

To display a "home" phone number, use the following formula:

Code Block
lookup(`CONTACT`.phoneType=='Home', `CONTACT`.phoneNumber) 

The phones property is deprecated. Replace any references to phones with phoneNumber, phoneType, or phoneExtension in your formulas.

Formatting Dates

Date formats control how dates are displayed. The FORMAT() function enables formatting dates according to various styles.

Date Comparison

Date comparison involves evaluating relationships between dates. Common functions for date comparison include:

  • DATEDIFF(): Calculates the difference between two dates. (jump to example)

  • DATE(): Extracts the date component from a value.

  • TODAY(): Returns the current date.

Extracting Substrings

Extracting substrings involves retrieving specific portions of text strings. The LEFT() and RIGHT() functions extract substrings from the left and right ends of a string, respectively.

Data Type Conversion

Data type conversion involves changing the data type of a value. The NUMS() and DATES() functions convert values to numbers and dates, respectively.

This guide provides a foundational understanding of formulas in Windsor applications. For more in-depth explanations and advanced topics, please consult additional resources or seek guidance from experienced Windsor users.

Time/Date Duration Calculation

For Days:

Code Block
// Days
floor(dateDiff(date(formatDate(`ANTICIP_STRT_DT`,'ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_STRT_TM`, true),'HH:mm:ss [GMT]ZZ'), true),date(formatDate(`ANTICIP_END_DT`,'ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_END_TM`, true),'HH:mm:ss [GMT]ZZ'), true),'hours')/24) + ' day(s)' + ' '

For Hours:

Code Block
iff(formatDate(`ANTICP_END_TM`,'HH:mm:ss')<'12:00:00',
// Hours - when AM is after PM
dateDiff(date(formatDate('01/01/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_STRT_TM`, true),'HH:mm:ss [GMT]ZZ'), true),date(formatDate('01/02/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_END_TM`, true),'HH:mm:ss [GMT]ZZ'), true),'hours') + ' hour(s)' + ' '
,
// Hours - when PM is after AM
dateDiff(date(formatDate('01/01/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_STRT_TM`, true),'HH:mm:ss [GMT]ZZ'), true),date(formatDate('01/01/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_END_TM`, true),'HH:mm:ss [GMT]ZZ'), true),'hours') + ' hour(s)' + ' '
)

For Minutes:

Code Block
// Minutes
(dateDiff(date(formatDate('01/01/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_STRT_TM`, true),'HH:mm:ss [GMT]ZZ'), true),date(formatDate('01/02/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_END_TM`, true),'HH:mm:ss [GMT]ZZ'), true),'minutes') - 60*dateDiff(date(formatDate('01/01/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_STRT_TM`, true),'HH:mm:ss [GMT]ZZ'), true),date(formatDate('01/02/2001','ddd MMM DD YYYY') + ' ' + formatDate(date(`ANTICP_END_TM`, true),'HH:mm:ss [GMT]ZZ'), true),'hours')) + ' minute(s)'

...

Simple Conditional Formula Examples

Conditional formulas are powerful tools in Windsor applications that allow you to display different content based on certain conditions. They are like decision-making statements that evaluate whether a particular condition is true or false, and based on the outcome, they determine what information or action should, or should not, be displayed.

Question

Formula

Display when answer = Blue (The text selection is case sensitive)

Code Block
`SECT_D:D_COLOR`=="Blue"

Display when answer > 10 (num function converts the value to a number)

Code Block
num(`SECT_D:D_NUM`)>10

Display when answer = Yes

Code Block
`SECT_D:D_YN`=="Yes"

Display when answer = A Or D

Anchor
||
||

Code Block
`SECT_A:LTR_SINGLE`=='A'||`SECT_A:LTR_SINGLE`=='D'

Display when Question 1 = M OR Question 2 = X

Code Block
contains(`SECT_C:MULTI_MULTI_LTR_A`,'M')|| 
contains(`SECT_C:MULTI_MULTI_LTR_B`,'X')

Display when sum of Question 1 and Question 2 > 100 (num function converts the value to a number)

Code Block
sum(num(`SECT_E:E_VAL1`)+num(`SECT_E:E_VAL2`))>100

Display when the count of items >= 3

Code Block
count(`SECT_E:E_LTR_CNT`)>=3

Display when the text contains the word “show” (toLowerCase converts the text to all lower case and then in this example compares to the lower case value “show”)

Code Block
contains(toLowerCase(`SECT_E:E_TXT_CONTAIN`),"show")

Advance Conditional Formula Examples

Select Control Selection (Displayed Description) Exact Comparison Example

...

The following example looks for a number 5 characters in length utilizing numbers 0-9.

^[0-9]{5}$

Additional Resources

nFORM Conditional Formula Examples

...