Das sd:ro-value- Element

Wird eine Eingabemaske zur Erstellung neuer oder zur Bearbeitung vorhandener Datensätze zur Verfügung gestellt, so ermöglicht das sd:ro-value - Element die Festlegung eines schreibgeschützten Wertes (read-only) für eine einzelne Zelle oder die unveränderte Übernahme des alten, bereits gespeicherten Wertes, falls ein Datensatz editiert wird. In diesem Fall muß das sd:for -Attribut mit dem Namen eines sd:input-table -Elements belegt werden, sd:col benennt eine Spalte der zugeordneten Tabelle.

Eine zweite Nutzung besteht darin, dem sd:for -Attribut den Namen eines sd:rs -Elements zuzuweisen. Jede Suche, welche das sd:rs -Element neu füllt, wird mit den Werten des sd:ro-value-Elements ergänzt ausgeführt. Damit kann bsp. sichergestellt werden, daß nur die zu einem Hauptdatensatz passenden Detailzeilen ausgegeben werden.

Das sd:std-value -Attribut kann mit dem Wert eines passenden Datentyps belegt werden, dieser wird nach der Erstellung oder Bearbeitung eines Datensatzes direkt übernommen. Oder das Attribut erhält den Spaltennamen als Wert, also denselben Wert wie das sd:col -Attribut. In diesem Fall wird beim Editieren einer Zeile der alte, bereits in der Datenbank gespeicherte Wert unverändert übernommen. Schließlich kann mit dem sd:new-value -Attribut ein Wert festgelegt werden, welcher der Zelle dann zugewiesen wird, falls ein neuer Datensatz erstellt wird.

Eine weitere Belegung für sd:new-value / sd:std-value besteht darin, '$' und einen Namen zu nutzen. Existiert für diesen Namen aufgrund einer früheren Speicherung einer Zeile unter Verwendung des sd:cached-id -Attributes oder aufgrund des Seitenaufrufs mit dem Namen eines sd:param -Elements mit gesetztem sd:cached-name -Attribut ein für diesen Nutzer gecachter Wert, so wird dieser Wert eingesetzt.

Werden sd:new-value / sd:std-value mit '%' und einen Namen belegt, so wird der Wert eines gleichnamigen sd:param -Elements eingesetzt.

Diese Technik stellt bsp. eine Warenkorb-Funktionalität bereit: Die erste Aktion eines Nutzers speichert eine Bestell-Zeile und cacht die Id. Die folgenden Speicherungen erzeugen Datensätze in Detailtabellen zu dieser Bestellung und erhalten die Id des Hauptdatensatzes über das sd:ro-value - Element.

Eine zweite Nutzung besteht darin, eine Ausgabeseite mit dem Namen eines sd:param -Elements und der ID eines Hauptdatensatzes aufzurufen, so daß dieser Wert ausgelesen und gecacht wird. Damit läßt sich sicherstellen, daß nur die zu diesem Hauptdatensatz gehörenden Detaildatensätze angezeigt werden.

Die dritte Verwendung dieses Elements besteht darin, bei einer Tabelle eine Spalte 'Editierstatus' nicht auszugeben und sie für neue Datensätze bsp. mit sd:new-value='1' vorzubelegen. Damit kann mit einer einfachen Suche innerhalb der internen Bearbeitung ermittelt werden, welche Datensätze neu hinzugefügt wurden. Eine interne Bearbeitung setzt den Wert bsp. auf '2' (= freigegeben) oder auf 4 (= gesperrt). Wird ein Datensatz erneut auf einer Ausgabeseite editiert, so sichert die Zuweisung <sd:std-value='Editierstatus'>, daß der Wert dieser Spalte unverändert bleibt. Zugehörige Ausgaben nutzen ein sd:ro-value - Element mit sd:std-value='2', so daß Leser nur die freigegebenen Zeilen sehen.

Der Wert des sd:missing-value -Attributs wird verwendet, falls nach allen vorherigen Prüfungen noch kein Wert ermittelt werden konnte. Das Attribut sollte immer dann genutzt werden, falls eine Nichtbelegung zu fehlerhaften Speicherungen oder zu Informationslecks führen könnte. So läßt sich das Speichern eines ansonsten unsinnigen Detaildatensatzes vermeiden, falls für die Relationenspalte der Wert -1 über das sd:missing-value -Attribut gesetzt wird. Ebenso erzeugt der Wert -1 für eine Relationenspalte leere Suchergebnisse.

Das sd:ro-value - Element ist als Hauptelement definiert. Es kann damit innerhalb seines sd:input-table -Elements genutzt werden, ebenso können jedoch mehrere dieser Elemente am Beginn des body-Abschnitts gesammelt werden.

