Das sd:rs- Element

Das sd:rs-Element ist der Haupt-Container für die Ausgabe einer Tabelle, Sicht oder einer Abfrage. Ihm wird über die Attribute sd:source-type und sd:source-name eine dieser Quellen zugeordnet. Bei der Seitenverarbeitung wird zunächst diese Quelle einmal aufgerufen. Dies liefert eine interne Tabelle mit null oder mehreren Zeilen. Enthält das Element als Child-Element nur das sd:normal -Element, so wird dieses Element für jede Zeile einmal aufgerufen. Gibt es zusätzlich ein sd:alternate -Element, dann wird dieses für jede gerade Zeile (2, 4, 6 usw.) aufgerufen.
Typ
Äußere Elemente
Attribute
sd:source-type
Erlaubt einen der drei folgenden Werte:
	table
	view
	query
Das Attribut sd:source-name muß dementsprechend eine Tabelle, einen benutzerdefinierten View oder eine Abfrage bezeichnen.
sd:source-name
Muß mit dem Namen eines Objektes von dem Typ festgelegt werden, der in sd:source-type verwendet wurde.
sd:sc
Bezieht sich das sd:rs-Element auf eine Tabelle oder eine Sicht, so muß der Wert dieses Attributes (SortColumn) gleich dem Namen einer Spalte der zugrundeliegenden Tabelle sein. Nach dieser Spalte wird der erste Aufruf sortiert. Bezieht sich das sd:rs-Element auf eine Abfrage, so wird dieser Wert ignoriert.
sd:so
Wurde ein sd:sc - Attribut festgelegt, so kann mit dem sd:so-Attribut (SortOrder) die Sortierung festgelegt werden:

1 ... aufsteigend
2 ... absteigend

sd:range
Legt den ersten anzuzeigenden Bereich fest und wird in der Form 'Beginn-Ende' notiert. Falls nicht belegt, wird der Wert 1-10 verwendet.
sd:range-condition
Ermöglicht es, den vordefinierten sd:range-Wert durch eine Bedingung zu verändern. Ist hilfreich, wenn bsp. in einem Blog normalerweise 20 Einträge ausgegeben werden sollen. Die Monatsansicht soll aber 50 Einträge, damit den gesamten Monat anzeigen. Eine solche range-Condidition ist besser als ein zweites sd:rs - Element.

Logik: $Parametername|Parameterwert1|NeuerWert1|Parameterwert2|NeuerWert2

sd:edit
Der Wert dieses Attributs ist gleich einem sd:input-table -Elements. Enthält das sd:rs -Element Links zum Bearbeiten der einzelnen Zeilen, so wird dieses sd:input-table -Element mit den Daten der Zeile gefüllt.
sd:disallow-edit-call
Unterbindet das Lesen und Editieren in dieser Eingabemaske, falls der Name der Eingabemaske in der Url verwendet wird. Ein Editieren über ein sd:rs -Element ist zunächst noch möglich.
sd:view-only-visible
Die Aufruflogik für Datensätze läßt es zunächst zu, daß man Datensätze 'errät', indem eine Url der Form
http://datenbank-name.server-daten.de/ausgabe.html?action=sample-output-153
aufgerufen wird. Dies ist unproblematisch, falls Aufrufer ohnehin die Berechtigung zum Lesen des gesamten Datensatzes haben.
Falls allerdings ein Dienstleister-Katalog mit einfachen und mit Premium-Mitgliedern verwendet wird, so kann ein Mitglied seine Premium-Einträge bereits eintragen, ohne daß diese schon freigeschaltet sind. Diese Daten wären für andere durch ein Erraten abrufbar.
Ist das sd:view-only-visible-Attribut mit 'true' belegt, so wird genau dies verhindert. Nur die Daten, die im sd:rs -Element aktuell angezeigt werden und sich bsp. nach der USER_ID auf den aktuellen Nutzer einschränken lassen, können mit Details ausgegeben werden.
sd:edit-filter
Es kann Fälle geben, in welchen die Tabellenberechtigungen nicht genügen, um Lesezugriff auf Datenzeilen zu verhindern.

Bsp.: Interne Mitarbeiter können alle Datensätze bearbeiten. Externe Firmennutzer bilden eine eigene Gruppe, so daß mehrere externe Mitarbeiter dieselbe Menge an Daten bearbeiten kann. Zusätzlich sollen regionsbezogene Mitarbeiter nur die Datensätze ihrer Region lesen können.

