Deklariert einen sd-Parameter und ordnet ihm eventuell einen Standardwert zu. Ein sd-Parameter ist innerhalb
der Seite gültig, in welcher er definiert worden ist. Er kann in
sd:with-param
-Elementen verwendet
werden, um benutzerdefinierten Abfragen Sql-Parameter zu übergeben. Der Wert läßt sich zusätzlich entweder durch
eine Url-Ergänzung (Dateiname.html?Parametername=neuerWert) oder durch einen interaktiv vom Leser der Seite eingetragenen
Eintrag in ein Formularfeld festlegen. Für letzteres kann ein
sd:input-text
-Element mit passendem
sd:param-name
-Attribut innerhalb eines
sd:form
-Elements ohne ein
sd:input-table
-Element
genutzt werden.
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.
Das folgende Beispiel demonstriert die Verwendung dieses Elements, um einer Abfrage einen Wert per Formularfeld
zu übergeben:
<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 = @i
Der 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.
Beispiel für das Cachen eines Wertes
Eine Ausgabeseite stelle eine Eingabemaske für eine Detailtabelle 'detailtabelle' bereit. Die Haupttabelle sei über
die Spalte 'haupttabelleId' verknüpft. Ferner sei die verknüpfende Relation mit 'Hauptrecht notwendig' = Ja definiert,
Nutzer haben das Recht, zur Haupttabelle und zur Detailtabelle Datensätze hinzuzufügen, alle Daten zu lesen und eigene
Zeilen zu bearbeiten.
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.
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!