Freshmark Metadata Map
Confirmed split between schemas
Current evidence points to a two-part model:
fmszacts as the metadata and runtime-definition schemafmsxstores live menu structures and security group mappings
This split is important because the frontend does not appear to be driven by one giant codebase alone. Some of its behavior is stored as rows and field logic in the database.
Tables with strong evidence
fmsz.ZE_ENQ
- Purpose: report writer definitions
- Observed row count: about
142 - Key fields:
ZE_KEYZE_TABLEZE_DESCZE_FIELDSZE_SELECTIONZE_JOINZE_ORDER
This is the clearest report-definition table so far.
fmsz.ZP_PGMS
- Purpose: program or screen definitions
- Observed row count:
1763 - Key fields:
ZP_PROGRAMZP_DESC40ZP_TYPEZP_ZT
Observed types include DSP, MAN, MDL, PRT, ZZD, SEL, and ENQ.
Working interpretation only:
DSPlooks like display or general runtime screensMANandMDLlook like maintenance-style screensPRTappears report-orientedZZDlooks like internal rule/action helper definitions
Those meanings still need confirmation from client behavior.
fmsz.ZX_PGMS_FIELDS
- Purpose: per-screen field layout and embedded runtime logic
- Observed row count: about
73,930 - Evidence:
- stores screen coordinates (
ZX_X,ZX_Y) - stores field or label metadata (
ZX_FIELD,ZX_DESC,ZX_TYPE) - stores embedded logic snippets in
ZX_CODE
Examples from live rows:
DEBTOR_MANcontains inline validation logicABSA_BUYER_MANcontains$SELECT,$CALCULATE, and table lookup logicZZMENU_MANcontains menu selector and language-loading behavior
fmsz.ZS_SEL
- Purpose: reusable selector and lookup metadata
- Observed row count: about
837 - Key fields:
ZS_KEYZS_TABLEZS_DESCZS_SELECTIONZS_CALLPGMZS_JOIN
ZX_CODE snippets frequently refer to selectors with tokens like S:DEBTOR_CR2, which makes ZS_SEL important for reconstructing lookup dialogs and pick lists.
fmsz.ZT_TABLE
- Purpose: table registry
- Important clue:
ZE_ENQmaps toFMSZZM_MENUmaps toFMSXZP_PGMSandZX_PGMS_FIELDSmap toFMSZ
This table is currently the best evidence for cross-schema ownership.
fmsz.ZB_DB
- Purpose: database registry and connection metadata
- Example values:
FMSZFMSFMSXARCHIVE
fmsx.ZM_MENU
- Purpose: live menu structure
- Observed row count:
1869 - Key fields:
ZM_KEYZM_SEQZM_TYPEZM_LVLZM_PGMZM_DESCZM_PGMBEFOREZM_PGMAFTERZM_ZC
Observed large menu groups:
ADMINI_REPSDEBTORSADMIN_REPORTSMAINMENUSALESCOLDSTORAGE
Observed menu item types include P, G, R, M, A, E, and X. Their exact semantics still need confirmation, but the data clearly distinguishes different menu behaviors.
fmsx.ZC_SEC_GROUP
- Purpose: security or menu-group registry
- Important clue:
ZC_ZMpoints at root menuMAINMENU- group codes such as
DEV,AGN,SAD,CAS, andCLDappear insideZM_MENU.ZM_ZC
This suggests menu visibility is controlled by group membership plus menu-row metadata.
Strong menu clue from ZZMENU_MAN
Program ZZMENU_MAN in ZP_PGMS points to base table ZM_MENU.
Its field logic shows:
- selector calls to
S:ZM_MENU - security-group selection with
S:ZC_SEC_GROUP - language handling through
ZZ_LANGUAGE
That is strong evidence that the client can maintain menus through metadata-driven screens rather than a hardcoded admin interface.
Report-backed menu execution chain
The current simulator work shows that report launches are already traceable from menu rows to executable report metadata.
This gets us to live sample rows already, but not yet to a full report runner with prompts, selectors, ordering, and layout fidelity.
The next implementation phase is documented in report-runner-phase.
Practical takeaway
We should treat the system as:
- A conventional application with business tables like
STK_TRANSandDEBTOR_MAST - A metadata engine that stores reports, selectors, screen layouts, runtime rules, and menu structure in database rows
That means our rebuild work needs both:
- business-domain understanding
- metadata-engine decoding