SETCURRENTKEY

Die Funktion SETCURRENTKEY bestimmt einen Key, der für die folgenden Operationen auf einer Record-Variable genutzt werden soll.

Parameter

Der Record-Paramter, unter dem die Funktion aufgerufen wird, bestimmt die Record-Variable, auf deren Felder sortiert werden soll. Der Field-Parameter bestimmt die Felder, auf die sortiert werden soll. Hierbei muss mindestens ein Feld angegeben werden.

Es ist zu beachten, dass nur Felder genutzt werden können, die sortierbar sind. Flowfilter, BLOBs, Variablen und Funktionen sind hierdurch ausgeschlossen.

Rückgabewert

Der optional abzufragende Rückgabewert ist vom Typ Boolean. Konnte die gewählte Sortierung angewendet werden, wird „true” zurück geliefert, wenn nicht „false”. Wenn kein Rückgabewert abgefragt wird und die Sortierung nicht angewendet werden konnte, bricht die Verarbeitung mit einem Runtime Error ab.

Hinweise zur Anwendung

Die Funktion SETCURRENTKEY durchläuft die aktiven Keys der angegebenen Record-Variablen und wendet dann den ersten gefundenen Key an, der die angegebenen Felder beinhaltet. Hieraus ergibt sich, dass auch bei mehreren aktiven Keys, die die angegebenen Felder beinhalten, immer der Erste angewendet wird, weshalb die Sortierreihenfolge von den Erwartungen abweichen kann, wenn die aktiven Keys der Tabelle nicht vorher geprüft werden.

Kann keine Sortierung auf den angegebenen Feldern durchgeführt werden, bricht die Anwendung mit einem Runtime Error ab.

Allgemein ist zu empfehlen, einen Key auf Felder zu setzen, auf die gefiltert werden soll, hierdurch entsteht weniger Sortier-Aufwand nach der Filterung, was zu einer besseren Performance führt.

Beispiel

In diesem Beispiel versuchen wir, auf ein nicht sortierbares Feld zu sortieren.

Zuerst legen wir eine passende Record-Variable an:

Name Datentyp Subtyp
Customer Record Customer

Anschließend fügen wir Code ein, der versucht, eine Sortierung auf das Feld „Picture” anzuwenden, welches ein BLOB-Feld und dementsprechend nicht sortierbar ist:

Customer.SETCURRENTKEY(Picture);

Bei dem Versuch, diesen Code auszuführen, erhalten wir nun folgenden Runtime Error:

Die Sortierung kann auf Grundlage der Felder Bild in der Tabelle Debitor nicht vorgenommen werden.

Um diesen Fehler zu vermeiden, kann man den Rückgabewert der Funktion abfragen.

Hierzu legen wir zunächst zwei Textkonstanten an:

Name ConstValue
KeySuccesfullTxt DEU = Der Key wurde erfolgreich ausgewählt., ENU = The key was successfully selected.
KeyNotFoundTxt DEU = Der Key konnte nicht gefunden werden., ENU = The key could not be found.

Danach ändern wir den Code wie folgt:

IF Customer.SETCURRENTKEY(Picture) THEN
  MESSAGE(KeySucessfullTxt)
ELSE
  MESSAGE(KeyNotFoundTxt);

Wenn wir nun den veränderten Code ausführen, bekommen wir statt dem Runtime Error folge Meldung:

Der Key konnte nicht gefunden werden.

Ändern wir nur den Code, sodass auf das Feld „No.” sortiert werden soll, erhalten wir folgende positive Meldung:

Der Key wurde erfolgreich ausgewählt.

Auch wenn die Abfrage allein einen Runtime Error unterbindet, ist hier darauf zu achten für den Fall eines Fehlers einen Code einzubauen, der darauf reagiert, da es sonst im Folgecode zu Fehlern kommen kann.