Ist das sd:cache-name - Attribut belegt, so wird beim Aufruf der Seite geprüft, ob dem sd:param-Element ein Wert zugewiesen worden ist. Falls ja, wird dieser Wert in der Session des aktuellen Nutzers gecacht. Dies läßt sich nutzen, um mit einem Link eine ID von einer Grundtabelle zu einer Detailtabelle zu übergeben, so daß die Detailtabelle nur die Einträge zur Grundtabelle anzeigt.
Parametername=explizit gelöscht werden.
Dies entspricht der Nutzung des sd:new-if-exists - Attributes für Relationen. Falls diese bsp. alphabetisch ausgegeben wird und mehrere hundert Zeilen umfaßt, dann würde der Wert eines sd:new-if-exists - Attributes für eine Zeile fehlen, die mit 'Z' beginnt. Damit läßt sich auch auf großen Datenbeständen einfach ein Detaildatensatz erzeugen, indem auf den Grundseiten die Einträge gemerkt und auf der Detailseite nur 'Neu' geklickt wird. In diesem Fall wurde die Detailzeile nachgeladen und wird ausgewählt angezeigt.
Beispiel: <sd:param sd:name='eTID' sd:std-value=':exTID' sd:cache-name='eTID'/>
Das ordnet dem Parameternamen eTID und damit dem gecachten Wert $eTID den Wert des Cookies exTID zu.
Für die mittlere Position sind Werte minutes, hours, days, weeks, months und years zulässig. Die letzte Position enthält eine Ganzzahl - negative Zahlen erzeugen ältere Datumsangaben.
Beispiel:
"@PID|int|$PID;@SID|int|§oS.StellengesucheId;@eTYPE|nvarchar|Mitarbeiter"
@PID/@SID/@eTYPE sind die in der Abfrage definierten Sql-Parameter.
Beispiel:
<sd:param sd:name="extern"
sd:std-value="_path-1"
sd:cache-name="eFiNa|eFID" sd:function="split-on-last-dot"
/>
<sd:param sd:name="rFiNa"
sd:query-name="get_FiNa" sd:cache-name="rFiNa;has_logo;rFiNa-soft"
sd:query-argument-list="@FID|int|$eFID"
sd:soft-check-with-redirect="1|$eFiNa|$rFiNa-soft|301|404|/|$rFiNa-soft|.|$eFID"
/>
Das erste sd:param-Element wird mit dem ersten Path-Ausdruck in der Url belegt. Dieser wird am letzten Punkt gesplittet, die
Werte werden den Variablen $eFiNa und $eFID zugewiesen (Firmenname und FirmenId).Das zweite sd:param - Element führt die Abfrage get_FiNa aus und cacht die drei Ergebnisse unter $rFiNa, $has_logo und $rFiNa-soft. Es übergibt dabei die ID, die unter $eFID gecacht ist.
Das sd:soft-check-with-redirect - Attribut sorgt anschließend dafür, daß:
<sd:param sd:name='page-Param' /> <sd:form sd:name='myForm'> Legen Sie hier den Parameterwert fest. Gültige Werte sind 11/12/13/22: <p /> <sd:input-text sd:param-name='page-Param' /><p /> <sd:button sd:name='myButton'> <sd:label-standard>Senden</sd:label-standard> </sd:button> <sd:button sd:name='reset' /><p /> <sd:rs sd:name='sample-output' sd:source-type='query' sd:source-name='einArtikel'> <sd:with-param sd:sql-param='@i' sd:param-name='page-Param' sd:datatype='int' /> <sd:normal> <tr> <sd:cell-set> <sd:normal> <td> <sd:cell-value /> </td> </sd:normal> </sd:cell-set> </tr> </sd:normal> </sd:rs> </sd:form>Die definierte Abfrage 'einArtikel' sieht wie folgt aus:
Declare @i int Select A.ArtikelId, A.A_Name, A.A_Preis From Artikel As A Where A.ArtikelId = @iDer vom Nutzer eingegebene Wert wird dem Seitenparameter 'page-Param' zugewiesen. Bei der Ausführung der Abfrage wird dieser Wert an den Sql-Parameter '@i' weitergereicht. Die Abfrage liefert die Zeile mit der passenden ArtikelId zurück.
Dann seien die folgenden Elemente definiert:
<sd:param sd:name='myParam' sd:cache-name='my-internal-name'/> <sd:ro-value sd:for='sample-input' sd:col='haupttabelleId' sd:new-value='$my-internal-name' sd:std-value='$my-internal-name' sd:missing-value='-1' /> <sd:ro-value sd:for='sample-output' sd:col='haupttabelleId' sd:std-value='$my-internal-name' sd:missing-value='-1' />Wird eine solche Seite mit einem Link der Form
<a> <sd:attribute sd:attribute-name='href'> seite.html?myParam=<sd:cell-value sd:col='haupttabelleId'/> </sd:attribute> Detail bearbeiten </a>aufgerufen, der sich innerhalb eines sd:rs -Elements für jede Zeile passend erzeugen läßt, dann wird beim Aufruf der übergebene Wert unter '$my-internal-name' gecacht. Anschließend kann der Nutzer über diese Ausgabeseite nur Detaildatensätze zu diesem Hauptdatensatz hinzufügen, ändern und löschen. Dies stellt das sd:ro-value -Element sicher. Damit wäre es jedoch möglich, daß ein Nutzer einen Hauptdatensatz aufruft, der ihm nicht gehört und zu diesem eine neue Detailzeile hinzufügt - das 'Add'-Recht bezieht sich nicht auf einen bestehenden Datensatz. Mit 'Hauptrecht notwendig' wird dies verhindert. Bei einer so definierten Relation überprüft der Datenbankserver beim Hinzufügen / Ändern / Löschen eines Detaildatensatzes, ob der Bearbeiter das Recht hat, den Hauptdatensatz zu bearbeiten.
Hat der Nutzer - bei gültiger Anmeldung - diese Seite über einen anderen Weg aufgerufen, so daß der Wert von sd:param unbelegt ist, so wird auch $my-internal-name nicht belegt. In diesem Fall läßt sich mit dem sd:missing-value -Attribut und einem negativen Wert jede Speicherung unterbinden, obwohl der Nutzer prinzipiell das Recht hat, zu dieser Tabelle Datensätze hinzuzufügen oder diese zu bearbeiten.
Ein Beispiel zu dieser Technik, das - unter Nutzung einer Anmeldung auf beispiel.server-daten.de - das Eingeben von Daten gestattet, findet sich auf https://beispiel.server-daten.de/ als Punkt Haupt- und Detaildatensätze. Analoge Konstruktionen lassen sich immer dort verwenden, wo Haupt- und eine oder mehrere Detailtabellen bearbeitet werden sollen.