Hier ist die Gruppenspalte _Group bereits belegt, ein regionsbezogener Mitarbeiter soll Datensätze verschiedenster Gruppen seiner Region lesen können.

Ein Eintrag 'RegionenSpalte|$RID' überprüft, ob der Datensatz-Wert für 'Regionenspalte' gleich dem für diesen Nutzer gecachten Wert $RID ist und läßt nur bei Übereinstimmung die Anzeige zu.

Ein Eintrag 'RegionenSpalte|^$RID' läßt die Anzeige zu, falls $RID leer oder gleich dem Wert der Regionenspalte ist.

Bei internen Mitarbeitern bleibt $RID leer, damit können diese sämtliche Datensätze lesen. Für regionsbezogene Mitarbeiter wird hier die RegionenId gecacht - sie sehen nur die Datensätze ihrer Region.

sd:delimiter
definiert den Trenner, der zwischen zwei Zellen eingefügt wird. Dieses Attribut kann nützlich sein, falls die Daten nicht in Form einer Tabelle, sondern bsp. in Form einer kommagetrennten Liste ausgegeben werden. Würde das Komma innerhalb des sd:normal- oder sd:alternate-Elements eingefügt werden, so würde es auch nach der letzten Spalte ausgegeben werden. Der Wert des sd:delimiter -Attributes wird dagegen nur zwischen den Spalten erzeugt und für die letzte Spalte unterdrückt.
sd:delimiter-element
definiert den Trenner, der als Html-Element zwischen zwei Elemente eingefügt wird. Ein Attributwert 'br' generiert das Html-Element <br/>.
sd:save-only-visible
Gültige Werte sind
true
false
Falls 'true', so wird ein Speichern- oder Löschbefehl nur dann ausgeführt, wenn der zu bearbeitende Datensatz im Laufzeitcache des aktuellen Nutzers existiert, also auch angezeigt wird. Dieses Attribut verhindert das Speichern / Löschen beliebiger Datensätze über die Id und sollte in jenen Fällen verwendet werden, in welchen anonyme Nutzer im Rahmen einer Bestellung ihre Bestelldetails angezeigt bekommen und einzelne Bestelldetails speichern / löschen dürfen. Da nur die Bestelldetails angezeigt werden, die zur Haupt-Id gehören und da die Haupt-Id aus dem Servercache geholt wird, kann auf diese Weise kein fremder Detaildatensatz gespeichert oder gelöscht werden.
sd:del-only-cached
Falls dieses Attribut mit dem Wert einer sd:cached-id - Variablen 'myId' belegt ist, wird eine Löschanforderung der Form
Dateiname.html?action=objektname-d-myId'
nur ausgeführt, falls der übergebene Name gleich diesem Attributwert ist. Die ID der zu löschenden Zeile wird in diesem Fall aus dem Laufzeitcache des ausführenden Nutzers ausgelesen. Dies verhindert Löschversuche durch die Übergabe einer Zahl, falls anonyme Nutzer Datensätze hinzufügen und löschen dürfen. Falls nur authentifizierte Nutzer Daten bearbeiten dürfen, ist diese Technik nicht notwendig, da nun der Datenbankserver die Berechtigung für den aktuellen Benutzer überprüft.
sd:source-table
Falls aus einer Abfrage heraus gelöscht werden soll, muß diesem Attribut der Name der Tabelle zugeordnet werden, aus welcher die zu löschende ID stammt. Da eine Abfrage mehrere Tabellen miteinander verknüpfen kann, wäre der Löschbefehl ohne dieses Attribut nicht eindeutig. Für Tabellen und Views wird dieser Wert ignoriert.
sd:mail-address-table
Wenn dieses sd:rs -Element mit sd:source-type='table' und sd:source-name='_dT_mails' als vordefiniertem Ausdruck deklariert ist, dann dient dieses Element zum Lesen empfangener Mails. Das sd:mail-address-table - Attribut benennt die Tabelle, welche vordefinierte / bekannte Mails enthält. Die Mails werden diesen Versendern zugeordnet und können bsp. automatisch weiterverarbeitet werden.
sd:mail-table
Das Attribut benennt die Tabelle, in welcher die Mails gespeichert werden.
sd:mail-account
kann mit 'global-ID' belegt werden. Dann wird das sd:rs-Element genutzt, um die Mails eines globalen Mailaccounts anzuzeigen.
sd:mail-options
kann eine kommagetrennte Liste von Werten enthalten. Derzeit zulässig: find-link. Dies bewirkt, daß in der Mail der erste mit 'http://' beginnende Link gesucht und in einer zusätzlichen Spalte ausgegeben wird, so daß dieser direkt klickbar ist.
sd:mail-actions
Kann mit einer Liste von Aktionen belegt werden. Beim Klick werden diese Aktionen mit den ausgewählten Mails durchgeführt.
sd:allow-remove
Muß mit dem Wert 'true' belegt werden, um ein Löschen der Mails zu erlauben.
sd:one-value-required
Ermöglicht die Deklaration einer Pflichtliste, die sowohl Spaltennamen des zugeordneten sd:input-table -Elements als auch sd:param -Elemente enthalten kann. Letzteren wird ein '%' vorgestellt.
Dies ist bsp. nützlich bei der Umkreissuche, falls mindestens ein Wert ausgefüllt und das Anzeigen der Gesamtliste unterbunden werden soll.
sd:refresh-explicit
Wenn das Attribut mit 'true' belegt ist, dann wird diese Ausgabe bei jedem Aufruf aktualisiert. Das ist im Allgemeinen nicht sinnvoll, kann aber notwendig sein, falls bsp. Zufallsbilder angezeigt werden sollen.
sd:id-search-as-edit-call
Wenn das Attribut mit 'true' belegt ist, wird die Suche nach einer Tabellen-ID so interpretiert, daß zusätzlich der Datensatz zum Editieren angezeigt wird.
sd:soft-check
Ermöglicht einen schwachen / soft - Test einer Eingabe. Wird bsp. die Seite anzeige.folder definiert, um Adressen der Form
http://datenbank-name.server-daten.de/anzeige/Max.Mustermann/195
zu verwenden, so kann getestet werden, ob der Datensatz mit der ID tatsächlich den Vornamen 'Max' und den Nachnamen 'Mustermann' enthält.

