Static ReadonlyAuthorizesChanges only the caller's own User-scope forms and panels, with the caller's permissions.
Whether this action can bound what it returns to an audience (RunActionParams.Audience): everyone
besides the caller who will see its output, such as the other participants of a shared conversation.
false by default, and the engine enforces it: when a run's audience adds a reader beyond the caller,
ActionEngineServer.RunAction refuses the action with result code AUDIENCE_UNSUPPORTED, without running
it. Override to return true only when the action honours the audience in full — every record, snippet
and count it returns is something every reader may see (pass the audience to the search engine, check each
reader's entitlement to anything it scopes by, and leave out aggregates computed before that filtering).
ProtectedInternalInternal method that must be implemented by derived action classes. This is where the actual action logic should be implemented.
The action execution parameters including typed context
Promise resolving to the action result
Executes the action with the provided parameters.
The action execution parameters including context
Promise resolving to the action result
Promote a Pending override to Active. Flips:
"Sibling" = another of the caller's User-scope overrides on the same EntityID that is currently Status='Active'. The target is the row identified by the input
OverrideID.Only the caller's own User-scope overrides can be activated. A Role or Global override, or another user's, returns FORBIDDEN for every caller (see
CheckPersonalWritein_shared.ts): shared forms are managed from Form Builder or the form's Manage drawer. The target's Component and Override flip to Active in one entity transaction. Each prior Active sibling is set aside after that transaction: its Override first, then its Component. Every prior is tried. If a save fails, the action returnsPERSIST_FAILEDthat names each prior row not updated, and the target stays Active. A prior whose Override could not be set aside is still Active, so a retry sets it aside. A prior whose Override is set aside but whose Component status could not be updated is not found by a retry, and its Component keeps its old status.Idempotency. If the target Override is already Active, the caller's other Active overrides on the entity are set aside and the action returns SUCCESS with a no-op message that carries
DemotedCount. So a retry afterPERSIST_FAILEDsets aside a prior whose Override could not be set aside; a prior whose Component status could not be updated is not found again. If the target is Inactive, that's a misuse — we surface NOT_PENDING so the agent / UI can ask the user what they really want.Inputs:
OverrideID(required, string) — the Pending override to activateOutputs:
ComponentID— the Component now ActiveOverrideID— echoed for conveniencePreviousActiveOverrideID— the first override that was demoted (or null)