...
Written by: |
Our formulas Input Generation mode was previously called Syntax Check mode.
Logics are used to calculate the results but at the same time also serve as configuration mechanism to drive certain UI elements, such as necessary input parameters.
...
Logics That Trigger Input Generation Mode
- Dashboards
- Price Grid Line Item
- Price list Line Item
- Quotes Line Item
- Calculation Grid Line Item
- Contract Line Item
- Rebate Line Item
- Compensation Line Item
- Claim Line Item
- PA Dataload
- PA Distributed Dataload
Input Generation Mode
To avoid the need to declare input parameters explicitly (they show up as you start using/expecting them in the formula), a mechanism called “syntax check mode” “input generation mode” is used (sometimes also called "dry run").
As the name implies, it not only determines inputs but also checks the formula for syntactical validity. This is e.g. the reason why a formula is executed in that mode once before saving it to prevent invalid formulas to be saved.
During such a syntax check executionan input generation, it is good to know:
- As formula inputs may actually be no real inputs as their data e.g. comes from previous calculation steps, the formula returns a default value for every input it encounters during this syntax check input generation mode.
- This way the formula engine can in the end distinguish between “real” inputs (that it then needs to render to the user) and inputs that are fed by other formula elements (and do not trigger a UI element to be shown).
As you can see, determining inputs and executing formula are two calculation passes of the same “thing”. To not have negative performance impact, the syntax check passes the input generation passes are only done when required.
...
The following example shows how the api.isSyntaxtCheckisInputGeneration()
API call is used to determine which code does not need to be run in the parameter determination mode and should be called only in the real computation (like expensive DB calls).
Code Block |
---|
def inputVal = api.userEntry() if (api.isSyntaxCheckisInputGeneration()) return; def costs = api.find("PX", equal("name", "costs")) |
Note:
...
out.
...
X
will return always a BigDecimal number, regardless of its value returned during regular execution of the logic.Also some other functions will return "null" instead of proper values.
api.stream
andDatamartContext.streamQuery()
are not supported in
...
- input generation, but
api.find
is.