Skip to content

TBoldSystem

TBoldSystem is the central class that manages the Object Space - the in-memory graph of all domain objects.

Class Definition

TBoldSystem = class(TBoldElement)
public
  // Class management
  property Classes[const AClassName: string]: TBoldClassExtent;
  property ClassCount: Integer;

  // Object management
  property DirtyObjects: TBoldObjectList;
  property ObjectById[const Id: TBoldObjectId]: TBoldObject;

  // Transactions
  procedure StartTransaction;
  procedure CommitTransaction;
  procedure RollbackTransaction;
  property InTransaction: Boolean;

  // Persistence
  procedure UpdateDatabase;
  procedure FetchObject(AObject: TBoldObject);

  // OCL evaluation
  function EvaluateExpression(const Expression: string;
    Context: TBoldElement): TBoldElement;
  function EvaluateExpressionAsNewElement(const Expression: string;
    Context: TBoldElement): TBoldElement;
end;

Inheritance

classDiagram
    TBoldElement <|-- TBoldSystem
    TBoldSystem : +Classes
    TBoldSystem : +DirtyObjects
    TBoldSystem : +StartTransaction()
    TBoldSystem : +UpdateDatabase()

    click TBoldElement href "../TBoldElement/" "TBoldElement documentation"

Properties

Classes

Access class extents by name:

var
  CustomerExtent: TBoldClassExtent;
begin
  CustomerExtent := BoldSystem.Classes['Customer'];
  ShowMessage(Format('%d customers', [CustomerExtent.BoldObjects.Count]));
end;

DirtyObjects

List of objects with unsaved changes:

if BoldSystem.DirtyObjects.Count > 0 then
begin
  if MessageDlg('Save changes?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    BoldSystem.UpdateDatabase;
end;

ObjectById

Find object by its persistent ID:

var
  Customer: TBoldObject;
  Id: TBoldObjectId;
begin
  Id := TBoldDefaultId.CreateWithClassIdAndId(CustomerClassId, 42);
  Customer := BoldSystem.ObjectById[Id];
end;

Methods

StartTransaction / CommitTransaction / RollbackTransaction

Wrap modifications in a transaction:

BoldSystem.StartTransaction;
try
  Customer.Name := 'Updated';
  Order.Delete;
  BoldSystem.CommitTransaction;
except
  BoldSystem.RollbackTransaction;
  raise;
end;

UpdateDatabase

Persist all dirty objects to database:

BoldSystem.UpdateDatabase;

EvaluateExpression

Execute OCL query:

var
  ActiveCustomers: TBoldObjectList;
begin
  ActiveCustomers := BoldSystem.EvaluateExpressionAsNewElement(
    'Customer.allInstances->select(active = true)',
    nil
  ) as TBoldObjectList;
end;

Common Usage

Getting the System

// From a handle
var System: TBoldSystem := BoldSystemHandle1.System;

// From an object
var System: TBoldSystem := SomeObject.BoldSystem;

Creating Objects

var
  Customer: TCustomer;
begin
  Customer := BoldSystem.Classes['Customer'].CreateNewObject as TCustomer;
  // or
  Customer := TCustomer.Create(BoldSystem);
end;

Iterating All Objects of a Class

var
  Extent: TBoldClassExtent;
  i: Integer;
begin
  Extent := BoldSystem.Classes['Customer'];
  for i := 0 to Extent.BoldObjects.Count - 1 do
    ProcessCustomer(Extent.BoldObjects[i] as TCustomer);
end;

Events

Event Description
OnPreUpdate Before saving to database
OnPostUpdate After saving to database

See Also