Beispiel für eine Belegung:

1|404|Vorname|Nachname
Zunächst wird die Position des zu überprüfenden Wertes in der Url angegeben (hier Position 1), dann der stattdessen zu generierende Html-Statuswert (hier: 404, nicht gefunden), damit fehlerhaft verlinkte Seiten nicht in den Suchmaschinen erscheinen. Schließlich folgt die Liste der Spalten, die - zusammengesetzt - den Wert ergeben sollen. Dies gelingt auch, falls die Tabelleneinträge Umlaute, die Urls dagegen ae/oe/ue enthalten.
sd:compare-versions
Kann mit zwei '|' - getrennten Spaltennamen belegt werden. Die beiden Zellen werden als alte|neue Version interpretiert, es wird eine zusätzliche Tabelle rs-name + '-compare' mit dem Ergebnis eines Versionsvergleiches mit zur Ausgabe geschickt.
sd:remove-when-saved
Falls dieses Attribut mit 'true' belegt und irgendeine Zeile in der Seite gespeichert wird, dann wird das übergeordnete Ergebnis gelöscht und anschließend neu von der Datenbank geladen. Das ist nützlich, falls es Abhängigkeiten zwischen Eingaben und Ausgaben gibt, die sich nicht über andere Möglichkeiten deklarieren lassen.
Fehlt das Attribut und existieren solche Abhängigkeiten, so kann es zu Fehlanzeigen kommen. Das System nutzt - absichtlich - umfangreiche Caching-Techniken, so daß Kalender- und Ausgabetabellen nur neu geladen werden, falls innerhalb der Ausgabeseite ein Grund dafür vorliegt (geändertes Datum, Klick auf den Such-Button).
sd:supress-range-reset
Falls dieses Attribut mit 'true' belegt ist, dann wird der Bereich des Suchergebnisses (1 - 10, 11 - 20) nicht auf 1-10 bzw. den Standardbeginn zurückgesetzt, falls Suchparameter geändert wurden. Normalerweise wird dieses Zurücksetzen erwartet: Sieht man die dritte Seite der Suchergebnisse und ändert man die Sortierung, dann sollen Ergebnis 1-10 in bezug auf die neue Sortierung angezeigt werden. Dieses Verhalten ist jedoch störend, wenn die Maske nur einen Datensatz ausgibt, um ein direktes Blättern durch Detailergebnisse zu ermöglichen. Der Wert 'true' ermöglicht in diesem Fall ein Unterdrücken des Sprungs auf die erste Seite.
sd:supress-proc-info
In sd:rs - Elementen werden versteckte input-Felder eingefügt, um bestimmte zusätzliche Informationen zu hinterlegen. Mit einem Wert 'true' für dieses Attribut kann das unterbunden werden.
sd:social-bookmarks
kann eine kommagetrennte Liste von Social-Bookmarks-Anbietern enthalten.
sd:save-columns
Wenn ein View mit Detailspalten zum Anhaken angezeigt wird, dann kann die Detailtabelle zusätzliche Spalten enthalten, deren Auswahl ebenfalls gespeichert werden soll. Gibt es bsp. Tabellen 'Rechtsgebiete', 'Anwälte', eine Verknüpfungstabelle vk_Rechtsgebiete_Anwälte und einen View v_Rechtsgebiete mit Detailspalten, so kann die Verknüpfungstabelle eine zusätzliche Spalte 'ist_Fachanwalt' enthalten, deren Wert ebenfalls gespeichert werden soll. Die Deklaration
sd:save-columns='cb_ist_Fachanwalt'
leistet das Gewünschte. Sie stellt sicher, daß der Wert der Zusatzspalte ebenfalls gespeichert wird.
sd:use-all-values
Wenn ein View mit Detailspalten zum Hinzufügen von Zeilen angezeigt wird und Zeilen dadurch generiert werden sollen, daß Werte aus Pulldownlisten auszuwählen sind, ohne daß eine Checkbox zur Verfügung steht, dann kann dieses Attribut mit 'true' belegt werden.
sd:row-aggregator
Ermöglicht das Angeben einer Spalte. Falls dieser Wert existiert, wird der Content des sd:rs - Elements nicht einmal pro Zeile, sondern nur einmal pro verschiedenem Wert in dieser Spalte (aufsteigend sortiert) aufgerufen. Dies ermöglicht es, im Content sd:with-row-search - Attribute zu nutzen, die ihrerseits die passenden Zeilen für die Ausgabe zusammensuchen.
sd:row-start
Falls angegeben, wird der erste Row-Aggregator-Wert aus diesem Attribut ermittelt. Ansonsten wird der Wert der ersten Datenzeile verwendet.
sd:row-end
Falls angegeben, wird der letzte Row-Aggregator-Wert aus diesem Attribut ermittelt.
sd:external-filter
sd:rs -Elemente können inzwischen geschachtelt werden. Wird dieses Attribut mit einer '|' - getrennten Kombination zweier Spalten belegt, dann zeigt dieses - innere - sd:rs -Element pro Zeile nur jene Einträge an, bei welchen der Wert der eigenen, zweiten Spalte gleich dem Wert der äußeren, ersten Spalte ist.
sd:minutes-difference
Falls belegt, werden die Zeilen vom Datenbank-Server mit diesem Abstand (15, 30 oder 60 Minuten) zurückgegeben.
sd:cols-as-rows
Falls mit dem Wert 'true' belegt, wird die auszugebende Tabelle nicht zeilen-, sondern spaltenweise durchlaufen.
sd:cache-name
Erwartet eine Zeichenfolge als Wert. Unter diesem Namen wird das Ergebnis der ausgeführten Suche gecacht. Dies kann nützlich sein, falls die Liste kontinuierlich benötigt wird, um durch die Ergebnisse zu blättern.
sd:add-is-member
Falls dieses Attribut mit dem Namen einer Tabelle belegt ist, dann kann die Abfrage dazu genutzt werden,
sd:supress-pathinfo
Falls 'true', werden für das übergeordnete sd:rs- bzw. sd:input-table - Objekt keine PathInfo - Ausgaben generiert. Das kann nützlich sein für Elemente, durch die bsp. ohnehin nie geblättert wird (sd:rs auf einer Startseite als Linkliste oder mit einer einzigen Zeile als Ausgabe).
sd:xpath-as-row-selector
Kann einen XPath-Ausdruck enthalten.
sd:use-new-value
Keine Beschreibung
sd:cached-column
Enthält einen Spaltennamen. Diese Spalte wird - zusammen mit der Positionsspalte - gecacht.
sd:name
Legt den Namen des Objektes fest. Dieses Attribut ist immer ein Pflicht-Attribut.
sd:create-no-output
Kann mit 'true' belegt werden. Dann wird der Inhalt dieses sd:rs - Elements nicht ausgegeben. Das ist sinnvoll, wenn die Abfrage sehr viele Daten für eine Grafik enthält. Es verhindert, daß für 1000 Zeilen tausendmal das sd:normal-Element aufgerufen wird.
sd:remove-when-used
Kann mit 'true' belegt werden. Dann wird das Ergebnis einer Abfrage nach dem Ausführen der Xsl-Transformation gelöscht und damit nicht in den Nutzercache transferiert.
Child-Elemente
Beispiele
Das folgende Beispiel zeigt eine typische Minimal-Darstellung einer Tabelle. Hier werden die auszugebenden Spalten und ihre Reihenfolge explizit benannt:
<table border='1'>
  <sd:rs sd:source-type='table' sd:source-name='Artikel'
    sd:name='sample-output'>
    <sd:normal>
      <tr>
        <td>
          <sd:cell-value sd:col='ArtikelId'/>
        </td>
        <td>
          <sd:cell-value sd:col='A_Name'/>
        </td>
      </tr>
    </sd:normal>
    <sd:alternate>
      <tr style='background-color:#eeeeee;'>
        <td>
          <sd:cell-value sd:col='ArtikelId'/>
        </td>
        <td>
          <sd:cell-value sd:col='A_Name'/>
        </td>
      </tr>
    </sd:alternate>
  </sd:rs>
