TBoldMember¶
TBoldMember is the abstract base class for all member types in Bold objects: attributes, references, and lists.
Class Definition¶
TBoldMember = class(TBoldDomainElement)
public
// Owning object
property OwningObject: TBoldObject;
property BoldSystem: TBoldSystem;
// Type information
property BoldMemberRTInfo: TBoldMemberRTInfo;
property DisplayName: string;
// Value access
property AsString: string;
property IsNull: Boolean;
// State
property BoldDirty: Boolean;
// Subscriptions
procedure DefaultSubscribe(Subscriber: TBoldSubscriber);
end;
Inheritance¶
classDiagram
TBoldDomainElement <|-- TBoldMember
TBoldMember <|-- TBoldAttribute
TBoldMember <|-- TBoldObjectReference
TBoldMember <|-- TBoldObjectList
TBoldMember : +OwningObject
TBoldMember : +AsString
TBoldMember : +IsNull
click TBoldAttribute href "../TBoldAttribute/" "TBoldAttribute documentation"
click TBoldObjectReference href "../TBoldObjectReference/" "TBoldObjectReference documentation"
click TBoldObjectList href "../TBoldObjectList/" "TBoldObjectList documentation"
Member Types¶
| Type | Description | Example |
|---|---|---|
TBoldAttribute |
Stores a value | Customer.Name |
TBoldObjectReference |
Single object link | Order.Customer |
TBoldObjectList |
Multiple object links | Customer.Orders |
Properties¶
OwningObject¶
Get the object that owns this member:
var
Member: TBoldMember;
Owner: TBoldObject;
begin
Member := Customer.BoldMemberByName['Name'];
Owner := Member.OwningObject; // Returns Customer
end;
AsString¶
Universal string representation:
var
i: Integer;
Member: TBoldMember;
begin
for i := 0 to Customer.BoldMemberCount - 1 do
begin
Member := Customer.BoldMembers[i];
Log(Member.DisplayName + ' = ' + Member.AsString);
end;
end;
IsNull¶
Check if member has no value:
BoldDirty¶
Check if member has unsaved changes:
Subscriptions¶
Members support the subscription pattern:
// Subscribe to changes
Customer.M_Name.DefaultSubscribe(MySubscriber);
// When Name changes, subscriber is notified
Accessing Members¶
By Generated Property¶
// Preferred - type safe
CustomerName := Customer.Name; // string
CustomerOrders := Customer.Orders; // TOrderList
By Index¶
By Name¶
Member Naming Convention¶
Generated code uses M_ prefix for raw member access:
TCustomer = class(TBoldObject)
private
// Raw member access (internal)
function _Get_M_Name: TBAString;
public
// Typed property (use this)
property Name: string read GetName write SetName;
// Raw member access (advanced use)
property M_Name: TBAString read _Get_M_Name;
end;
Use M_Name when you need:
- To check IsNull
- To subscribe to changes
- To access metadata
Common Patterns¶
Iterate All Members¶
procedure LogAllMembers(Obj: TBoldObject);
var
i: Integer;
Member: TBoldMember;
begin
for i := 0 to Obj.BoldMemberCount - 1 do
begin
Member := Obj.BoldMembers[i];
Log(Format('%s: %s', [Member.DisplayName, Member.AsString]));
end;
end;
Find Changed Members¶
procedure ListDirtyMembers(Obj: TBoldObject);
var
i: Integer;
Member: TBoldMember;
begin
for i := 0 to Obj.BoldMemberCount - 1 do
begin
Member := Obj.BoldMembers[i];
if Member.BoldDirty then
Log('Changed: ' + Member.DisplayName);
end;
end;
See Also¶
- TBoldAttribute - Value attributes
- TBoldObjectList - Multi-valued associations
- TBoldObject - Owner of members