Typ
Äußere Elemente
Attribute
sd:for *
Der Wert dieses Attributes muß gleich dem Namen eines sd:input-table -Elements sein.
sd:col *
Legt den Namen der Spalte fest, für welche der Wert vorbelegt werden soll
sd:new-value
Legt den Wert für das sd:ro-value -Element fest, der beim Einfügen eines neuen Datensatzes der Zelle zugewiesen wird.
sd:std-value
Legt den Standardwert für das sd:ro-value -Element fest, der bei jeder Dateneingabe genutzt wird.
sd:missing-value
Der Wert dieses Attributes wird für die Spalte verwendet, falls alle bisherigen Prüfungen noch keinen Wert bereitgestellt haben. Falls bsp. ein sd:std-value - Wert mit '%' und dem Namens eines Parameters definiert wurde, der Parameter jedoch nicht belegt ist, ergibt sich ein nicht definierter Wert. Stattdessen wird der Wert von 'sd:missing-value' eingetragen.
sd:parent-value
In einer Eingabemaske mit einer Pulldown-Liste kann es wünschenswert sein, daß die Pulldown-Liste nur gefilterte Werte enthält - nicht alle. Dann kann dem sd:relation - Attribut der Name einer Verknüpfung und zusätzlich dem sd:parent-value - Attribut ein Cache-Name (mit '$' beginnend) und - zusätzlich durch ein Leerzeichen getrennt - ein Standardwert zugewiesen werden. Existiert der Cache-Name, so wird dieser genutzt. Ansonsten wird der Standardwert verwendet, um die Ausgabeliste vorzufiltern.
sd:relation
Wenn dieses Attribut mit dem Namen der Relation für die sd:col -Spalte belegt ist und zusätzlich ein sd:parent-value -Attribut angegeben wurde, dann wird der sich aus dem sd:parent-value -Attribut ergebende Wert verwendet, um die Relation zu filtern.
sd:new-if-exists
Muß mit dem Namen eines sd:param -Elements mit führendem '$' belegt werden. Wenn es einen vom Nutzer gesetzten Wert für diese Spalte gibt und das gecachte Element fehlt, dann wird der empirische Wert weiterverwendet und nicht überschrieben.
sd:required
Es kann Fälle geben, in welchen es nützlich ist, daß eine Spalte normalerweise kein Pflichtfeld, in einer Ausgabeseite jedoch als Pflichtfeld behandelt wird. Dies wird durch einen Wert 'true' für dieses Attribut erzwungen.
sd:ignore-as-change-source
Wenn mit 'true' belegt, dann wird ein geänderter Eintrag nicht als Änderung der Zeile gewertet.

Das ist nützlich, wenn eine Spalte eines Unterformulars per sd:ro-value - Element vorbelegt wird, aber dadurch keine unnötigen Leerzeilen entstehen sollen.

Keine Child- oder inneren Elemente zulässig
Beispiele
Beispiel für das Eingabeformular 'table-input': Die Spalte <Editierstatus> erhält den Initialwert 1, anschließend wird der intern zugewiesene Wert beibehalten. Dieser ist damit nur noch über die internen Masken änderbar.
<sd:ro-value
	sd:for='sample-input'
	sd:col='Editierstatus'
	sd:std-value='Editierstatus'
	sd:new-value='1'/>
Beispiel für die Suche: Damit ist sichergestellt, daß nur jene Zeilen ausgegeben werden, die zur Ausgabe freigegeben wurden:
<sd:ro-value sd:for='sample-output'
	sd:col='Editierstatus' sd:std-value='2'/>
Beispiel für ein Element, das gegebenenfalls ein leeres Suchergebnis produziert.
<sd:ro-value
	sd:for='sample-output'
	sd:col='main_TableId'
	sd:std-value='$my-internal-param'
	sd:missing-value='-1'/>
Bemerkungen
Falls eine Ausgabeseite eine Bearbeitungsmaske für eine Tabelle enthält, in welcher Spalten fehlen, die für interne Zwecke benötigt werden, so müssen geeignet viele sd:ro-value-Elemente erstellt werden, die ein Kopieren der intern eingetragenen Werte erzwingen. Denn ein Browser sendet im Fall eines fehlenden Elements und im Fall eines leeren Feldes keine Einträge zurück, so daß bei der Verarbeitung der Rückgabedaten nicht mehr zwischen diesen Alternativen unterschieden werden kann.


Kontaktformular:

Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!

Die Erläuterungen zum Datenschutz habe ich gelesen und stimme diesen zu.

© 2003-2018 Jürgen Auer, Berlin.