(Der zweite Wert ist der Default-Wert, falls der Key nicht gefunden wurde.)
IPersistentStorage ist ein abstraktes Interface für (die DOM-Repräsentation eines) JSON-Dokuments; das kann bekanntlich entwender vom Typ Null, Number, String, Boolean, Array oder Object sein.
Relevante Deklarationen:
type
TPersistentType = (
ptNull,
ptNumber,
ptString,
ptBoolean,
ptDateTime,
ptArray,
ptObject
);
IPersistentNull = interface;
IPersistentNumber = interface;
IPersistentString = interface;
IPersistentBoolean = interface;
IPersistentArray = interface;
IPersistentObject = interface;
IPersistentStorage = interface ['{240C0D27-2664-4308-906C-1940D4C4A01D}']
function GetType: TPersistentType;
function AsNull: IPersistentNull;
function AsNumber: IPersistentNumber;
function AsString: IPersistentString;
function AsBoolean: IPersistentBoolean;
function AsArray: IPersistentArray;
function AsObject: IPersistentObject;
function AsJSon(iIndent: boolean = false; iEscape: boolean = true): string;
procedure Save(iFilename: string);
end;
IPersistentNull = interface(IPersistentStorage) ['{AFEC53DE-F239-4F87-AA54-131C5E9F5FCC}']
end;
IPersistentNumber = interface(IPersistentStorage) ['{A887CB3C-773C-4A6F-8550-500B4A56A6A6}']
function GetValue: double;
procedure SetValue(iValue: double);
function GetIntValue: int64;
end;
IPersistentString = interface(IPersistentStorage) ['{30C4516B-9B8E-4CD9-A1A0-95F30E4F0C6F}']
function GetValue: string;
procedure SetValue(iValue: string);
end;
IPersistentBoolean = interface(IPersistentStorage) ['{6CAAE86B-C79B-4F86-A5FD-17789C7D11FA}']
function GetValue: boolean;
procedure SetValue(iValue: boolean);
end;
IPersistentDateTime = interface(IPersistentStorage) ['{7902BA7D-FCD7-48C9-8DE7-1778F0957954}']
function GetValue: TDateTime;
procedure SetValue(iValue: TDateTime);
end;
IPersistentArray = interface(IPersistentStorage) ['{0BACA3FF-80EC-475A-A308-5FF6EDE1BF2A}']
function GetCount: integer;
function GetItem(iIndex: integer): IPersistentStorage;
procedure Add(iItem: IPersistentStorage);
function AddNumber(iValue: double): IPersistentNumber;
function AddString(iValue: string): IPersistentString;
function AddBoolean(iValue: boolean): IPersistentBoolean;
function AddObject: IPersistentObject;
procedure Delete(iIndex: integer);
procedure Clear;
end;
IPersistentObject = interface(IPersistentStorage) ['{E34B6230-386A-48E8-97C3-E0B4D8DC8072}']
function GetCount: integer;
procedure GetNames(oNames: TStrings);
function GetValue(iName: string): IPersistentStorage;
function GetValues: IPersistentArray;
function TryGetValue(iName: string; out oValue: IPersistentStorage): boolean;
function FindValue(iName: string): IPersistentStorage;
function FindNumber(iName: string; iDefault: double = 0): double;
function FindInteger(iName: string; iDefault: int64 = 0): int64;
function FindString(iName: string; iDefault: string = ''): string;
function FindBoolean(iName: string; iDefault: boolean = false): boolean;
function FindArray(iName: string; out oResult: IPersistentArray): boolean;
function FindObject(iName: string; out oResult: IPersistentObject): boolean;
procedure Add(iName: string; iItem: IPersistentStorage);
procedure SetValue(iName: string; iItem: IPersistentStorage);
function SetNull(iName: string): IPersistentObject;
function SetNumber(iName: string; iValue: double): IPersistentObject;
function SetString(iName: string; iValue: string): IPersistentObject;
function SetBoolean(iName: string; iValue: boolean): IPersistentObject;
function SetArray(iName: string; iValue: IPersistentArray): IPersistentObject;
function SetObject(iName: string; iValue: IPersistentObject): IPersistentObject;
function CreateArray(iName: string): IPersistentArray;
function CreateObject(iName: string): IPersistentObject;
function FindOrCreateObject(iName: string): IPersistentObject;
function FindOrCreateArray(iName: string): IPersistentArray;
procedure DeleteValue(iName: string);
function Merge(iValue: IPersistentObject): IPersistentObject;
end;
Das funktioniert prima, auch mit FindObject anstelle von FindString.
Ich hatte zunächst Ärger mit der SystemLog() Funktionalität -
wenn ich im Hintergrund die REST Aufrufe mit SystemLog gespeichert hatte, wurden Requests
oft mit Status_code 404 und 500 abgelehnt. Nachdem ich alle Log-Aufrufe entfernt habe,
ist das Problem verschwunden.
Also kann ich mir die Kommunikation per JSON erarbeiten.