Lade...
 

Retrieve

Pseudofunktion Retrieve

ObjectStore akzeptiert für Queries und Indexpfade Zugriffsausdrücke, wobei gegenüber den in InstantView® verwendeten Zugriffsausdrücken Einschränkungen gelten. Mittels obengenannter Pseudofunktion können InstantView®-Zugriffsausdrücke trotzdem für Queries und Indexpfade angewendet werden. Dies ist notwendig

  • wenn eine nicht als Query-function angemeldete Funktion aufgerufen wird (gilt besonders auch für Funktionen, die ein transientes Objekt zurückgeben)
  • wenn ein Indexpfad mit mehr als einem Ordnungskriterium aufgebaut werden soll.

Retrieve in Queries

    Retrieve(zugriffsAusdruck)

erscheint innerhalb des Querystrings wie der Aufruf einer "normalen" Funktion.
Ein mit Retrieve(...) begonnener Ausdruck kann forstgesetzt werden, wenn er ein Objekt liefert und ein dynamisches Datenfeld folgt.
Ein "normales" Datenfeld oder der Aufruf einer Query-Funktion kann nicht folgen. Solche Terme müssen mit in den Zugriffsausdruck der Retrieve-Funktion gezogen werden: z.B. soll statt Retrieve(...Customer()).uniqueID der semantisch gleichwertige Ausdruck Retrieve(...Customer().uniqueID) benutzt werden.

Achtung!
Address Space Overflows in Retrieve kann nicht bearbeitet werden. Dies tritt vorallem unter 32Bit auf.

Achtung!
Retrieve mit mehr als einem Zugriffsausdruck kann innerhalb einer Query nicht benutzt werden.

 

Retrieve innerhalb eines Indexpfades

    Retrieve(zugriffsAusdruck0, zugriffsAusdruck1, ..., zugriffsAusdruckn)

Hier können (auch) mehrere Zugriffsausdrücke angegeben werden, um damit eine Ordnung nach Haupt- und Unterkriterien zu definieren. Diese Form kann ohne Einschränkungen mit Anweisung IndexPath benutzt werden.  Bitte achten Sie darauf, dass die Retrieve-Funktion als Parameter einer IndexPath Anweisung innerhalb von "" stehen muss: 

IndexPath(CX_BANK_CODE, "Retrieve(...Customer().uniqueID)")

Für Retrieve mit AddIndex gilt jedoch folgende Einschränkung:

Achtung!
Bei einem mit Retrieve aufgebautem Index geht der Zusammenhang zwischen Index und den die Ordnung bestimmenden Objektdaten verloren. Ein solcher Index kann nicht mehr automatisch aktualisiert werden. Schreibenden Operationen (DrainWindow, Put, ...), die für die Ordnung im Index relevant sein können, müssen in explizite Aufrufe der Funktionen BreakLink (vorher) und MakeLink (nachher) eingehüllt werden. BreakLink und MakeLink sind Funktionen des zum Index gehörenden Indexdescriptors (CX_INDEX_DESCRIPTOR-Objekt).

 

Beispiel: Index explizit aktualisieren

        Var(indexExpression, descriptor)

        CX_CLASS -> classID
             "Retrieve(LastUpdate(), name, firstName)" -> indexExpression
        indexExpression classID NULL GetManager(INDEX) Call(FindDescriptor) -> descriptor

        . . .

        object descriptor Call(BreakLink)
        "Gwendolen" object Put(firstName)
        object descriptor Call(MakeLink)

        . . .

 

Alle verwendeten Retrieve-Aufrufe müssen in CLASSIX.INI angemeldet werden. Jedem Ausdruck ist eine eindeutige Nummer (0 ... 64) zuzuordnen und der Typ des Ergebnisses wird nach der Klausel returns angegeben. Liefert Retrieve ein Objekt, kann die Typangabe weggelassen werden.
Für Retrieve mit mehreren Zugriffspfaden gibt es keinen eindeutigen Typ des Rückgabewertes; entsprechend soll auch keine  returns - Klausel angegeben werden. 

Beispiel:

        Queries   "Retrieve(Monitor(\"CX_STOCK_ACCOUNT\")).ABCevaluation > 1" Find(CX_ITEM)
            "Retrieve(birthday.IsHoliday() = TRUE)" FindFirst(CX_PERSON)                                

        CLASSIX.INI:
            Retrieve(Monitor("CX_STACK_ACCOUNT"), 2)
            Retrieve(birthday.IsHoliday(), 3) returns INTEGER