Skip to main content

DomainSession

Defined in: js-api/src/ui/domains/domains-session.ts:79

A set of editors that save as ONE transaction.

const session = new DG.DomainSession([parent, children]);
const draft = parent.addRow({name: 'Study 7'}); // id = '~new:…'
children.addRow({study_id: parent.dataFrame.get('id', draft)});
await session.save(); // one /transaction, the ref resolved server-side

isDirty / changeCount / isSaving aggregate over the editors; the signals mirror theirs. editors is live — add / remove resubscribe — so a page can grow its session as widgets appear.

Implements

Constructors

Constructor

new DomainSession(editors?, options?): DomainSession

Defined in: js-api/src/ui/domains/domains-session.ts:98

Parameters

ParameterType
editors?DomainFrameEditor[]
options?DomainSessionOptions

Returns

DomainSession

Properties

PropertyModifierTypeDefault valueDescriptionDefined in
editorsreadonlyDomainFrameEditor[][]Every editor whose pending changes this object answers for. Read on demand: an editor that appears after the widget was constructed must show up here.js-api/src/ui/domains/domains-session.ts:84
CELL_ERRORSreadonly"Fix the cell errors first"'Fix the cell errors first'What lastRefusal says when an editor refused its own batch: the blocking cells name themselves, and prepareSave has already ballooned the first of them.js-api/src/ui/domains/domains-session.ts:82

Accessors

changeCount

Get Signature

get changeCount(): number

Defined in: js-api/src/ui/domains/domains-session.ts:114

Sum of the editors' pending cell changes.

Returns

number


isDirty

Get Signature

get isDirty(): boolean

Defined in: js-api/src/ui/domains/domains-session.ts:111

Whether any editor has a pending change.

Returns

boolean


isSaving

Get Signature

get isSaving(): boolean

Defined in: js-api/src/ui/domains/domains-session.ts:117

Whether a transaction is in flight (every editor is closed while it is).

Returns

boolean


lastRefusal

Get Signature

get lastRefusal(): DomainSessionRefusal | null

Defined in: js-api/src/ui/domains/domains-session.ts:122

Why the last save did not land; null after a successful save or before the first one. A host that shows the refusal in its own words (a status line, a form footer) reads the sentence here instead of intercepting the balloon.

Returns

DomainSessionRefusal | null


onChanged

Get Signature

get onChanged(): Observable<DomainSession>

Defined in: js-api/src/ui/domains/domains-session.ts:125

Fires on every service-state write of any editor.

Returns

Observable<DomainSession>


onDirtyChanged

Get Signature

get onDirtyChanged(): Observable<boolean>

Defined in: js-api/src/ui/domains/domains-session.ts:127

Fires when the aggregate isDirty flips.

Returns

Observable<boolean>


onSaved

Get Signature

get onSaved(): Observable<DomainSaveResult>

Defined in: js-api/src/ui/domains/domains-session.ts:132

Fires after a successful save with the counters summed over the editors and every draft id the server assigned.

Returns

Observable<DomainSaveResult>


onSavingChanged

Get Signature

get onSavingChanged(): Observable<boolean>

Defined in: js-api/src/ui/domains/domains-session.ts:129

Fires when the aggregate isSaving flips.

Returns

Observable<boolean>


quiet

Get Signature

get quiet(): boolean

Defined in: js-api/src/ui/domains/domains-session.ts:108

Returns

boolean


schema

Get Signature

get schema(): string | undefined

Defined in: js-api/src/ui/domains/domains-session.ts:106

The transaction's URL schema (see DomainSessionOptions.schema).

Returns

string | undefined

Methods

add()

add(editor): void

Defined in: js-api/src/ui/domains/domains-session.ts:134

Parameters

ParameterType
editorDomainFrameEditor

Returns

void


buildOps()

buildOps(): DomainSessionPart[] | null

Defined in: js-api/src/ui/domains/domains-session.ts:161

Every editor's batch (prepareSave), in editor order — what save concatenates; null when any editor refused (a blocking cell error, already reported).

Returns

DomainSessionPart[] | null


discard()

discard(): void

Defined in: js-api/src/ui/domains/domains-session.ts:281

Drops every editor's pending batch.

Returns

void


dispose()

dispose(): void

Defined in: js-api/src/ui/domains/domains-session.ts:275

Releases every editor: the session's subscriptions go, the editors stay. An ad-hoc session — DomainFrameEditor.save, one saveAll — MUST be disposed when its transaction is done, or its subscriptions accumulate on the editors for the life of the frame.

Returns

void


remove()

remove(editor): void

Defined in: js-api/src/ui/domains/domains-session.ts:146

Parameters

ParameterType
editorDomainFrameEditor

Returns

void


save()

save(): Promise<boolean>

Defined in: js-api/src/ui/domains/domains-session.ts:187

Writes every editor's pending batch as ONE /transaction: audit rows share a tx_id, and any failure rolls all of it back. Resolves to whether the batch landed.

Blocking cell errors refuse the save (naming the first one). A version conflict goes through the platform's standard reload/overwrite dialog on the editor that owns the failing row, and the WHOLE batch is rebuilt and retried. A server validation error — a business-key clash included, which the onDuplicate: 'error' of every insert makes an atomic refusal — lands on the offending editor's cells and everything stays pending. Every editor is CLOSED while this runs (see DomainFrameEditor.isSaving). Every unsuccessful return leaves its reason in lastRefusal.

Returns

Promise<boolean>