Simply CRM supports advanced dynamic fields that allow administrators to build complex forms, calculators, and structured data inputs directly inside a record.
These fields use a SurveyJS-style JSON definition, which means admins can configure rich interfaces such as:
-
Dynamic tables (matrixes)
-
Calculated fields
-
Conditional logic
-
Multi-tab layouts
-
Structured data collections
-
Configurable calculators
Instead of creating dozens of traditional CRM fields, you can define an entire structured form inside a single JSON field.
How It Works
An Advanced JSON Field consists of two parts.
1. JSON Definition (admin configuration)
This defines what the user sees in the CRM interface.
It includes:
-
Field types
-
Layout
-
Calculations
-
Conditional logic
-
Structured data collections
The definition is stored in the JSON Definition property of the field.
2. JSON Data (record value)
When a user fills out the form:
-
The resulting values are stored as JSON on the record
-
The JSON structure mirrors the definition
-
The stored data can later be used in:
-
automation
-
reporting
-
integrations
-
workflows
-
Example stored data:
{
"totalMargin": 4200,
"totalCost": 11800,
"orderLines": [
{
"description": "Installation service",
"quantity": 2,
"unitPrice": 3000,
"lineTotal": 6000
}
]
}
Why Use JSON Fields?
Advanced JSON fields are useful when you need:
-
Complex calculations
-
Repeating rows
-
Structured objects
-
Configurable forms
-
Dynamic calculators
-
Multi-row pricing structures
Typical use cases include:
Use CaseExamplePricing calculatorsMargin / profit calculationsQuote buildersVendor pricing tablesProject estimationsTime + material breakdownStructured configurationsInstallation specificationsCost modelsBudget calculations
Layout Structure
SurveyJS normally uses pages, but in Simply CRM these are mapped to tabs.
This is configured in the meta section at the beginning of the JSON definition.
Example:
{
"meta": {
"pageNav": "tabs",
"tabsStyle": "top",
"tabLabels": "title"
}
}
Mapping:
SurveyJS ConceptSimply CRMPageTabPanelSectionQuestionField
Example JSON Structure
A simple configuration might look like this:
{
"meta": {
"pageNav": "tabs"
},
"pages": [
{
"name": "pricing",
"title": "Pricing Calculator",
"elements": [
{
"type": "matrixdynamic",
"name": "pricingLines",
"title": "Items",
"columns": [
{ "name": "vendor", "title": "Vendor" },
{ "name": "price", "title": "Price" },
{ "name": "discount", "title": "Discount %" }
]
}
]
}
]
}
This creates:
-
A tab called Pricing Calculator
-
A dynamic table
-
Columns for vendor, price, and discount
-
Rows that users can add or remove
Dynamic Matrix Tables
One of the most powerful features is the dynamic matrix (matrixdynamic).
It allows users to:
-
Add rows
-
Edit values
-
Perform row calculations
-
Aggregate totals
Example table in the CRM:
VendorPriceDiscountMarginNordic Supplies100010%auto calculatedGlobal Hardware8005%auto calculated
Matrix rows can include:
-
dropdown fields
-
numeric fields
-
calculated values
-
conditional visibility
-
read-only columns
Calculations and Expressions
SurveyJS supports expressions directly in the JSON definition.
Example expression:
sumInArray({pricingLines}, 'price')
This allows you to calculate:
-
totals
-
margins
-
discounts
-
averages
-
derived values
Fields can also be configured as read-only calculated outputs.
Conditional Logic
Fields and sections can appear or disappear based on logic.
Example:
"visibleIf": "{rowIndex} = 5"
Logic can be used for:
-
conditional fields
-
optional sections
-
workflow-driven forms
-
step-based calculations
Default Values
Fields can automatically populate using expressions.
Example configuration:
"defaultValueExpression": "sumInArray({pricingLines}, 'discountAmount')"
Data Storage
All values entered by the user are stored as JSON in the record.
Advantages:
-
flexible structure
-
easy API integration
-
no need to create many CRM fields
-
easy to export/import
Example stored record:
{
"pricingLines": [
{
"vendor": "Nordic Supplies",
"price": 1000,
"discount": 10
}
],
"totalPrice": 900
}
Admin Configuration
Advanced JSON forms are configured using a JSON type field.
Administrators simply define the form structure inside the JSON Definition field.
To configure this:
-
Edit or create a field in the module
(see:
https://help.simply-crm.com/hc/simply-crm-support/articles/how_to_add_or_edit_fields_in_a_module) -
Select Field Type: JSON
-
Paste the SurveyJS-style JSON definition into the JSON Definition field
-
Save the field
Once saved, Simply CRM will automatically:
-
render the form in the CRM interface
-
apply calculations and logic
-
store the resulting values as JSON on the record
Administrators only maintain the JSON definition — the CRM handles rendering and saving the data automatically.
Best Practices
Keep calculations inside the JSON
Avoid external scripts where possible.
Use matrix tables for repeating data
Examples:
-
products
-
suppliers
-
order lines
-
project tasks
Use expressions for totals
Example:
sumInArray()
Keep field names consistent
Example naming style:
unitPrice
lineTotal
discountPct
marginValue
When to Use JSON Fields vs Normal Fields
Use normal CRM fields when you need:
-
simple values
-
easy filtering
-
standard reporting
Use JSON fields when you need:
-
complex structures
-
dynamic forms
-
repeating tables
-
advanced calculations
-
configurable workflows
Advanced JSON fields make it possible to build powerful, flexible interfaces directly inside Simply CRM without custom development.