Zum Hauptinhalt springen

Beispiel - Eigenschaft Custom

Beispiel - Eigenschaft Custom Mehrere Werte in der Custom-Eigenschaft speichern

In diesem Beispiel werden zwei Funktionen vorgestellt, mit denen mehrere Werte in der Eigenschaft Custom gesetzt und abgefragt werden können.

Die einzelnen Werte werden ähnlich wie in HTML-Tags in der Eigenschaft eingetragen. Sie bestehen aus einem Namen und einem Wert. Der Name wird durch ein Gleichheitszeichen (=) vom Wert getrennt. Der Wert muss mit dem Semikolon (;) abgeschlossen werden. Es entstehen so Paare in der Form <Name>=<Wert>;.

Die Funktion SetValue() setzt die Paare korrekt zusammen. Als erster Parameter wird der Deskriptor des Objektes übergeben, dessen Custom-Eigenschaft gesetzt werden soll. In den Parametern aName und aValue werden der Name und der Wert übergeben. In den alpha-Werten dürfen die Zeichen '=' und ';' nicht enthalten sein.

Um einen Eintrag zu Löschen, wird ein Name mit '' als Wert übergeben.

sub SetValue
(
aObject : int;
aName : alpha(20);
aValue : alpha(8192);
) : logic
local
{
tPosStart : int;
tPosEnd : int;
}
{
// Startposition des Namens ermitteln
tPosStart # StrFind(aObject->wpCustom, aName + '=', 0);
if (tPosStart = 0)
{
// Name nicht vorhanden, am Ende einfügen
aObject->wpCustom # aObject->wpCustom + aName + '=' + aValue + ';';
}
else
{
// Ende des Wertes ermitteln
tPosEnd # StrFind(aObject->wpCustom, ';', tPosStart);
if (StrLen(aValue) > 0)
// Wert vorhanden, an gleicher Stelle einfügen
aObject->wpCustom # StrCut(aObject->wpCustom, 0, tPosStart - 1) +
aName + '=' + aValue + ';' +
StrCut(aObject->wpCustom, tPosEnd + 1, 8192);
else
// Wert ist leer, Name und Wert löschen
aObject->wpCustom # StrCut(aObject->wpCustom, 0, tPosStart - 1) +
StrCut(aObject->wpCustom, tPosEnd + 1, 8192);
}

return(true);
}

Mit der Funktion GetValue() wird die Position des Wertes in der Zeichenkette der Eigenschaft Custom ermittelt und der zugehörige Wert zurückgegeben.

sub GetValue
(
aObject : int; // Objektdeskriptor
aName : alpha(20); // Name des Wertes
) : alpha;
local
{
tPosStart : int;
tPosEnd : int;
}
{
// Startposition des Namens ermitteln
tPosStart # StrFind(aObject->wpCustom, aName + '=', 0);
if (tPosStart = 0) // Name nicht gefunden
return('');

// Startposition des Wertes ermitteln
tPosStart # tPosStart + StrLen(aName + '=');

// Endeposition des Wertes ermitteln
tPosEnd # StrFind(aObject->wpCustom, ';', tPosStart);

return(StrCut(aObject->wpCustom, tPosStart, tPosEnd - tPosStart));
}

Die Funktionen überprüfen nicht die übergebenen Parameter. Dies sollte zumindest in der Funktion SetValue() durchgeführt werden, um zu verhindern, dass die Maximallänge der Eigenschaft Custom überschritten wird und Zeichenketten mit den Zeichen "=" und ";" übergeben werden.