Generische Routine Fett Elemente auswählen


Die SelectBoldElement-Funktion bietet eine wiederverwendbare und flexible Möglichkeit zum Auswählen von Objekten oder Listen.
Funktion SelectBoldElement (Root: TBoldElement; sOCL: string; Params: Array von const;
EClass: ExceptClass; ErrMsg: String;
Container: TBoldElement = Nil;
InPS: Boolean = False;
Vars: TBoldExternalVariableList = null): TBoldElement;
const
cLastElement = $FFFF;
var
OCL: string;
ID: TBoldIndirectElement;
ReturnListElementX: Boolean;
Element: Integer;
beginnen
Ergebnis: = Nil;
Element: = 0;
ReturnListElementX: = False;
Wenn Root = NULL Then
Root: = TBoldSystem.DefaultSystem;
Geltend zu machen (nicht (Container ist TBoldObject), 'SelectBoldElement kann nicht zurück BoldObjects im Container-Parameter');
Geltend machen (Assigned (Root), ' versuchen, wählen Sie ohne ein offenes System');
ID: = TBoldIndirectElement.Create;
versuchen Sie
OCL: = Format (sOCL, Params);
Dieser Code ermöglicht es diese Routine transparent ein 'erste' oder 'letzte'-Objekt in der PS auswählen
Wenn (Großbuchstaben (Kopie (Ocl, Länge (Ocl) -6, 8)) = '-> erste') und dann beginnen (InPS)
SetLength (Ocl, Length(ocl)-7);
ReturnListElementX: = True;
Ende;
Wenn (Großbuchstaben (Kopie (Ocl, Länge (Ocl)-5, 8)) = '-> Letzte') und dann beginnen (InPS)
SetLength (Ocl, Length(ocl)-6);
ReturnListElementX: = True;
Element: = cLastElement;
Ende;
Root.EvaluateExpression (Ocl, Id, InPS, Vars);
Wenn nichts ausgewählt wurde, raus, entweder durch den Benutzer angegebenen Fehler auslösen oder leise
Wenn (nicht zugeordnet (Id. Wert)) oder
((Id. Wert ist TBoldList) und (TBoldList (Id. Wert). Rechnen = 0)) dann
Wenn Assigned(EClass) dann
EClass.Create (ErrMsg) zu erhöhen
sonst
Ausfahrt; Nichts zurück, raus
Im Besitz der Werte können nicht zurückgegeben werden im Ergebnis, so müssen Container, es sei denn, dies eine Auswahl der InPS (ReturnListElementX ist)
Wenn Id. OwnsValue und
(nicht zugewiesen (Container)) und
(nicht ReturnListElementX) dann
Vielleicht möchten etwas genauer zu erleichtern, fangen diese Error-Klasse ersetzen
Exception.CreateFmt zu erhöhen ('SelectBoldElement kann nicht Rückgabetyp ausgewählten von %s', [Id. Value.ClassName]);
Wenn Id. Wert TBoldObject wird dann beginnen
BoldObjects befinden sich im Besitz des Systems und kann nur im Ergebnis zurück
Ergebnis: = Id. Wert;
sonst enden, wenn Id. Wert TBoldObjectReference wird dann beginnen
SingleLinks halten-prozentige Objekte, die im Ergebnis zurück
Ergebnis: = (Id. Wert als TBoldObjectReference). BoldObject;
sonst endif (Id. Wert ist TBoldList) dann beginnen
Einige Listen sind Eigentum und können im Ergebnis zurück

