InVision — Eaze (Cell Calculations & Expression Language)
A consolidated reference for Eaze, the formula/expression language used by Profitbase InVision for cell calculations, grid rule mechanics, and many Workbook instruction parameters.
Source breadcrumbs:
articles/invision/docs/worksheets/calculations/*,articles/invision/docs/tables/calculations/*,articles/invision/docs/workbooks/programmingmodel/instructions/*, plus changelog notes (2025.5 JS code-behind, 2026.2SUM/NaNfix).
1. What Eaze is
Eaze is InVision's domain-specific formula language for cell calculations in data grids — Worksheets, Tables (input grids/Settings), and SQL Reports rendered as tables. It is not a general-purpose programming language; it is purpose-built for "address cells, write expressions, recalculate."
A typical Eaze formula:
@<target> = <expression>;
- Left-hand side — address of the cell(s) to write to (
@Column[row-selector]). - Right-hand side — an expression that produces the value to assign.
- Each statement terminates with
;. Multiple statements run in order.
@Amount[] = Price * Qty;
Eaze also appears in non-grid surfaces — wherever the docs say "boolean | Eaze expression". Many Workbook instructions (EnableIf, ExecuteIf, Validate, ShowToastNotification, OpenBrowserWindow, ToggleCssClass, ConfigureInvocation, …) accept Eaze.
1.1 Where Eaze is used
| Surface | Use |
|---|---|
| Worksheet Calculations | Cell formulas (@Col[] = …) on Data Store columns |
| Worksheet Cell Validation rules | Target + Statement expressions |
| Worksheet Cell Read Only rules | Target + Statement expressions |
| Worksheet Row/Cell Styling | SETROWSTYLE / SETCELLSTYLE with Eaze conditions |
| Table calculations (input-table object) | Same as Worksheet |
| SQL Report tabular output | Same Eaze grammar for derived columns |
| Workbook action instructions | Parameters typed boolean \| Eaze expression |
Not Eaze: Filter / Caption / Header / Is-Hidden / Visibility expressions in the Workbook designer are C# directive expressions (
Directive(...),Localize(...),@Object[...],@Context.ObjectAlias). Different language, different evaluator — don't conflate them.
1.2 Eaze, JS code-behind, and the Calculation Instance Factory
Three extensibility paths coexist:
- Eaze — canonical language for in-grid cell calculations and Workbook instruction conditions.
- Spreadsheet code-behind (added 2025.5) — write JavaScript directly inside Worksheets, Tables, and SQL (tabular) Reports for calculations, business logic, and custom rows. Removes the need for a separate JS Solution object.
- Calculation Instance Factory — register a custom JavaScript "calculation service" the spreadsheet calls from Eaze (e.g.
this.my.calculator.add(...)). Use for stateful, cross-sheet, or library-backed math. See §10.
From 2025.5, Workbook action handlers can also be authored in JavaScript instead of Eaze.
Eaze → JavaScript action-handler cheatsheet
| Concept | Eaze | JavaScript handler |
|---|---|---|
| Event payload | @Event.Data.customerId |
Event.Data.customerId |
Workbook variable (legacy @Var[…]) |
@Var[My Var] |
this.appVariables["@Var[My Var]"] |
| Workbook variable (new) | AppVariables.Factor |
this.app.variables.get("Factor") |
| Variable creation | Created on first assignment | Must be declared in the Variables dialog first |
Async actions (WebApi, Execute Web Function, Execute SQL Script) |
Synchronous call | await Execute(...) required |
// Eaze
SetParamValue("@param1", @Event.Data.customerId);
_sqlScriptResponse = Execute("ExecSqlScriptFromWorkbook");
// JavaScript equivalent
SetParamValue("@param1", Event.Data.customerId);
_sqlScriptResponse = await Execute("ExecSqlScriptFromWorkbook");
Eaze remains the canonical, documented language for in-grid calculations.
2. Cell addressing
Eaze targets cells via column name plus an optional row-selector predicate.
2.1 Syntax
@<column>[] -- all cells in <column>
@<column>[<predicate>] -- cells in <column> for rows matching <predicate>
The predicate runs per row against the grid's bound data set and must return true/false. Predicates may reference hard-coded literals, other columns from the current row context, Eaze functions, and logical operators.
@Amount[] = 10; -- every Amount cell
@Amount[AccountID == "N-3000"] = 10; -- only matching rows
@Amount[AccountID == "2000" && ProjectID == "N-500"]
@Amount[AccountID == "2000" && LEFT(ProjectID,1) == "N"]
2.2 Cross-spreadsheet addressing
Reference cells in another spreadsheet in the same Workbook with the ! separator. Use LHS() to correlate the current row to a row on the other sheet.
@Amount[] = @Qty[] * @Price list!Price[ProductID == LHS().ProductID];
Reads Price from the spreadsheet named Price list, matched to the current Left-Hand-Side row's ProductID.
2.3 Time Frame column dates
For Time Frame columns (P01, P02, …) read the column's date metadata via the reserved @Property[] expression:
@Property[P03.Date] -- the actual date represented by column P03
2.4 Custom-row addressing
Custom rows added via ADDROW* need an ObjectId (commonly -1) to be addressable for styling, validation, or read-only rules:
SETROWSTYLE(ObjectId == -1, "CustomRowStyle");
3. Keywords & execution context
| Keyword | Meaning |
|---|---|
true / false |
Boolean literals |
null |
Null reference |
this |
Current execution context (see below) |
this properties
| Property | Type | Description |
|---|---|---|
this.Rows |
any[] |
All rows in the current spreadsheet |
this.DataSets |
{[id:string]: any[]} |
All rows in every spreadsheet loaded in the Workbook, keyed by id |
this.Variables |
{[id:string]: any} |
All Workbook variables |
this.LhsRow |
object |
The row on the left-hand side of = currently being processed |
this.LhsColumn |
string |
The column name on the left-hand side of = currently being processed |
this is also where Calculation-Instance-Factory services are exposed — e.g. this.my.calculator.add(...). See §10.
4. Operators
Arithmetic
| Op | Meaning |
|---|---|
+ |
Add (also string concat when one operand is a string) |
- |
Subtract |
* |
Multiply |
/ |
Divide |
% |
Modulus |
Comparison
| Op | Meaning |
|---|---|
= |
Assignment. Only on the LHS of a formula (or @Var[name] = value in Execute Expression actions). Not equality. |
== |
Equals |
!= |
Not equals |
> >= < <= |
Ordering |
Logical
| Op | Meaning |
|---|---|
&& |
Conditional AND (short-circuits) |
\|\| |
Conditional OR (short-circuits) |
Unary & member access
| Op | Meaning |
|---|---|
+x |
Identity |
-x |
Numeric negation |
!x |
Logical negation |
x.y |
Member access |
x?.y |
Null-conditional member access (null if x is null) |
Null-coalescing
| Op | Meaning |
|---|---|
?? |
Left operand if not null, otherwise right operand |
null ?? "Hello" // -> "Hello"
0 ?? "Hello" // -> 0 (0 is not null)
5. Built-in function library
Eaze ships an Excel-flavored standard library. Names are case-conventional as in the docs (commonly UPPERCASE for the spreadsheet library; mixed-case for system/styling/row helpers).
5.1 Quick index
| Family | Functions |
|---|---|
| Logical | TRUE, FALSE, NOT, IF, COALESCE/FIRSTNOTNULL, ISNULL, ISNULLORZERO, ISNULLOREMPTYSTR, ISNUMBER, ISNUMERIC, ISERROR, IFERROR, NZ |
| Math / Trig | ABS, SIGN, ROUND, CEILING, FLOOR, SUM, MOD, POW, EXP, LN, LOG, LOG10, SIN/COS/TAN/ASIN/ACOS/ATAN/ATAN2, SQRT, PI, RAND, NUM_MIN |
| Statistical | AVERAGE/AVERAGEA, COUNT/COUNTA/COUNTBLANK, MAX/MAXA, MIN/MINA, STDEV/STDEVA/STDEVP/STDEVPA, VAR/VARA/VARP/VARPA |
| Text | CONCAT, SUBSTRING, SPLIT, LEFT, RIGHT, LEN, REPLACE, LOWER, UPPER, TRIM, TOSTRING, TONUMBER, NEWLINE |
| Date | DATE, DATEVALUE, TODATE, NOW, FORMATDATE, TZUTC, TZLocal + Time-Frame helpers (§5.5) |
| Financial | AMORLINC, AMORLINCMTH |
| System | ARRAY, NEWID, Window, EVAL, JsonParse, JsonStringify, ApiBase |
| Misc | LHS, LHSVALUE, tmpl_foreach_operand |
| Row collection | ADDROWFIRST/ADDROWLAST/ADDROWAFTER/ADDROWBEFORE, IsSummaryRow, IsRowLocked, GetCallContextRow |
| Styling | SETROWSTYLE, SETCELLSTYLE |
5.2 Logical
TRUE() -- returns true
FALSE() -- returns false
NOT(<expr>)
IF(<cond>, <true-expr>, <false-expr>)
COALESCE(...args) -- first non-null arg
FIRSTNOTNULL(...args) -- alias for COALESCE
ISNULL(<expr>) -- true if null
ISNULL(<expr>, <replacement>) -- replacement if null, else expr
ISNULLORZERO(<expr>) -- true if null or 0
ISNULLORZERO(<expr>, <replacement>)
ISNULLOREMPTYSTR(<expr>) -- true if null or ""
ISNUMBER(value) -- true if numeric type
ISNUMERIC(value) -- true if value is or converts to a number
ISERROR(<expr>) -- true if expr errors
IFERROR(<expr>, <replacement>) -- replacement if expr errors
NZ(<expr>) -- 0 if null/empty, else expr
5.3 Math / Trig
ABS, SIGN, ROUND, CEILING, FLOOR
SUM, MOD
POW, EXP, LN, LOG, LOG10
SIN, COS, TAN, ASIN, ACOS, ATAN, ATAN2
SQRT, PI()
RAND()
NUM_MIN() -- min value of the Number type
2026.2:
SUMnow handlesNaNcorrectly (bug fix). If your solution previously worked around this, the workaround can be removed once the deployment is on 2026.2 or later.
5.4 Statistical
AVERAGE, AVERAGEA
COUNT, COUNTA, COUNTBLANK
MAX, MAXA, MIN, MINA
STDEV, STDEVA, STDEVP, STDEVPA
VAR, VARA, VARP, VARPA
COUNT only counts numbers; COUNTA counts all logical values; COUNTBLANK counts nulls. Most accept either a comma-separated argument list or an ARRAY(...).
5.5 Text
CONCAT(...t) -- "a"+"b"+"c" => "abc"
SUBSTRING(input, start [, length])
SPLIT(input, delimiter) -- returns string[]
LEFT, RIGHT, LEN, REPLACE
LOWER, UPPER
TRIM
TOSTRING(value)
TOSTRING(value, formatString) -- numeraljs for numbers, momentjs for dates
TONUMBER(s) -- null if not convertible
NEWLINE -- the newline character
TOSTRING(DATE(2016,1,1), "YYYYMMDD") -- "20160101"
5.6 Date
DATE(year [,month,day,hours,min,sec,ms]) -- JS Date
DATEVALUE(year [,...]) -- same
DATE(expression)
TODATE(expression [, inputFormat]) -- defaults to ISO 8601
NOW()
FORMATDATE(date, format) -- momentjs format strings
TZUTC(date)
TZLocal(date)
Time-Frame column date helpers
Used in column-caption expressions for Time Frame columns. All have Start/End variants plus an N-prefixed int32 variant where applicable. The string forms apply default 2-digit formatting.
DateStart() / DateEnd() / DateEnd(format)
YearNum() / NYearNum() / YearNumStart() / NYearNumStart() / YearNumEnd() / NYearNumEnd()
MonthNum() / NMonthNum() / MonthNum(digits)
MonthNumStart() / NMonthNumStart() / MonthNumStart(digits)
MonthNumEnd() / NMonthNumEnd() / MonthNumEnd(digits)
MonthNameStart() / MonthNameEnd()
WeekNum() / NWeekNum() / WeekNumStart() / NWeekNumStart() / WeekNumStart(digits)
WeekNumEnd() / NWeekNumEnd() / WeekNumEnd(digits)
DayOfWeekName() / DayOfWeekNameStart() / DayOfWeekNameEnd()
DayOfWeekNum() / NDayOrWeekNum() / DayOfWeekNumStart() / NDayOrWeekNumStart() / DayOfWeekNumEnd() / NDayOrWeekNumEnd()
DayOfMonthNum() / NDayOfMonthNum() / DayOfMonthNumStart() / NDayOfMonthNumStart() / DayOfMonthNumStart(digits)
DayOfMonthNumEnd() / NDayOfMonthNumEnd() / DayOfMonthNumEnd(digits)
Caption examples for a Time Frame Reference Date of Jan 1 2021:
YearNum() + MonthNum() -- "202101"
YearNum() + " " + MonthNum() -- "2021 01"
YearNum() + "-P" + MonthNum() -- "2021-P01"
MonthNameStart().Substring(0,3) + ". " + YearNum() -- "Jan. 2021"
5.7 Financial
AMORLINC(cost, date_purchased, first_period, salvage, period, rate [, basis])
AMORLINCMTH(cost, date_purchased, first_period, salvage, period:Date, rate [, basis])
5.8 System
ARRAY(...args) -- ARRAY(1, 4, "test")
NEWID() -- 36-char GUID xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Window() -- browser window object (replaced ENVIRONMENT())
EVAL(expression : string) -- dynamically evaluates a string expression
JsonParse(text) -- JSON string -> JS value
JsonStringify(value) -- JS value -> JSON string
ApiBase() -- base URL of the InVision web API
EVAL is powerful for data-driven calculations:
@Total[] = EVAL(@Formula[]);
-- If Formula = "@P01[] + @P02[]", this becomes @Total[] = @P01[] + @P02[];
ApiBase() is handy for building API URLs in Workbook actions:
SetSrc(ApiBase() + "/api/db/objects/AssetLib/FileName?q={ID==\"WarningImg\"}&asFile=true");
5.9 LHS helpers and AST templating
LHS() -- the object on the left side of '='
LHS().<prop> -- access a property of the LHS row
LHSVALUE(propName : string) -- value of LHS row's property by name
-- LHSVALUE("AccountID") => LHS account id
tmpl_foreach_operand(formula, operandTemplate)
tmpl_foreach_operand builds an AST by substituting operand tokens into a template, then feeding it to EVAL. Substitution tokens:
#LHSCOL— name of the LHS column#OP— current operand token from the formula parameter
-- If Formula = "L01 + L02" and LHS column is "Total":
tmpl_foreach_operand(Formula, "#LHSCOL[LineID == \"#OP\"]")
-- AST equivalent of: @Total[LineID == "L01"] + @Total[LineID == "L02"]
@Total[LineID == "L03"] = EVAL(tmpl_foreach_operand(Formula, "#LHSCOL[LineID == \"#OP\"]"));
-- Becomes: @Total[LineID == "L03"] = @Total[LineID == "L01"] + @Total[LineID == "L02"];
5.10 Row collection
These mutate the bound grid data set in place.
ADDROWFIRST(jsonObject) -- add at top
ADDROWLAST(jsonObject) -- add at bottom
ADDROWAFTER(addressExpr, jsonObject) -- after first row matching addressExpr
ADDROWBEFORE(addressExpr, jsonObject) -- before first row matching addressExpr
IsSummaryRow(row) -- true if row is the summary row
IsRowLocked(row) -- true if row is locked
GetCallContextRow() -- the row Eaze is currently evaluating
Custom rows need an ObjectId (commonly -1) to be addressable:
ADDROWFIRST({"ObjectId": -1, "AccountID": "F100", "ProductID": "P-001", "Total": 0, "P01": -3000});
5.11 Cell & row styling
SETROWSTYLE(rowAddressExpr, cssClass : string)
SETCELLSTYLE(cellAddressExpr, columnName : string, cssClass : string)
SETROWSTYLE(ProductID == "XYZ", "ProductGroup1");
SETROWSTYLE(STARTSWITH(ProductID, "F"), "StyleA");
SETCELLSTYLE(Total < 1000, "Total", "RedCell");
-- Style the summary row
SetRowStyle(IsSummaryRow(GetCallContextRow()), "css-class");
6. Workbook variables (AppVariables and @Var[…])
Workbook variables enter Eaze through AppVariables. Two notations coexist; pick by name shape.
6.1 Reading
AppVariables.Factor -- property access (standard names only)
AppVariables.getValue("Factor") -- function access
Use getValue("…") for any name containing whitespace or @Var[…] syntax — JS property access can't reach those:
AppVariables.getValue("@Var[My Variable]");
6.2 @Var[…] notation
@Var[name] is the form for Workbook variables whose names contain whitespace — typical for variables auto-generated for Data Flow, Form Element, and Script components, where InVision wraps the name. For your own variables, prefer standard Eaze names.
-- assign (only in Execute Expression actions)
@Var[My Factor] = 12.4;
@Var[Last Row Clicked] = @Event.Data;
@Var[Last Row Clicked].ProductID = @Event.Data.ProduktID;
-- read
CONCAT("Selected: ", @Var[Last Row Clicked].ProductName);
OpenBrowserWindow(CONCAT("http://api.company.com/appendix/", @Event.Data.ProsjektID));
-- clear
@Var[Name] = null;
-- generate a unique id
@Var[Name] = NEWID();
6.3 Recalc after a variable change
Modifying an AppVariable from outside the grid (e.g. from a Form Element's SelectionChanged event) does not automatically re-run grid formulas that reference it. Trigger the Worksheet/Setting RecalcAction explicitly.
7. @Event and Filter() references
7.1 @Event
Inside an action's instructions list, @Event exposes the event payload. Common shape (e.g. for context-menu events on TableView):
@Event.Data.<Field> -- fields on the clicked row
@Event.Sender.ColumnName -- column that was clicked
@Event.Sender.ActionName -- menu action name
@Event.Selection.Rows -- selected rows array
@Event.Selection.Cells -- selected cells
In JavaScript action handlers, use Event (no @). See §1.2.
7.2 Filter()
Filter values are accessible through Filter(group, name). Its result exposes SelectedValue with Id, ColumnName, Description, IsLeaf, Level.
SetParamValue("@MyParam", Filter("MainFilters", "Department").SelectedValue.Id);
_departmentName = Filter("Page1Filters", "Department").SelectedValue.Description;
EnableIf(Filter("Filters", "Department").SelectedValue.IsLeaf);
8. Validation, read-only, and styling rules
All three Worksheet rule families share the same shape: Name, Disabled, Target (cell-address Eaze expression), Statement (boolean Eaze expression).
8.1 Cell Validation rules
- Rule Type:
ValidationError(red border, blocks save when run from a Workbook context) orValidationWarning(yellow border). - Target: cells to flag if Statement returns
false. - Statement: returns
trueif the cell is valid,falseotherwise.
Validate(terminateOnValidationFailed : boolean | Eaze expression) runs the rules from a SaveData action. Validation errors do not automatically prevent subsequent actions — they only stop the save for that Worksheet. To gate a whole flow on validation, build an Action Group that runs Validate for all Worksheets first.
8.2 Conditional Cell Read-Only rules
Target: @Qty[]
Statement: @Amount[] > 100
-- Qty becomes read-only on rows where Amount > 100
Target: @Qty[]
Statement: @PBRowIdentity[] != -1
-- Qty becomes read-only on rows already persisted to the database
8.3 Row/Cell styling
Defined as Eaze statements run on data load / recalc; see §5.11.
9. Custom queries and column compatibility
When a Worksheet uses a Custom Query for loading data, the returned columns must match the original Data Store layout by name, type, and count. To support cell comments, include any _PBComment columns from the Data Store. None of this changes Eaze syntax — but it changes which columns are addressable.
10. Calculation Instance Factory (JS escape hatch)
Configure via XML in the spreadsheet designer when standard Eaze isn't enough:
<ComputeInstanceFactory>
<Instance Name="my.calculator" FactoryFunction="myLib.createCalculator">
<FactoryFunctionArguments>
<SqlScript Id="@Object[someSqlScript].Id" />
</FactoryFunctionArguments>
</Instance>
</ComputeInstanceFactory>
Instance/@Name— name onthisyour formulas use (e.g.this.my.calculator.add(...)).Instance/@FactoryFunction— global (window) function returning the calc-service instance.FactoryFunctionArguments/SqlScript— SQL Scripts whose result sets are passed as factory args, in declaration order (currently only data-returning SQL Scripts).
When to reach for it: cross-spreadsheet data not loaded into the Workbook, conditionals too complex for Eaze, math outside the Eaze library, stateful calculation across cell changes, one calc service per spreadsheet.
Implementation options:
- JavaScript Solution Object — for small/simple services.
- Build externally (TypeScript / VS Code / Node / Jasmine etc.) and deploy to
/Scripts/plugins. List load order in/Scripts/plugins/plugins.json:{ "files": ["3rdparty-lib1.js", "3rdparty-lib2.js", "mycalc-lib.js"] }
From 2025.5 onward, spreadsheet code-behind (inline JS directly in Worksheets/Tables/SQL Reports) is the lighter-weight alternative for the same scenarios — no separate Solution object needed.
11. Idiomatic patterns
Derived column
@Amount[] = Price * Qty;
Slice
@Amount[ProductID == "XP-5000"] =
@Price[ProductID == "XP-5000"] * @Qty[ProductID == "XP-5000"];
Cross-sheet lookup
@Amount[] = @Qty[] * @Price list!Price[ProductID == LHS().ProductID];
Workbook variable
@Amount[] = @TotalForce[] * AppVariables.Factor;
Conditional read-only by saved state
Target: @Qty[]
Statement: @PBRowIdentity[] != -1
Style the summary row
SetRowStyle(IsSummaryRow(GetCallContextRow()), "summary-css");
Add a custom row
ADDROWFIRST({"ObjectId": -1, "AccountID": "F100", "ProductID": "P-001", "Total": 0, "P01": -3000});
SETROWSTYLE(ObjectId == -1, "CustomRowStyle");
Dynamic formula via EVAL + template
@Total[LineID == "L03"] = EVAL(tmpl_foreach_operand(Formula, "#LHSCOL[LineID == \"#OP\"]"));
Recalc after a Form input changed an AppVariable
In the Form Element's SelectionChanged event, invoke the Worksheet/Setting's RecalcAction.
Workbook instructions taking Eaze conditions
EnableIf(Filter("Filters", "Department").SelectedValue.Level >= 2 && _accountId == "A3000");
ExecuteIf(IsHostPageActive() && HasFilterChanged());
ToggleCssClass("highlight", X == 250);
ShowToastNotification("Update", CONCAT(_count, " items were updated"));
OpenBrowserWindow(CONCAT("http://mysite/api/invoices?id=", SelectedOrder.OrderId));
12. Gotchas & rules of thumb
=is assignment. Use==for equality.=only appears on the LHS of a formula or in@Var[name] = valueinside Execute Expression actions.@Var[…]is only assignable in Execute Expression actions. Reading is unrestricted.- AppVariable changes don't auto-trigger recalc. Call
RecalcAction. COUNTignores non-numbers;COUNTAcounts logical values. Pick the right one.TOSTRING(value, format)uses numeraljs for numbers and momentjs for dates — not Excel format strings.TODATE(string)defaults to ISO 8601 — pass an explicit input format for anything else.- For Time Frame columns, prefer
@Property[ColName.Date]over parsing column metadata yourself. - Custom rows need
ObjectId(often-1) to be addressable for styling, validation, or read-only rules. - Cross-spreadsheet addressing requires
LHS()to correlate the current LHS row with rows on the other sheet. - In JS action handlers, Eaze
@Event/@Var[…]becomeEvent/this.appVariables["@Var[…]"]and async actions needawait. See §1.2. - Filter / Caption / Header / Is-Hidden expressions in Workbook designer fields are C# directives, not Eaze — they use
Directive(...),Localize(...),@Object[...],@Context.ObjectAlias. SUMandNaN: fixed in 2026.2. Older releases mis-handledNaNpropagation; remove any workaround once on 2026.2+.
13. Doc map
All paths relative to articles/invision/docs/ in the Profitbase docs.
| Topic | Source |
|---|---|
| Eaze overview | worksheets/calculations/eaze.md, tables/calculations/eaze.md |
| Cell addressing | worksheets/calculations/celladressing.md, tables/calculations/celladressing.md |
Keywords (this, etc.) |
worksheets/calculations/keywords.md, tables/calculations/keywords.md |
| Arithmetic / Comparison / Logical / Other binary ops | worksheets/calculations/{arithmeticop,comparisonop,logicalop,otherbop}.md (and tables/calculations/ siblings) |
| Logical / Math / Statistical / Text / Date / Financial / System / Misc functions | worksheets/calculations/{logicalfunc,mathfunc,statisticfunc,textfunc,datefunc,financialfunc,sysfunc,miscfunc}.md (and tables/calculations/ siblings) |
| Time Frame column date helpers | tables/colcaptions.md, worksheets/colcaptions.md |
Row collection (ADDROW*, IsSummaryRow, IsRowLocked) |
worksheets/calculations/rowcollfunc.md, tables/calculations/rowcollfunc.md |
| Row/Cell styling functions | worksheets/calculations/cellnrowstylfunc.md, tables/calculations/cellnrowstylfunc.md |
| AppVariables | worksheets/calculations/appvariables.md, tables/calculations/appvariables.md |
@Property[col.Date] |
worksheets/calculations/usingdate.md, tables/calculations/usingdate.md |
| Calculation Instance Factory | worksheets/calculations/calcinstfactory.md, tables/calculations/calcinstfactory.md |
| Cell Validation | worksheets/cellvalidation.md |
| Conditional Cell Read-Only | worksheets/conditcellreadonly.md |
| Row Styling (page-level) | worksheets/rowstyling.md, tables/rowstyling.md |
Workbook @Var[…] |
workbooks/programmingmodel/instructions/var.md |
| Workbook instructions accepting Eaze | workbooks/programmingmodel/instructions/*.md (e.g. enableif.md, executeif.md, cssclass.md, showtoastnotification.md, openbrowserwindow.md, validate.md, configinvocation.md) |
| JS code-behind / Eaze → JS migration (2025.5) | changelog/changelog25_5.md |
SUM/NaN fix (2026.2) |
changelog/changelog26_2.md |