This document supplements the core Omnis Classic AI Reference Notes.
It records additional behaviours that are commonly misunderstood by modern programming tools or AI assistants.
Omnis Classic uses reversible blocks to safely modify certain runtime states.
Example:
Begin reversible block
Set main file {FA_Various}
Set read/write files {FA_Various}
End reversible block
A reversible block ensures that the environment is restored if the procedure exits unexpectedly.
This mechanism is often used when temporarily changing:
Reversible blocks are not equivalent to database transactions.
They protect environment state, not database commits.
Omnis Classic procedures frequently rely on the concept of a current file context.
Example:
Set main file {FA_Client}
Set read/write files {FA_Client}
Many operations such as Find, Next, or field assignments implicitly
operate on the current main file record.
Because of this design:
Omnis Classic automatically reformats code when procedures are saved.
For example, extra spaces around operators are removed automatically.
Example:
User enters:
Calculate LN_Total = LN_Value + 1
After saving, Omnis may store:
Calculate LN_Total=LN_Value+1
This behaviour is normal and part of the editor design.
In Omnis Classic, list columns are typically defined using field names.
Example:
Define list {FLC_CODE,FLC_DESCRIPTION}
Columns can then be referenced dynamically using the nam() function.
Example:
LL_List(nam(FLC_CODE),LL_List.$line)
This pattern is common in systems that dynamically reference columns.
Lists behave more like in‑memory tables than simple arrays.
Each list contains:
Common properties:
Property Meaning
$line current row
$linecount number of rows
$add() add new row
$assign() assign values
Many Omnis programs rely heavily on lists as temporary data tables.
Omnis Classic systems are typically written using procedural design, not object‑oriented design.
Typical characteristics include:
#FModern assumptions about classes, objects, or functional programming usually do not apply.
The correct command to save changes is:
Update files
There is no “Update record” command in Omnis Classic.
Any reference to “Update record” is incorrect and likely from Omnis Studio or generic documentation.
In jPartner code:
Update filesCanceling an update cycle uses:
Cancel prepare for update
Do not assume divide-by-zero protection is only technical safety logic.
In Omnis Classic business code, a zero-check may preserve user-entered values or signal failure via #F instead of recalculating a different field.
In JACSoft Omnis Classic procedures, Default branches are often used as safe, practical fallbacks rather than error conditions.
Do not replace them automatically with stricter failure logic unless the existing codebase clearly requires that.
Grouped case values are valid and commonly used in Omnis Classic.
Example:
Switch PC_Mode
Case "A","B","C"
...
Case "X"
...
Default
...
End Switch
Do not expand grouped cases unnecessarily unless behaviour differs.
When analysing Omnis Classic code:
Omnis Classic reflects design practices from earlier database development environments.
Understanding reversible blocks, file context, and list structures is essential when interpreting real‑world Omnis Classic applications.