& nb SP; Id nicht. OwnsValue dann
Ergebnis: = Id. Wert;
Eine InPS-Auswahl immer gibt eine Liste, wenn der Aufrufer das erste Element gewünscht, wird dies eingestellt werden
Wenn ReturnListElementX dann beginnen
Geltend machen Sie (TBoldList(id. Wert). Anzahl > 0, 'Logik-Fehler, SelectBoldElement');
Wenn Element = cLastElement then
Ergebnis: = TBoldList (Id. Wert) [TBoldList (Id. Wert). Count-1]
sonst
Ergebnis: = TBoldList (Id. Wert) [0]; Im Fall von Nullzählung war bereits gesorgt
anderes Ende
Wenn der Benutzer einen Container für das Ergebnis übergeben hat, setzen Sie es dort
if (Container TBoldList) dann
TBoldList(Container). AddList (TBoldList (Id. «««Value));
sonst endif (Id. Wert ist TBoldAttribute) dann beginnen
Wenn zugewiesen (Container) und (Container ist TBoldAttribute) dann
Dies hängt von der Aufrufer, die Klassen Recht zu erhalten, wird eine Ausnahme ausgelöst, wenn falsche
TBoldAttribute (Container). Zuweisen (Id. Wert);
Ergebnis: = Id. Wert;
Ende;
Schließlich
ID. Frei;
Ende;
Ende;
SelectBoldElement kann direkt verwendet werden, aber es empfiehlt sich, zur Vereinfachung, nannte es Wrapper erstellen. Wenn man oft ganzzahlige Werte aus einer einfachen SELECT-Anweisung abrufen musste, wäre eine Funktion wie folgt nützlich sein:
Funktion SelectInteger (sOCL: string; Default:Integer = 0): Integer;
var
AnInt: TBAInteger;
beginnen
AnInt: = TBAInteger.Create;
versuchen Sie
versuchen Sie
SelectBoldElement (null, sOCL, [], Exception, cm, AnInt);
Ergebnis: = anInt.AsInteger;
mit Ausnahme von
Ergebnis: = Default;
Ende;
Schließlich
anInt.Free;
Ende;
Ende;
Dieses Beispiel durchsucht eine Produktdatenbank von UPC und PLU, demonstrieren
die Verwendung des Parameters EClass.
Klasse Funktion TProduct.GetProduct (PLU, UPC: string;): TProduct;
const
cPLUOCL = ' Product.allInstances -> Wähle (Plu ='' %s'') -> ersten ';
cUPCOCL = ' Product.allInstances -> Wähle (upc ='' %s'') -> ersten ';
beginnen
Versuch, zuerst von UPC zu lokalisieren
Ergebnis: = SelectBoldElement (null, cUPCOCL, [UPC],
NULL, cm) als TProduct;
Wenn nicht dann (Ergebnis) zugewiesen
Nicht finden Sie die UPC zu, versuchen Sie die PLU
Ergebnis: = SelectBoldElement (null, cPLUOCL, [PLU],
EProductNotFound, 'Produkt nicht gefunden') als TProduct;
Dieser enthält einer Exception-Klasse, so dass wenn das Produkt noch nicht gefunden,
der EProductNotFound-Fehler wird ausgelöst und an anderer Stelle behandelt werden
Ende;

Diese dumme Methode der Umgang mit Berechtigungen veranschaulicht die Verwendung von Auswahl
ein Stamm als das System.
Funktion TEmployee.GetPermissions (Kategorie: Zeichenfolge): TPermissionList;
const
cOCL = ' Berechtigungen wählen -> (Kategorie = '' %s'')';
beginnen
SelectBoldElement (Self, cOCL, [Category], NULL, cm, Ergebnis);
Ende;









Generische Routine Fett Elemente auswählen


Generische Routine Fett Elemente auswählen : Mehreren tausend Tipps, um Ihr Leben einfacher machen.


Die SelectBoldElement-Funktion bietet eine wiederverwendbare und flexible Möglichkeit zum Auswählen von Objekten oder Listen.
Funktion SelectBoldElement (Root: TBoldElement; sOCL: string; Params: Array von const;
EClass: ExceptClass; ErrMsg: String;
Container: TBoldElement = Nil;
InPS: Boolean = False;
Vars: TBoldExternalVariableList = null): TBoldElement;
const
cLastElement = $FFFF;
var
OCL: string;
ID: TBoldIndirectElement;
ReturnListElementX: Boolean;
Element: Integer;
beginnen
Ergebnis: = Nil;
Element: = 0;
ReturnListElementX: = False;
Wenn Root = NULL Then
Root: = TBoldSystem.DefaultSystem;
Geltend zu machen (nicht (Container ist TBoldObject), 'SelectBoldElement kann nicht zurück BoldObjects im Container-Parameter');
Geltend machen (Assigned (Root), ' versuchen, wählen Sie ohne ein offenes System');
ID: = TBoldIndirectElement.Create;
versuchen Sie
OCL: = Format (sOCL, Params);
Dieser Code ermöglicht es diese Routine transparent ein 'erste' oder 'letzte'-Objekt in der PS auswählen
Wenn (Großbuchstaben (Kopie (Ocl, Länge (Ocl) -6, 8)) = '-> erste') und dann beginnen (InPS)
SetLength (Ocl, Length(ocl)-7);
ReturnListElementX: = True;
Ende;
Wenn (Großbuchstaben (Kopie (Ocl, Länge (Ocl)-5, 8)) = '-> Letzte') und dann beginnen (InPS)
SetLength (Ocl, Length(ocl)-6);
ReturnListElementX: = True;
Element: = cLastElement;
Ende;
Root.EvaluateExpression (Ocl, Id, InPS, Vars);
Wenn nichts ausgewählt wurde, raus, entweder durch den Benutzer angegebenen Fehler auslösen oder leise
Wenn (nicht zugeordnet (Id. Wert)) oder
((Id. Wert ist TBoldList) und (TBoldList (Id. Wert). Rechnen = 0)) dann
Wenn Assigned(EClass) dann
EClass.Create (ErrMsg) zu erhöhen
sonst
Ausfahrt; Nichts zurück, raus
Im Besitz der Werte können nicht zurückgegeben werden im Ergebnis, so müssen Container, es sei denn, dies eine Auswahl der InPS (ReturnListElementX ist)
Wenn Id. OwnsValue und
(nicht zugewiesen (Container)) und
(nicht ReturnListElementX) dann
Vielleicht möchten etwas genauer zu erleichtern, fangen diese Error-Klasse ersetzen
Exception.CreateFmt zu erhöhen ('SelectBoldElement kann nicht Rückgabetyp ausgewählten von %s', [Id. Value.ClassName]);
Wenn Id. Wert TBoldObject wird dann beginnen
BoldObjects befinden sich im Besitz des Systems und kann nur im Ergebnis zurück
Ergebnis: = Id. Wert;
sonst enden, wenn Id. Wert TBoldObjectReference wird dann beginnen
SingleLinks halten-prozentige Objekte, die im Ergebnis zurück
Ergebnis: = (Id. Wert als TBoldObjectReference). BoldObject;
sonst endif (Id. Wert ist TBoldList) dann beginnen
Einige Listen sind Eigentum und können im Ergebnis zurück