</table>
Das Ergebnis ist eine einfache Tabelle mit unterschiedlicher Darstellung für die ungeraden und die geraden Zeilen:

11Oberhemd
12Oberhemd
13Hose
22Mantel

Anstelle der direkten Formatierungen können auch CSS-Klassen genutzt werden. Mit der Verwendung des sd:cell-set -Elements und der dynamischen Generierung kann der Code nochmals komprimiert werden:

<sd:rs sd:source-type='table' sd:source-name='Artikel'
  sd:name='sample-output'>
  <sd:normal>
    <tr>
      <sd:cell-set>
        <sd:normal>
          <td>
            <sd:cell-value/>
          </td>
        </sd:normal>
      </sd:cell-set>
    </tr>
  </sd:normal>
</sd:rs>
Hier fehlt das sd:alternate -Element, so daß die geraden Zeilen genauso wie die ungeraden Zeilen ausgegeben werden. Aufgrund der dynamischen Generierung legt die Datenquelle die Reihenfolge der Spalten fest.
Bemerkungen
Das sd:rs-Element gibt selbst keine Spaltenüberschriften aus. Hierfür kann - innerhalb von <table> und oberhalb von <sd:rs>, das sd:col-set -Element genutzt werden. Es muß auf das zugeordnete sd:rs-Element verweisen und kann dessen Spalten dynamisch durchlaufen. Alternativ können die Spaltenüberschriften direkt unterhalb von <table> starr notiert werden.

