Formula
Overview
A Formula is a Logic Block that accepts one or more inputs and produces a single output value. Despite the name, a Formula is not limited to mathematical computations—it can perform string manipulation, DateTime computation, data lookups, or any calculation that produces a single result.
Formulas are the most basic and versatile Logic Block type. They're ideal for:
- Mathematical calculations (totals, percentages, averages)
- String operations (formatting, concatenation, extraction)
- Date calculations (age, duration, deadlines)
- Conditional expressions (if-then-else logic)
- Data lookups (retrieving values from related records)
Structure
A Formula consists of:
| Component | Description |
|---|---|
| Name | Unique identifier for the formula |
| Description | What the formula calculates |
| Inputs | One or more typed input parameters |
| Output | A single typed output value |
| Expression | The calculation logic |
Expression Language
Formula expressions are written using the Flowon Expression Language—a comprehensive library of over 200 functions and operators for calculations, transformations, and data manipulation.
The Expression Language includes:
- Operators: Arithmetic, comparison, logical, and string operators
- Text Functions: String manipulation, formatting, searching, and extraction
- Numeric Functions: Mathematical operations, rounding, aggregation
- Date & Time Functions: Date arithmetic, formatting, extraction, and comparison
- Logical Functions: Conditional expressions, null handling, type checking
- Entity Functions: Record retrieval, field access, relationship navigation
- Collection Functions: List operations, filtering, aggregation
- Conversion Functions: Type conversion, parsing, formatting
For complete documentation of all functions, operators, and syntax, see the Flowon Expression Language Reference.
Live Demo
Adjust the inputs and watch the expression evaluate in real time — each intermediate step updates instantly.
Example: Calculate Order Total
Name: CalculateOrderTotal
Inputs:
Quantity(Integer): Number of itemsUnitPrice(Money): Price per itemDiscountPercent(Decimal): Discount to applyTaxRate(Decimal): Tax rate
Output:
Total(Money): Final order total
Expression:
Subtotal = Quantity * UnitPrice
DiscountAmount = Subtotal * (DiscountPercent / 100)
TaxableAmount = Subtotal - DiscountAmount
TaxAmount = TaxableAmount * (TaxRate / 100)
Total = TaxableAmount + TaxAmount
Example: Calculate Customer Age
Name: CalculateAge
Inputs:
BirthDate(DateTime): Customer's birth date
Output:
Age(Integer): Customer's age in years
Expression:
DATEDIFF(BirthDate, TODAY()) / 365
Example: Format Full Name
Name: FormatFullName
Inputs:
FirstName(String): First nameMiddleName(String): Middle name (optional)LastName(String): Last name
Output:
FullName(String): Formatted full name
Expression:
IF(MiddleName != null && MiddleName != "",
CONCAT(FirstName, " ", MiddleName, " ", LastName),
CONCAT(FirstName, " ", LastName))
Example: Calculate Days Until Due
Name: DaysUntilDue
Inputs:
DueDate(DateTime): The due date
Output:
DaysRemaining(Integer): Number of days until due (negative if overdue)
Expression:
DATEDIFF(TODAY(), DueDate)
Example: Determine Shipping Cost
Name: CalculateShipping
Inputs:
OrderWeight(Decimal): Total weight in kgShippingZone(String): Destination zoneIsExpedited(Boolean): Express shipping requested
Output:
ShippingCost(Money): Calculated shipping cost
Expression:
BaseRate = IF(ShippingZone == "Local", 5.00,
IF(ShippingZone == "Regional", 10.00,
IF(ShippingZone == "National", 15.00, 25.00)))
WeightCharge = OrderWeight * 0.50
ExpeditedMultiplier = IF(IsExpedited, 2.0, 1.0)
ShippingCost = (BaseRate + WeightCharge) * ExpeditedMultiplier
Example: Lookup Customer Discount
Name: GetCustomerDiscount
Inputs:
CustomerId(Entity Reference): Reference to the Customer record
Output:
DiscountPercent(Decimal): Customer's discount percentage
Expression:
Customer = GET_ENTITY("contact", CustomerId)
Tier = Customer.CustomerTier
DiscountPercent = IF(Tier == "Platinum", 20,
IF(Tier == "Gold", 15,
IF(Tier == "Silver", 10, 0)))
Best Practices
Keep Formulas Focused: Each Formula should calculate one thing. If you need multiple related outputs, consider using a Decision Table instead.
Use Meaningful Names: Name your Formula based on what it calculates: CalculateOrderTotal, FormatAddress, DetermineEligibility.
Document Your Inputs: Use clear input names and descriptions so others understand what data to provide.
Handle Null Values: Always consider what happens if an input is null. Use IF statements or null-coalescing functions to handle missing data gracefully.
Break Down Complex Logic: If your expression becomes long and hard to read, consider splitting it into intermediate variables within the expression, or breaking it into multiple Formulas.
Test Edge Cases: Test your Formula with boundary values, null inputs, and unexpected data to ensure it behaves correctly in all scenarios.