& nb SP; Id nicht. OwnsValue dann
Ergebnis: = Id. Wert;
Eine InPS-Auswahl immer gibt eine Liste, wenn der Aufrufer das erste Element gewünscht, wird dies eingestellt werden
Wenn ReturnListElementX dann beginnen
Geltend machen Sie (TBoldList(id. Wert). Anzahl > 0, 'Logik-Fehler, SelectBoldElement');
Wenn Element = cLastElement then
Ergebnis: = TBoldList (Id. Wert) [TBoldList (Id. Wert). Count-1]
sonst
Ergebnis: = TBoldList (Id. Wert) [0]; Im Fall von Nullzählung war bereits gesorgt
anderes Ende
Wenn der Benutzer einen Container für das Ergebnis übergeben hat, setzen Sie es dort
if (Container TBoldList) dann
TBoldList(Container). AddList (TBoldList (Id. «««Value));
sonst endif (Id. Wert ist TBoldAttribute) dann beginnen
Wenn zugewiesen (Container) und (Container ist TBoldAttribute) dann
Dies hängt von der Aufrufer, die Klassen Recht zu erhalten, wird eine Ausnahme ausgelöst, wenn falsche
TBoldAttribute (Container). Zuweisen (Id. Wert);
Ergebnis: = Id. Wert;
Ende;
Schließlich
ID. Frei;
Ende;
Ende;
SelectBoldElement kann direkt verwendet werden, aber es empfiehlt sich, zur Vereinfachung, nannte es Wrapper erstellen. Wenn man oft ganzzahlige Werte aus einer einfachen SELECT-Anweisung abrufen musste, wäre eine Funktion wie folgt nützlich sein:
Funktion SelectInteger (sOCL: string; Default:Integer = 0): Integer;
var
AnInt: TBAInteger;
beginnen
AnInt: = TBAInteger.Create;
versuchen Sie
versuchen Sie
SelectBoldElement (null, sOCL, [], Exception, cm, AnInt);
Ergebnis: = anInt.AsInteger;
mit Ausnahme von
Ergebnis: = Default;
Ende;
Schließlich
anInt.Free;
Ende;
Ende;
Dieses Beispiel durchsucht eine Produktdatenbank von UPC und PLU, demonstrieren
die Verwendung des Parameters EClass.
Klasse Funktion TProduct.GetProduct (PLU, UPC: string;): TProduct;
const
cPLUOCL = ' Product.allInstances -> Wähle (Plu ='' %s'') -> ersten ';
cUPCOCL = ' Product.allInstances -> Wähle (upc ='' %s'') -> ersten ';
beginnen
Versuch, zuerst von UPC zu lokalisieren
Ergebnis: = SelectBoldElement (null, cUPCOCL, [UPC],
NULL, cm) als TProduct;
Wenn nicht dann (Ergebnis) zugewiesen
Nicht finden Sie die UPC zu, versuchen Sie die PLU
Ergebnis: = SelectBoldElement (null, cPLUOCL, [PLU],
EProductNotFound, 'Produkt nicht gefunden') als TProduct;
Dieser enthält einer Exception-Klasse, so dass wenn das Produkt noch nicht gefunden,
der EProductNotFound-Fehler wird ausgelöst und an anderer Stelle behandelt werden
Ende;

Diese dumme Methode der Umgang mit Berechtigungen veranschaulicht die Verwendung von Auswahl
ein Stamm als das System.
Funktion TEmployee.GetPermissions (Kategorie: Zeichenfolge): TPermissionList;
const
cOCL = ' Berechtigungen wählen -> (Kategorie = '' %s'')';
beginnen
SelectBoldElement (Self, cOCL, [Category], NULL, cm, Ergebnis);
Ende;


Generische Routine Fett Elemente auswählen

Generische Routine Fett Elemente auswählen : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Generische Routine Fett Elemente auswählen
Wiezutun
Freunden empfehlen
  • gplus
  • pinterest

Kommentar

Einen Kommentar hinterlassen

Wertung