Es ist nicht notwendig, daß im Content eines sd:rs-Elements eine Tabelle notiert wird. Die einzelnen Spalten können auch kommagetrennt aufeinander folgen. Oder eine Spalte ist in ein <dt>, eine zweite Spalte in ein <dd>-Element eingeschlossen, so daß sich eine Folge von Begriffen und Definitionen ergibt.

Beispiel:

<dl>
  <sd:rs sd:source-type='table' sd:source-name='definitionen'
    sd:name='sample-output'>
    <sd:normal>
      <dt>
        <sd:cell-value sd:col='ausdruck'/>
      </dt>
      <dd>
        <sd:cell-value sd:col='erläuterung'/>
      </dd>
    </sd:normal>
  </sd:rs>
</dl>
Die Ausgabe enthält pro Tabellenzeile etwas wie:
Ein Ausdruck
Erläuterung dieses Ausdrucks

Falls die Tabelle zusätzlich Linktexte und Urls enthält, könnte die Ausgabe Links unter Verwendung des sd:attribute -Elements erhalten.

Es ist ebenfalls denkbar, daß bekannt ist, daß die auszugebende Tabelle immer nur eine Zeile enthält. Man denke an eine Abfrage, die höchstens eine Zeile zurückgibt. Damit läßt sich der Inhalt des sd:normal -Elements über die ganze Ausgabeseite verteilen, so daß bsp. eine Serienbrief-Funktionalität für Rechnungen bereitgestellt wird.



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-2019 Jürgen Auer, Berlin.