vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbacknächstes Kapitel


Tag 16

Komplexe Techniken: Datensammlung und Berichte

Bisher haben Sie gelernt, wie Daten in Datenbanken eingegeben und Abfragen dazu genutzt werden, diese wieder anzuzeigen - aber die beiden Prozesse wurden kaum integriert. Wenn eine Website dynamische Daten anzeigt, gibt es in der Regel auch ein Backend für diese Website, wo die gespeicherten Daten aktualisiert werden.

Dieses Kapitel legt ein Nachrichten-Board-System an, das die Techniken zum Sammeln von Daten und zur Berichterstellung nutzt. Damit werden fast alle Funktionsmerkmale von UltraDev in einer einzigen Applikation kombiniert. Die Themen der heutigen Lektion:

16.1 Eingaben und Ausgaben: Übersicht über das Nachrichtensystem

Eine der gebräuchlichsten Web-Applikationen, die es gibt, sind die Nachrichten-Boards. Das sind Foren, in denen Benutzer Nachrichten austauschen können. Vor einigen Jahren habe ich ein Nachrichten-Board-Programm (in C geschrieben) für mehr als 2.000 DM verkauft. Glücklicherweise kann es heute in UltraDev in ein bis zwei Stunden entwickelt werden.

Dieses Kapitel kombiniert viele der Standardverhalten von UltraDev, die Sie bisher kennen gelernt haben. Das Ergebnis ist eine Nachrichten-Applikation, die zahlreiche Funktionsmerkmale der kommerziellen Pakete anbietet - und Sie können sie ganz alleine entwickeln. Damit bieten Sie Benutzern und Administratoren insbesondere die folgenden Möglichkeiten:

Definition der Sitemap

Wie für jedes Projekt sollten Sie als Erstes einen Plan für Ihre Site anlegen. Die Sitemap definiert alle Bildschirme, die wir anlegen müssen, und beschreibt die grundlegende Kommunikation zwischen den Bildschirmen. Für unser Nachrichten-Board-System brauchen wir relativ wenige Bildschirme. Das endgültige Produkt bietet eine umfassende Funktionalität, aber wir kommen mit ein paar wenigen Bildschirmen aus, weil der Inhalt die Änderungen darstellt. Und das brauchen wir:

  1. Nachrichtenliste - Eine Liste aller Nachrichten, die im System abgelegt wurden. Dieser Bildschirm kann eine integrierte Suchfunktion enthalten, ebenso wie Spaltenüberschriften, nach denen durch Anklicken sortiert werden kann. Statt die Bildschirme für jedes dieser Funktionsmerkmale (Sortieren/Suchen) voneinander zu trennen, verwenden wir eine einzige Anzeige mit mehreren Serververhalten.
  2. Nachrichtenanzeige - Wenn ein Benutzer eine Nachricht gefunden hat, die er anzeigen will, öffnet er diese in einem Anzeigefenster. Eines der einzigartigen Funktionsmerkmale dieses Bulletin-Board-Systems ist, dass es auch die Antworten auf die angezeigte Nachricht anzeigt. Wenn der Benutzer Besitzer einer Nachricht ist, kann er sie löschen, nachdem er sie gelesen hat.
  3. Nachrichteneingabe - Die letzte Komponente dieser Site ist der Nachrichteneingabe gewidmet. Es gibt zwei Möglichkeiten, den Bildschirm für die Nachrichteneingabe zu erreichen - über den Bildschirm für die Nachrichtenanzeige, sodass Antworten formuliert werden können, sowie von der Hauptnachrichtenliste aus.

Das ist alles, was wir für ein vollfunktionales System brauchen. Je mehr Sie mit UltraDev arbeiten, desto mehr erkennen Sie, dass sehr viel in sehr wenig Dateien erledigt werden kann. Abbildung 16.1 zeigt die Sitemap für unser Nachrichten-Board.

Abbildung 16.1:  Die Sitemap für das Nachrichtensystem ist bemerkenswert einfach.

Nachdem die Sitemap entwickelt wurde, legen Sie das Backend für das System an. Achten Sie dabei auf die Funktionsmerkmale, die Sie realisieren wollen, weil sie sehr wichtig für die Struktur der eigentlichen Datenbank sind.

Anlegen des SQL

Das SQL für dieses System ist wirklich sehr einfach. Während des Entwurfsprozesses fallen jedoch einige wichtige Entscheidungen an.

Zunächst überlegen wir, welche Informationen für bestimmte Anforderungen abgelegt werden müssen:

Ganz einfach! Wir beginnen mit einer genauso einfachen Tabellendefinition:

create table message (
subject varchar(80),
iconURL varchar(80),
author varchar(80),
body text
)

Wir haben noch keinen Primärschlüssel definiert, weil die Tabelle kein Feld enthält, das ohne Weiteres als eindeutiger Kennzeichner verwendet werden könnte. Leider kann MySQL nur 512 Byte in einem varchar speichern, somit wäre die Länge der Nachricht sehr beschränkt. Ein alternativer Ansatz ist die Verwendung eines Blob - eines binären Objekts. Ein binäres Objekt kann mehrere Gigabyte groß werden - mehr als genug für eine kurze Nachricht.

Einige Datenbankserver unterstützen den Feldtyp memo. MySQL bietet den Feldtyp text, der so viel wie ein entsprechendes Blob aufnehmen kann.

Wenn ein Blob einen weniger eingeschränkten Gültigkeitsbereich hat, warum verwendet man dann nicht immer Blobs? Die Verarbeitung von Blobs ist nicht ganz einfach, wenn Sie vorhaben, Schnittstellen zur Außenwelt zu schaffen. Wenn Sie beispielsweise mit dem Datenbanktreiber myODBC aus MS Access eine Verbindung zu einer MySQL-Datenbank einrichten, können Sie nicht auf die Daten in der Tabelle zugreifen. Stellen Sie sicher, dass Sie mit Ihren Daten überall arbeiten können, wo das erforderlich ist. Glücklicherweise haben wir den Typ text, der ausgezeichnet funktioniert!

Jetzt wollen wir das Problem betrachten, wenn kein Primärschlüssel vorhanden ist - wie beispielsweise eine Nachrichten-ID. Um ein System zu implementieren, in dem wir alle Antworten auf eine bestimmte Nachricht anzeigen können, brauchen wir außerdem ein zweites Feld, das ebenfalls eine Nachrichten-ID enthält. Wie? Zwei Nachrichten-IDs? Wozu um alles in der Welt soll das gut sein?

Für unser Nachrichten-Board-System brauchen wir zwei Nachrichten-IDs. Die erste ID ist der eindeutige Bezeichner für die Nachricht, die zweite ID wird auf den Wert einer übergeordneten Nachricht gesetzt. Wenn Sie beispielsweise auf eine Nachricht mit der ID 325 antworten, hat die neue Nachricht die parentID 325. Wenn die übergeordnete Nachricht angezeigt wird, werden außerdem alle anderen Nachrichten, die eine parentID haben, die gleich der ID der übergeordneten Nachricht ist, in der Liste der Antworten angezeigt.

Die Definition unserer Nachrichtentabelle sieht damit jetzt so aus:

create table message (
ID int not null auto_increment,
parentID int,
subject varchar(80),
iconURL varchar(80),
author varchar(80),
body varchar(250),
primary key (ID)
)

Legen Sie diese Tabelle noch nicht auf Ihrem Server an! Sie muss noch ein bisschen abgeändert werden!

Die ID dieser Nachricht ist etwas Neues für uns - statt einer normalen ganzen Zahl handelt es sich um eine auto_increment-Ganzzahl. Das nimmt uns Einiges an Programmierarbeit für dieses System ab. Wir können nicht davon ausgehen, dass ein Benutzer eine eindeutige ID eingibt. Statt das jedoch programmtechnisch in ASP/JSP/ CFML zu lösen, erzeugt der SQL-Server für jede neue Nachricht, die dem System hinzugefügt wird, automatisch eine neue Nummer. Coole Sache, was?

Damit haben wir schon das Meiste geschafft auf dem Weg zu einem vollständigen Modell für das Datenbanksystem, aber noch nicht alles. Eines der Funktionsmerkmale dieses Systems ist, dass der Benutzer die Möglichkeit haben soll, eine Nachricht zu löschen, die er selbst abgesetzt hat.

Weil ich dieses Buch schreibe, mache ich alles so, wie ich es für richtig halte - das ist die eigentliche Befriedigung beim Schreiben. Ich will nicht auf eine Website gehen und versuchen, an einer Diskussion teilzunehmen, um dann feststellen zu müssen, dass ich mich zuvor langwierig registrieren muss, um überhaupt eine Nachricht absetzen zu können.

Wo ist das Problem? Es gibt absolut keinen Grund, jemanden zu einer Registrierung zu zwingen, der an einer Diskussion teilnehmen will! Damit zwingt man nämlich den Benutzer nicht, korrekte Informationen einzutragen, sondern verlangsamt ihn nur. Ich will meine Gedanken veröffentlichen und dabei meinen Weg gehen. Deshalb werden wir auch dieses Nachrichten-Board auf meine Weise entwickeln - kein langer Registrierungsprozess, um Nachrichten absetzen zu können! Sie dürfen es natürlich jederzeit abändern, um genau Ihre Vorstellungen zu verwirklichen.

Meine bevorzugte Technik, wie ich dem Benutzer die Möglichkeit verschaffe, Nachrichten zu löschen (oder sie zu bearbeiten), ist die Speicherung eines einfachen Kennworts zusammen mit jeder Nachricht. Wenn die Nachricht angezeigt wird, wird unten im Fenster ein kleines Formular mit Kennwortfeld und einer Löschen-Schaltfläche angezeigt. Geben Sie einfach das Kennwort für die Nachricht ein und klicken Sie auf die Löschen-Schaltfläche. Ratz-fatz - weg ist sie!

Damit brauchen wir ein weiteres Feld in der Tabelle - ein Kennwortfeld. Wir sind noch nicht ganz fertig. Der Datenbank muss noch eine weitere Funktionalität hinzugefügt werden, damit unser Nachrichten-Board moderiert werden kann. Für diejenigen unter Ihnen, die nicht genau wissen, was ein moderiertes Nachrichten-Board ist: Es ermöglicht einem Administrator, auszuwählen, welche Nachrichten angezeigt werden und welche nicht. Um dies in unserem System zu implementieren, führen wir einfach ein verborgenes Feld mit einem booleschen Wert in das Datenbankmodell ein. Wenn eine Nachricht angezeigt werden soll, wird der Wert des verborgenen Felds auf False (0) gesetzt. Andernfalls wird er auf True (1) gesetzt.

Diese letzte Information führt uns zu folgender Tabellendefinition:

create table message (
ID int not null auto_increment,
parentID int,
subject varchar(80),
iconURL varchar(80),
author varchar(80),
body varchar(250),
password varchar(50),
hidden int,
primary key (ID)
)

Das ist alles. Abbildung 16.2 zeigt die endgültige Datenbankdefinition.

Abbildung 16.2:  Die Datenbank für das Nachrichten-Board ist relativ einfach.

Sie fragen sich jetzt vielleicht, wie eine Tabelle aus einer einzigen Tabelle bestehen kann. Das ist wirklich alles, was wir brauchen. Das gesamte Nachrichten-Board basiert auf einer einzigen Daten-Entität - der Nachricht.

Im letzten Schritt füllen Sie die Nachrichtendatenbank mit ein paar Testnachrichten. Später werden Sie feststellen, dass es viel einfacher ist, Datensätze über die Oberfläche zum Schreiben der Nachrichten einzutragen, weil diese die IDs automatisch verwaltet. Momentan ist es aber am einfachsten, ein paar Nachrichten mit der ID 0 in das System einzufügen. Hier die Datensätze, die ich dafür verwende:

insert into message values ('','0','Testnachricht','icon1.jpg','John Ray',
'Dies ist ein Test des Nachrichtensystems','smugguy','0');
insert into message values ('','0','Willkommen beim Nachrichten-Board',
'icon3.jpg','Administrator','Willkommen beim neuen Nachrichtensystem!','
=>;adminmessage','0');
insert into message values ('','0','Cool gemacht!',
'icon1.jpg','John Ray','Gute Arbeit, Jungs, tolles System!','smugguy','0');

Ich werde diese Datensätze mehrfach in das System eintragen, sodass die Datenbank ein bisschen voller wird. Wie ist das möglich? Müssen die Datensätze nicht eindeutig sein? Ja, müssen sie! Für die Definition der MySQL-Datenbank wurde die auto_increment- Funktion verwendet. Weil unser ID-Feld auf auto_increment gesetzt ist, wird bei jedem Eintrag einer neuen Nachricht eine neue ID erzeugt. Selbst wenn die INSERT- Anweisungen Ihnen identisch erscheinen, trägt das System automatisch einen neuen Wert in das ID-Feld ein, wenn ein neuer Datensatz eingefügt wird.

16.2 Die Hauptlistenansicht

Alle Teile der Site können aus einfachen Komponenten zusammengesetzt werden - setzen Sie nur die Bausteine an die richtige Stelle und lassen Sie dabei Ihre Finger gekreuzt.

Das Fingerkreuzen mag in manchen Situationen helfen, aber Sie sollten sich nicht darauf verlassen, insbesondere bei Problemen außerhalb der UltraDev-Umgebung.

Probleme, die durch Fingerkreuzen nicht gelöst werden können, sind nicht selten ein Fall für eine höhere Instanz.

Wie bei jeder Site, die Sie einrichten, müssen Sie als Erstes ein neues UltraDev-Projekt anlegen und eine geeignete Verbindung zu Ihrer Datenbank herstellen. Ich habe ein paar Icon-Dateien angelegt, icon1.jpg, icon2.jpg usw. und sie auf dem Server abgelegt.

Jetzt können wir anfangen. Zunächst legen wir die Seite mit der Hauptlistenansicht an. Dies ist die Hauptseite der Site und alle Benutzer der Web-Applikation sollen zuerst hierhin gelangen. Versuchen Sie, das Ganze so einfach wie möglich zu gestalten. Wenn Sie Tausende von Nachrichten anbieten wollen, sollten Sie die Ladezeiten so kurz wie möglich halten. Berücksichtigen Sie außerdem die Funktionen, die diese Seite unterstützen soll:

Weil ich Ihnen diese Funktionsmerkmale am Anfang des Kapitels versprochen habe, sollte ich nun auch damit beginnen. Abbildung 16.3 zeigt ein einfaches Layout für meinen Bildschirm mit der Nachrichtenliste.

Jetzt legen wir eine Datensatzgruppe an, die alle Nachrichten auflistet. Weil wir die Funktionalität nach und nach einfügen, müssen wir immer wieder zu der Datensatzgruppen-Abfrage zurück und sie entsprechend anpassen.

Die Nachrichtenliste anlegen

Als erstes wollen wir die Nachrichtenliste auf dem Bildschirm anzeigen. Dazu legen wir eine Datensatzgruppe an, die die für die Nachrichtenliste benötigten Felder enthält. Außerdem brauchen Sie einen Filter, der Datensätze ermittelt, deren verborgene Felder gleich Null sind.

Abbildung 16.3:  Entwerfen Sie Ihren Bildschirm mit der Nachrichtenliste so, dass alle für die Site benötigten Elemente bereitgestellt werden.

Wir wollen dem Administrator die Möglichkeit geben, das Nachrichten-Board zu moderieren. Ist das verborgene Feld für eine Nachricht auf 1 gesetzt, wollen wir es nicht anzeigen. Wir sollten also nur die Nachrichten auswählen, für die das verborgene Feld gleich 0 ist. Meine erste Datensatzgruppen-Definition sehen Sie in Abbildung 16.4.

Abbildung 16.4:  Legen Sie Ihre eigene Datensatzgruppe ähnlich der hier gezeigten an.

Jetzt legen Sie Ihre Nachrichtenliste wie folgt an:

  1. Öffnen Sie die Palette Datenbindungen.
  2. Erweitern Sie Ihre Datensatzgruppen-Ansicht, sodass Sie die verfügbaren Felder sehen.
  3. Ziehen Sie die Felder an die entsprechende Position auf dem Entwurfsbildschirm.
  4. Fügen Sie für das Feld iconURL ein neues Bild ein, wo das Symbol auf Ihrem Bildschirm erscheinen soll.
  5. Statt einen Dateinamen für das Symbolbild auszuwählen, klicken Sie auf die Schaltfläche Dateinamen wählen aus Datenquellen und wählen in der Datensatzgruppe das Feld iconURL.
  6. Schließlich markieren Sie alle Felder und das Bild auf dem Bildschirm und fügen das Serververhalten Bereich wiederholen ein. Wählen Sie dabei eine sinnvolle Anzahl an Wiederholungen - 600 Nachrichtenüberschriften auf einer einzigen Seite könnten etwas zu viel des Guten sein.

Nachdem Sie Ihre Liste entworfen haben, gehen Sie in den Live Data-Ansichtsmodus. Wenn Sie meinem grundlegenden Entwurf gefolgt sind, sehen sie jetzt etwas wie in Abbildung 16.5 gezeigt.

Abbildung 16.5:  Die Nachrichtenliste ist fast fertig.

Jetzt werde ich meinem Bildschirm einen Kennzeichner hinzufügen, der anzeigt, wie viele Nachrichten vorhanden sind, und was die erste und die letzte Nachricht sind. Dazu ziehen Sie die Einträge [total records], [first record index] und [last record index] von Ihrer Datensatzgruppe in die Entwurfsansicht an die Stelle, wo sie auf dem Bildschirm erscheinen sollen.

Im nächsten Schritt verankern Sie die Links Nächste Nachrichten und Vorherige Nachrichten und weisen ihnen Funktionalität zu. Sie kennen diesen Prozess bereits, er sollte Ihnen deshalb keinerlei Schwierigkeiten bereiten.

  1. Markieren Sie das Objekt oder den Text, das bzw. der den Link zu den nächsten Datensätzen darstellen soll.
  2. Wählen Sie das Serververhalten Zum nächsten Datensatz verschieben und fügen Sie sie Ihrem Projekt hinzu. Sie brauchen für dieses Verhalten nur die richtige Datensatzgruppe auszuwählen, und weil wir nur eine einzige Datensatzgruppe haben, sollte das kein Problem sein. Abbildung 16.6 zeigt die Konfiguration für den Link Nächste Nachrichten.
  3. Wiederholen Sie diese beiden Schritte mit dem Link Vorherige Nachrichten und dem Serververhalten Zum vorherigen Datensatz verschieben.

    Abbildung 16.6:  Wählen Sie Ihren Link und die Datensatzgruppe aus, um die Navigationsfunktionen für die Nachrichtenliste zu realisieren.

Nachdem Sie diese Ergänzungen vorgenommen haben, testen Sie Ihre Seite. Jetzt sollte es möglich sein, sich zwischen den Bildschirmen aller verfügbaren Nachrichten zu bewegen.

Um das Projekt benutzerfreundlicher zu machen, sollten Sie die Links Vorherige Nachrichten und Nächste Nachrichten entfernen, wenn es nicht sinnvoll ist, sie anzuklicken. Wenn Sie die erste Nachricht anzeigen, gibt es keine vorhergehenden Nachrichten. Wenn Sie die letzte Nachricht anzeigen, gibt es keine weiteren Nachrichten.

Wenn Sie eine ältere Version von UltraDev verwenden, werden Sie mit dem folgenden Abschnitt Probleme haben. In früheren Versionen war das Verhalten Bereich anzeigen das Verhalten Bereich verbergen. Um die Projekte in diesem Buch mit der Verhaltensweise Bereich verbergen zu realisieren, kehren Sie einfach die Bedingungen um, unter denen ein Bereich angezeigt wird, um das Verhalten »Verbergen« nachzuempfinden.

Beispielsweise ist das Anzeigen eines Bereichs, wenn es sich um den letzten Datensatz handelt, dasselbe wie das Verbergen eines Bereichs, wenn er nicht der letzte Datensatz ist.

Verbergen Sie diese beiden Bereiche mit dem Serververhalten Bereich anzeigen wie folgt:

  1. Markieren Sie den Link Nächste Nachrichten.
  2. Klicken Sie auf das Pluszeichen (+) und wählen Sie das Serververhalten Bereich anzeigen.
  3. Wählen Sie die Option Bereich zeigen, wenn nicht letzter Datensatz. UltraDev fragt nach der Datensatzgruppe, auf der die Bedingung basieren soll, wie in Abbildung 16.7 gezeigt.
  4. Wiederholen Sie diesen Prozess für den Link Vorherige Nachrichten - jetzt aber mit der Option Bereich zeigen, wenn nicht erster Datensatz für das Verhalten.

    Abbildung 16.7:  Verbergen Sie die Links Nächste Nachrichten und Vorherige Nachrichten, falls sie auf nichts verweisen.

Während wir uns mit dem Verbergen und Anzeigen von Bereichen beschäftigen, wollen wir zwei weitere bedingte Bereiche für Ihren Dokumententwurf ansprechen.

Der erste Bereich, der verborgen werden soll, ist die eigentliche Nachrichtenliste! Falls keine Nachrichten zur Verfügung stehen, braucht man die Nachrichtenüberschriften auch nicht anzuzeigen. Wenden Sie das Verhalten Bereich anzeigen, wenn die Datensatzgruppe nicht leer ist. Auf diese Weise werden die Spaltenüberschriften nur dann angezeigt, wenn eine oder mehr Nachrichten aufzulisten sind.

Der zweite Bereich, der angezeigt werden soll, ist etwas weniger offensichtlich, weil Sie ihn noch nicht angelegt haben. Wenn es keine Nachrichten gibt, dann sollte man das dem Benutzer mitteilen, damit er nicht schon auf dem ersten Bildschirm verunsichert wird. Fügen Sie die Meldung »Es stehen keine Nachrichten zur Verfügung« in den Inhaltsbereich des Bildschirms ein - aber außerhalb des wiederholten Bereichs (verborgene Bereiche dürfen wiederholte Bereiche nicht überlappen). Wenden Sie auf diese Meldung die Verhaltensweise Bereich anzeigen an, mit der Bedingung, dass er angezeigt wird, wenn Sie die Option Wenn Datensatzgruppe leer ist ausgewählt haben.

Sortieren der Nachrichtenliste

O.K., weiter geht's. Wir wollen dem System Sortiermöglichkeiten hinzufügen. Das ist ein wenig anders als alles, was wir bisher gemacht haben. Wir brauchen einen Link auf jede der Spaltenüberschriften auf der Seite und übergeben einen Parameter, der die Datensatzgruppe angibt und ihr mitteilt, wonach sie sortiert werden soll. (Falls Sie das noch nicht verstanden haben, machen Sie sich keine Gedanken, das kommt noch.) Beispielsweise haben wir drei Überschriften, nach denen wir sortieren wollen:

Diese Überschriften entsprechen den drei Feldern der Datenbank. Zufälligerweise haben diese Felder denselben Namen wie die Überschriften. Was ist mit den Links, die wir anlegen müssen? Sie sind ganz einfach - Sie ändern den Dateinamen index.asp so, wie Sie die Seite anzeigen wollen:

index.asp?sortby=ID
index.asp?sortby=Autor
index.asp?sortby=Thema

Richten Sie diese Links jetzt in Ihrem Dokument ein. Wählen Sie die verschiedenen Spaltenüberschriften und verwenden Sie die Eigenschaftenpalette, um den Link zur entsprechenden Überschrift in der Liste einzurichten.

Nachdem die Links angelegt wurden, kann der Benutzer die einzelnen Spaltenüberschriften anklicken. Dieser Klick sendet die Variable sortby an die Seite mit der Nachrichtenliste zurück und setzt sie auf die Spalte, nach der sortiert werden soll. Leider weiß die Seite mit der Nachrichtenliste nicht, wie man irgend etwas sortiert. Wie müssen die Datensatzgruppe ein wenig abändern! Um der Seite die Möglichkeit zu geben, eine Sortieroperation durchzuführen, nehmen Sie die folgenden Änderungen an der Datensatzgruppe vor:

Abbildung 16.8:  Fügen Sie die ORDER BY- Information ein, dann kann Ihre Site sortieren!

  1. Öffnen Sie die Datensatzgruppe und wechseln Sie in den erweiterten Modus.
  2. Fügen Sie der Abfrage eine neue Variable hinzu, varSortby. Ihr Anfangswert sollte ID sein, der Laufzeitwert sollte Request('sortby') sein.
  3. Ändern Sie die ORDER BY-Klausel der SQL-Anweisung so ab, dass sie nach der Variablen varSortby sortiert (d.h. ORDER BY 'varSortby').
  4. Jetzt sollte Ihre Datensatzgruppen-Definition aussehen wie in Abbildung 16.8 gezeigt.

Wenn Sie Ihre Links korrekt definiert haben, sollte alles funktionieren. Klicken Sie auf die Links, um die zugehörigen sortby-Parameter in die Datensatzgruppe einzufügen, sodass die Datensatzliste nach dieser Spalte sortiert wird.

Parameter für die Verhaltensweise Zu Seite mit ergänzenden Themen wechseln

Leider gibt es bei dieser Technik ein Problem. Sie funktioniert für die grundlegende Nachrichtenliste, aber versuchen Sie jetzt, auf eine zweite Seite mit Nachrichten zu gehen und klicken Sie die Überschrift an, nach der sortiert werden soll. Sie sehen, dass die Nachrichtenliste nach dem Überschriftsfeld sortiert sind, aber bei den angezeigten Nachrichten handelt es sich um die Nachrichten von der ersten Seite.

Alle Parameter, die steuern, welche Datensätze angezeigt werden, gehen durch die verwendeten direkten Links verloren. Wie können Sie dieses Problem umgehen? Sie verwenden eine etwas abgeänderte Variante des Serververhaltens Zu Seite mit ergänzenden Themen wechseln. Gehen Sie wie folgt vor, um Links anzulegen, die in jeder Situation korrekt funktionieren, nicht nur in der grundlegenden Nachrichtenliste.

  1. Wählen Sie das Objekt oder den Text aus, das bzw. der zu einem Sortierlink werden soll.
  2. Fügen Sie die Verhaltensweise Zu Seite mit ergänzenden Themen wechseln ein, und lassen Sie den Link auf die Seite zurückzeigen, von der er kommt.
  3. Übergeben Sie sowohl URL- als auch Formularparameter zusammen mit dem Link.
  4. Wiederholen Sie diese Prozedur für alle Links.

Nachdem Sie der Seite die Verhaltensweisen hinzugefügt haben, bearbeiten Sie den Code direkt. Im aktuellen Status geben die Links nur die bereits existierenden Parameter weiter. Sie müssen die Möglichkeit nutzen, den sortby-Parameter in der URL-Zeile zu übergeben.

Öffnen Sie den Quellcode und suchen Sie nach Ihren Links. Sie sehen in etwa wie folgt aus:

<A HREF="index.asp?<%= MM_keepBoth %>">Thema</A>

Schreiben Sie unbedingt das Ampersand-Zeichen (&) zwischen sortby=Thema und <%= MM_keepBoth %>. Wenn Sie dieses Symbol vergessen, entstehen unvorhersehbare Ergebnisse.

Damit funktionieren die Links. Das ist natürlich nicht perfekt, weil es nicht vollständig in der UltraDev-Umgebung automatisiert werden kann. Es demonstriert jedoch, dass Sie die Beschränkungen von UltraDev umgehen können, indem Sie so viel Code wie möglich innerhalb der Oberfläche erstellen und dann gegebenenfalls manuelle Änderungen vornehmen.

Wenn Sie in der UltraDev-Umgebung bleiben wollen, um die Änderungen an Ihren Links vorzunehmen, rufen Sie den Eigenschafteninspektor auf und fügen dem Link den zusätzlichen Code hinzu.

Damit haben wir die Sortiermöglichkeit bereitgestellt. Jetzt wollen wir die Möglichkeit schaffen, bestimmte Nachrichten zu suchen und eine Liste nur derjenigen Nachrichten zu erstellen, die ein bestimmtes Schlüsselwort enthalten.

Durchsuchen der Nachrichtenliste

In der letzten Woche haben Sie bereits die Suchfunktion für das Katalogsystem kennen gelernt. Hier machen wir genau dasselbe. Es muss nur eine Entscheidung getroffen werden, bevor wir die Suchfunktion implementieren können: Wonach genau suchen wir?

Sollen wir das Autor-Feld durchsuchen? Oder das Thema-Feld? Oder den eigentlichen Nachrichtenrumpf?

Diese Entscheidung bleibt Ihnen überlassen, aber der Vollständigkeit halber wollen wir hier alle Möglichkeiten einbeziehen.

Auf einer Produktions-Website sollten Sie die Geschwindigkeit komplexer Suchen überprüfen, bevor Sie sie anbieten. Das Durchsuchen des Nachrichtentexts für Tausende von Nachrichten kann dauern - auch auf schnellen Computern.

Um alle Felder zu durchsuchen, brauchen wir mehr Logik in der Datensatzgruppe, die wir immer weiter verfeinert haben. Wenn Sie sich an das Kapitel über die Kataloge erinnern, wissen Sie, dass wir ein Schlüsselwort mithilfe der LIKE-Syntax mit einem Feld vergleichen können: WHERE suchfeld LIKE '%varSuchbegriff%'.

Das fügen wir jetzt der Definition unserer Datensatzgruppe für die Seite hinzu. Öffnen Sie die Palette Serververhalten und doppelklicken Sie auf Datensatzgruppe (Abfrage) für die Seite. Wechseln Sie dafür gegebenenfalls zuvor in den erweiterten Modus.

Die aktuelle Abfrage sollte etwa wie folgt aussehen:

SELECT ID, Thema, iconURL, Autor
FROM message
WHERE hidden = MMColParam
ORDER BY 'varSortby'

Beachten Sie, dass es in der SQL-Anweisung bereits eine WHERE-Klausel gibt. Wir können diese Bedingung nicht einfach löschen und eine neue einfügen, aber wir können sie ergänzen, indem wir die Abfrage neu formulieren, sodass sie wie folgt aussieht:

SELECT ID, Thema, iconURL, Autor
FROM message
WHERE hidden = MMColParam AND (Thema LIKE '%varSuchbegriff%'
OR author LIKE '%varSuchbegriff%' OR body LIKE '%varSuchbegriff%')
ORDER BY 'varSortby'

Bevor Sie die Abfrage schließen, definieren Sie die Variable varSuchbegriff:

  1. Klicken Sie im Variablenbereich auf das Plussymbol (+), um eine neue Zeile in die Variablenliste einzufügen.
  2. Setzen Sie den Variablennamen auf varSuchbegriff.
  3. Setzen Sie den Standardwert auf %. Damit wird sichergestellt, dass alle Ergebnisse angezeigt werden, falls kein Suchbegriff angegeben wird.
  4. Setzen Sie den Laufzeitwert auf Request(Suchbegriff).

Abbildung 16.9 zeigt die endgültige Abfragekonfiguration.

Abbildung 16.9:  Ändern Sie die Datensatzgruppe ein letztes Mal ab, um die Suchmöglichkeit zu implementieren.

Der letzte Schritt, um die Suchfunktion in Ihrem Code zu verankern, ist sicherzustellen, dass das Eingabefeld für das Suchformular gleich Suchbegriff ist. (Das ist für die Konfiguration des Laufzeitwerts erforderlich, den wir eben gesetzt haben, Request(Suchbegriff)). Die Formularaktion muss so gesetzt werden, dass sie auf dieselbe Seite zurückverweist.

Wie die Sortierfunktion wird auch die Suchfunktion innerhalb des eingebetteten Codes auf einer einzigen Seite implementiert. Sie könnten die Suchfunktion auch auf einer anderen Seite anlegen, aber diese Suche wäre dann schwieriger zu verwalten. Ich versuche, so viel zusammenhängende Funktionalität wie möglich im Code einer einzigen Seite unterzubringen.

Glückwunsch! Damit haben Sie den schwierigsten Teil dieses Kapitels hinter sich gebracht. Neben ein paar Links, die noch angelegt werden müssen, ist die Nachrichtenlistenansicht fertig. Jetzt werden wir Nachrichten lesen und schließlich Nachrichten schreiben. Diese beiden letzten Abschnitte sind aber wesentlich einfacher als der Aufbau der Nachrichtenliste.

16.3 Nachrichten lesen

Es ist zwar möglich, das Lesen der Nachrichten innerhalb desselben Dokuments zu realisieren wie die Nachrichtenliste, aber in einem neuen Dokument ist es einfacher zu implementieren. Damit Sie sich alles gut merken können, geben Sie diesem Dokument den Namen message (mit einer für Ihre Serverplattform geeigneten Dateinamenerweiterung).

Bevor Sie Ihre Ansicht zum Lesen von Nachrichten entwerfen, fügen wir einen Link auf die Nachrichtenlistenansicht ein, sodass die Benutzer auf den Link klicken können, um eine Nachricht anzuzeigen. Wählen Sie jetzt den Text aus, auf den der Benutzer klicken soll, um die vollständige Nachricht zu sehen. Die Themenzeile ist gut dafür geeignet. Erzeugen Sie den Link mithilfe des Serververhaltens Zu Detailseite wechseln:

  1. Wählen Sie den Text oder das Objekt aus, der bzw. das auf das Fenster zum Lesen von Nachrichten verweist.
  2. Fügen Sie das Serververhalten Zu Detailseite wechseln ein.
  3. Konfigurieren Sie die Verhaltensweise wie in Abbildung 16.10 gezeigt, sodass sie eine URL-Parameter-ID übergibt, die auf das ID-Feld in der Datensatzgruppe auf der neuen Seite message.asp verweist.
  4. Übergeben Sie existierende URL- und Formularparameter.
  5. Klicken Sie auf OK, nachdem Sie fertig sind.

    Abbildung 16.10:  Übergeben Sie die Nachrichten-ID der neuen Nachrichtenseite.

Es gibt noch etwas zu erledigen, bevor Sie den Bildschirm für die Nachrichtenanzeige anlegen - fügen Sie ein paar Antworten ein. Sie wissen, dass die Nachrichtendatenbank für jeden Eintrag eine Nachrichten-ID sowie die ID einer übergeordneten Nachricht enthält. Die ID der übergeordneten Nachricht (parentID) ist die Nachrichten-ID der Nachricht, auf die geantwortet wurde. Wenn ein Benutzer beispielsweise auf die Nachricht mit der ID 15 antwortet, wird diese ID zur parentID der neuen Nachricht. Wir wollen das System so einrichten, dass wenn diese hypothetische Nachricht 15 angezeigt wird, auch alle zugehörigen Antworten angezeigt werden. Jetzt tragen wir ein paar Antworten in die Datenbank ein:

insert into message values ('','2','Eine Antwort!','icon1.jpg','John Ray',
'Dies ist ein Test des Nachrichtensystems','smugguy','0');
insert into message values ('','2','Mir gefällt's hier nicht','icon3.jpg',
'Administrator','Willkommen beim neuen Nachrichtensystem!','adminmessage','0');
insert into message values ('','2','Hier ist es alles andere als cool!','icon1.jpg',
'John Ray','Gut gemacht, Jungs! Tolles System!','smugguy','0');

Diese Datensätze haben die parentID 2, d.h., es handelt sich um Antworten auf die Nachricht 2.

Jetzt können wir die Seite für die Anzeige der Nachrichten entwickeln. Wir müssen drei Funktionen dafür vorsehen:

  1. Eine Liste der Antworten auf die aktuell angezeigte Nachricht anzeigen.
  2. Die eigentliche Nachricht anzeigen.
  3. Ein kleines Formular mit Kennworteingabe und Löschen-Schaltfläche bereitstellen, in das der Benutzer das Kennwort für eine Nachricht eingibt und diese ggf. löschen kann.

Abbildung 16.11 zeigt einen grundlegenden Entwurf für den Bildschirm mit der Nachrichtenanzeige. Sie können dabei natürlich so detailliert oder so einfach wie gewünscht vorgehen.

Abbildung 16.11:  Der Bildschirm für die Nachrichtenansicht muss drei funktionale Komponenten enthalten, die wir zuvor für die Site definiert haben.

Die Datensatzgruppen laden

Für die Seite mit der Nachrichtenanzeige müssen zwei Datensatzgruppen definiert werden: eine Datensatzgruppe, die die eigentliche Nachricht enthält, und die andere mit einer Liste aller verfügbarer Antworten auf diese Nachricht.

Diese Definition ist wirklich einfach, und Sie können sie in einigen wenigen Minuten erledigen. Als Erstes definieren wird die Datensatzgruppe, das die anzuzeigende Nachricht enthält:

  1. Fügen Sie dem Dokument das Verhalten Datensatzgruppe (Abfrage) hinzu.
  2. Wenn Sie sich nicht im einfachen Modus befinden, klicken Sie jetzt im Fenster für die Definition der Datensatzgruppe auf die Schaltfläche Einfach.
  3. Geben Sie Ihre Verbindung und Ihre Tabelle an. (Dieses Projekt besteht nur aus einer Tabelle, seien Sie also vorsichtig!) (Das war natürlich ein Scherz!)
  4. Markieren Sie alle Felder.
  5. Setzen Sie einen Filter für die Abfrage. Die ID sollte gleich der URL-Parameter-ID sein, die in der zuvor definierten Verhaltensweise Zu Detailseite wechseln übergeben wurde.

Das war's! Die vollständige Datensatzgruppe für die anzuzeigende Nachricht sehen Sie in Abbildung 16.12.

Abbildung 16.12:  Stellen Sie sicher, dass Sie einen auf der Nachrichten-ID basierenden Filter einrichten.

Die zweite Datensatzgruppe (die alle Antworten auf die angezeigte Nachricht enthält) ist fast identisch mit der eben angelegten Datensatzgruppe. Fügen Sie dafür eine weitere Datensatzgruppe in Ihr Dokument ein. Jetzt muss der Filter jedoch etwas abgeändert werden. Weil wir alle Nachrichten auswählen wollen, deren parentID gleich der Nachrichten-ID ist (als URL-Parameter übergeben), sollte der Filter dies berücksichtigen. Abbildung 16.13 zeigt die Datensatzgruppe für die Antworten.

Abbildung 16.13:  Für die zweite Abfrage muss nur der Filter geändert werden.

Seitenentwurf

Es ist ganz einfach, diese Seite anzulegen - Sie wissen ja jetzt schon, wie man Komponenten aus den definierten Datensatzgruppen in die Entwurfsansicht zieht. Beachten Sie jedoch, dass Sie die Datensatzgruppe rsMessage (für die Nachrichten), nicht die Datensatzgruppe rsReply (für die Antworten) verwenden müssen.

Die Verwaltung der Antwortanzeige ist etwas komplizierter, aber auch nichts Neues. Ich verwende für meine Seite einen einfachen wiederholten Bereich, der den Namen des Autors sowie das Thema für jede der Antworten angibt.

  1. Ziehen Sie das Thema und den Autornamen in eine neue Zeile im Antwortbereich der Nachrichtenanzeige. Stellen Sie sicher, dass Sie die Antworten-Datensatzgruppe (rsReply) verwenden.
  2. Wählen Sie in der Entwurfsansicht das Thema und den Namen aus.
  3. Öffnen Sie die Palette Serververhalten.
  4. Klicken Sie auf das Plussymbol (+), und fügen Sie dem Dokument einen wiederholten Bereich hinzu. Der Bereich soll alle verfügbaren Datensätze wiederholen.

Achten Sie bei der Definition des wiederholten Bereichs unbedingt darauf, die richtige Datensatzgruppe auszuwählen. Wenn Sie die Datensatzgruppe auswählen, die die anzuzeigende Nachricht enthält, kann das Programm nicht korrekt ausgeführt werden und die Fehlersuche gestaltet sich schwierig.

Falls alles nach Plan gelaufen ist, sollte der Anzeigebildschirm fast fertig sein. Wechseln Sie in den Live Data-Modus und geben Sie in der URL-Zeile die ID=2 ein, um zu sehen, ob sowohl die Nachrichtenliste als auch die Antwortenliste angezeigt wird.

Jetzt wollen wir die Antwortenliste fertig stellen. Weil die Antworten einzeln aufgelistet werden, sollte es möglich sein, sie anzuklicken und zu einer Seite zu wechseln, die die gesamte Nachricht enthält, ähnlich wie es für die Hauptnachrichtenliste realisiert wurde.

  1. Markieren Sie den Text aus der Antwortüberschrift (vielleicht Thema, Autor oder beides), den der Benutzer anklickt, um die ganze Antwort anzuzeigen.
  2. Fügen Sie das Serververhalten Zu Detailseite wechseln ein.
  3. Konfigurieren Sie die Verhaltensweise wie in Abbildung 16.14 gezeigt, sodass sie eine URL-Parameter-ID übergibt, die auf das ID-Feld in der Antwort-Datensatzgruppe gesetzt ist. Sie sollte zur Anzeige an die ursprüngliche Nachrichtenseite zurückgegeben werden.
  4. Klicken Sie auf OK, wenn Sie fertig sind.

    Abbildung 16.14:  Übergeben Sie die ID der Antworten zurück auf die Nachrichtenseite.

Für die Anzeige von Antworten sollten Sie nicht den existierenden URL- oder Formularparameter übergeben. Wenn Sie das tun, führt das zu mehreren ID=-Parametern für eine einzige URL. Das kann den Server verwirren und unerwartete Ergebnisse verursachen.

Damit sollten Sie in der Lage sein, auf den Link einer der Antworten zu klicken, um sie anzuzeigen.

Nachrichten löschen

Der letzte Schritt zur Realisierung der Funktionalität dieser Seite ist, das Löschen von Nachrichten zu implementieren. Hoffentlich haben Sie beim Entwurf Ihres Bildschirms diese Funktion berücksichtigt und ein Kennwortfeld sowie eine Löschen-Schaltfläche eingefügt. Geben Sie Ihrem Formular einen Namen, den man sich leicht merken kann, beispielsweise password.

Das gewünschte Verhalten dieser Funktion ist, dass wenn ein Benutzer eine Nachricht löschen will, die von ihm selbst abgesetzt wurde, er das zugehörige Kennwort eingibt, auf die Löschen-Schaltfläche klickt und die Nachricht sofort aus der Datenbank entfernt wird. Sie wissen vielleicht noch, dass es ein Serververhalten gibt, das genau diesen Prozess größtenteils automatisieren kann.

Öffnen Sie die Palette Serververhalten und fügen Sie dem Dokument die Verhaltensweise Datensatz löschen hinzu. Konfigurieren Sie das Verhalten wie folgt:

  1. Verbindung - Die Datenbankverbindung für das Nachrichten-Board.
  2. Löschen Aus Tabelle - Die Nachricht wird aus der Hauptnachrichtentabelle entfernt.
  3. Datensatz auswählen aus - Die Datensatzgruppe für die anzuzeigende Nachricht.
  4. Spalte für eindeutigen Schlüssel - Der Schlüssel für das Nachrichtenfeld; sollte auf die ID gesetzt werden.
  5. durch Senden Löschen - Das Löschen-Formular, das Sie angelegt haben.
  6. Nach dem Löschen von, Zu URL wechseln - Bringt den Benutzer zurück zur Hauptnachrichtenliste. In meiner Implementierung ist dies index.asp.

Nachdem Sie das Verhalten Löschen fertiggestellt haben, klicken Sie auf OK. Damit sind Sie fast fertig - etwas fehlt noch. Wann prüft die Applikation, ob das Kennwort richtig eingegeben wurde? Leider überhaupt nicht! Diesen Code müssen Sie dem Dokument manuell hinzufügen. Öffnen Sie Ihren Quellcode und suchen Sie nach der SQL- Anweisung DELETE. Auf der ASP-Plattform sieht das ungefähr so aus:

' Die SQL-Anweisung delete erstellen
MM_editQuery = "delete from " & MM_editName &
" where " & MM_tableColumn & " = " & MM_recordId

Bearbeiten Sie diesen Code, um das Kennwort zu überprüfen, das von dem Formular übergeben wird:

' Die SQL-Anweisung delete erstellen
MM_editQuery = "delete from " & MM_editName &
" where " & MM_tableColumn & " = " & MM_recordId &
Request.Form("password") & "'"

Diese Änderung des ASP-Codes fügt dem auf dem Server ausgeführten SQL AND password= Request.Form(password) hinzu. Damit ist die Funktion delete implementiert - aber erst nach einigen Anpassungen des Codes. Wenn Sie den Code nicht manuell bearbeiten wollen, gibt es eine alternative Methode, dieses Funktionsmerkmal ausschließlich mit Serververhalten von UltraDev zu implementieren.

Statt den eingebetteten Code zu verändern, könnten Sie dem Dokument eine dritte Datensatzgruppe hinzufügen. Diese Datensatzgruppe führt das SQL aus:

SELECT * FROM message WHERE ID='varID' AND password='varPassword'

Die Datensatzgruppe muss im erweiterten Modus erstellt werden, wobei varID auf den Laufzeitwert von Request("ID") und varPassword auf Request("password") gesetzt werden müssen.

Nachdem diese Datensatzgruppe erzeugt wurde, können Sie dieselbe Verhaltensweise Datensatz löschen verwenden, die Sie bereits eingerichtet haben, aber Sie wählen den Datensatz jetzt aus dieser Datensatzgruppe. Die eigentliche Datensatzgruppe existiert nicht (weil sie mit keinen Datensätzen übereinstimmt), bevor nicht das Kennwort erfolgreich übertragen wurde. Sobald das Kennwort gesendet wird, wird außerdem die Verhaltensweise Datensatz löschen für diese Datensatzgruppe aufgerufen. Das erscheint auf den ersten Blick etwas seltsam, aber es ist machbar!

Ehrlich gesagt, der zweite Ansatz ist vorzuziehen, weil hier die gesamte Entwicklung innerhalb der UltraDev-Umgebung passiert. Seine Implementierung dauert jedoch länger, und wenn Sie vorhaben, alles so schnell wie möglich zum Laufen zu bringen, ist die manuelle Bearbeitung des Codes definitiv die schnellste Methode.

Der Anzeigebildschirm

Von der Funktionalität her ist der Anzeigebildschirm für die Nachrichten fertig - aber es gibt zwei lose Enden, um die wir uns noch kümmern müssen, bevor wir das Fenster zum Erstellen von Nachrichten anlegen. Zunächst brauchen wir eine Möglichkeit, auf eine Nachricht zu antworten, und zweitens sollte es einen Link zurück zu der Hauptnachrichtenliste geben.

Nur einer der beiden Links ist außergewöhnlich - der Link zum Antwortbildschirm. In diesem Link müssen wir die Nachrichten-ID der Nachricht übergeben, die wir gerade lesen. Sie wird als parentID der neuen Nachricht abgelegt - um damit anzuzeigen, dass es sich um eine Antwort handelt. Fügen Sie jetzt einen Antwort-Link in Ihre Nachrichtenanzeige ein, und gehen Sie nach den folgenden Schritten vor. Ich setze voraus, dass die Seite zum Erstellen der Nachrichten Compose heißt. Passen Sie die Namen nach Bedarf an und berücksichtigen Sie diese Änderungen auch in der folgenden Prozedur!

  1. Markieren Sie den Text oder das Objekt, der bzw. das auf die Antwortfunktion verweisen soll.
  2. Wählen Sie im Modifizieren-Menü die Option Link erstellen.
  3. Wählen Sie die Seite zum Erstellen der Nachricht aus oder geben Sie sie manuell in das URL-Feld ein.
  4. Klicken Sie auf die Schaltfläche Parameter, um die Datensatzgruppen und Datenbankfelder anzuzeigen.
  5. Fügen Sie den neuen Parameter ID in die Parameterliste ein.
  6. Klicken Sie auf das Blitzsymbol im Wertefeld, um einen dynamischen Wert für den Parameter ID festzulegen.
  7. Wählen Sie aus der Datensatzgruppe für die Hauptnachrichten (nicht aus der Datensatzgruppe für die Antworten) das ID-Feld aus.
  8. Klicken Sie auf OK, um die Dialogfelder zu verlassen.

Jetzt fügen Sie noch einen normalen Link (ohne dynamische Parameter) zurück zur Hauptnachrichtenliste ein. Damit bieten Sie dem Benutzer die Möglichkeit zurückzukehren, was sehr wichtig ist, wenn der Zweig der Site, in der Sie arbeiten, eine Sackgasse ist. Die endgültige Version des Bildschirms für die Nachrichtenanzeige sehen Sie in Abbildung 16.15.

Abbildung 16.15:  Dem Anzeigebildschirm wurden alle erforderlichen Funktionsmerkmale hinzugefügt.

16.4 Der Bildschirm zum Erstellen von Nachrichten

Das letzte Teil des Puzzles ist der Bildschirm zum Erstellen von Nachrichten - und gleichzeitig das einfachste. Es handelt sich dabei um ein Formular, in das der Benutzer seine Nachricht eingibt, um sie an den Server zu senden. Wir brauchen die folgenden Felder:

  1. ParentID - Dieser Wert wird als URL-Parameter-ID übergeben. Wir müssen ein verborgenes Feld anlegen, das auf diesen Wert gesetzt wird.
  2. Subject - Das Thema der Nachricht.
  3. IconURL - Der Dateiname/die URL des Symbols, das zusammen mit der Nachricht angezeigt werden soll. Für den Bildschirm für das Erstellen von Nachrichten werde ich einfach mehrere Optionsfelder anlegen, mit denen der Wert von iconURL ausgewählt werden kann.
  4. Author - Der Name des Nachrichtenverfassers.
  5. Body - Der Inhalt der Nachricht.
  6. Password - Ein Kennwort, bei dessen Angabe die Nachricht gelöscht werden kann.
  7. Hidden - Wir verwenden ein verborgenes Feld, um den Wert des Feldes hidden abzulegen. Wenn Sie wollen, dass die Nachrichten unmittelbar nach dem Absetzen angezeigt werden, setzen Sie dieses Feld auf 0, andernfalls auf 1.

Beim Anlegen des Formulars sollten Sie alles so einfach wie möglich halten, indem Sie Ihren HTML-Feldern dieselben Namen wie den Datenbankfeldern geben. Stellen Sie auch einen Namen für das eigentliche Formular bereit. Auf diese Weise wird es ganz einfach, Dinge zu vergleichen. Wenn Sie dies für ein Sicherheitsrisiko halten, können Sie die Namen selbstverständlich auch ändern. Abbildung 16.16 zeigt den Entwurf für meine Seite, compose.asp.

Abbildung 16.16:  Das Formular zum Erstellen von Nachrichten

Die Bilder für die Optionsfelder sind möglicherweise der einzige verwirrende Faktor bei diesem Entwurf. Hier die Tabelle mit diesen Informationen über meine Seite:

<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td>
<input type="radio" name="URLicon" value="icon1.jpg">
<img src="icon1.jpg" width="15" height="15"> </td>
<td>
<input type="radio" name="URLicon" value="icon2.jpg">
<img src="icon2.jpg" width="15" height="15"> </td>
<td>
<input type="radio" name="URLicon" value="icon3.jpg">
<img src="icon3.jpg" width="15" height="15"> </td>
</tr>
<tr>
<td>
<input type="radio" name="URLicon" value="icon4.jpg">
<img src="icon4.jpg" width="15" height="15"> </td>
<td>
<input type="radio" name="URLicon" value="icon5.jpg">
<img src="icon5.jpg" width="15" height="15"> </td>
<td>&nbsp; </td>
</tr>
</table>

Einfach nur mehrere Optionsfelder, die alle den Namen URLicon haben (um eine logische ODER-Bedingung zwischen den Optionen zu realisieren), wobei das value-Attribut des Bildes so gesetzt wird, dass es in der Nachrichtenliste angezeigt wird.

Verborgene Felder hinzufügen

Sie brauchen zwei verborgene Felder auf Ihrem Formular. Das erste, hidden (ein passender Name für ein verborgenes Feld, oder?), kann manuell in das HTML eingefügt werden, oder Sie verwenden das Formularelement Verstecktes Feld und den Eigenschafteninspektor, um es einzurichten, etwa wie folgt:

<input type="hidden" name="hiddenField" value="0">

Das zweite verborgene Feld (parentID) ist etwas komplizierter zu konfigurieren (aber nur ein bisschen). Um dem Dokument dieses Feld hinzuzufügen, müssen Sie eine neue Datenbindung für eine Anforderungsvariable einfügen. Öffnen Sie die Palette Datenbindungen und gehen wie folgt vor:

  1. Klicken Sie auf die Schaltfläche mit dem Plussymbol auf der Palette Datenbindungen.
  2. Wählen Sie Anforderungsvariable.
  3. Geben Sie ID in den Konfigurationsbildschirm für die Bindung der Anforderungsvariablen ein. Dies ist der URL-Parameter, auf den wir zugreifen müssen.

Damit haben Sie direkten Zugriff auf den ID-Parameter, der der Seite übergeben wird. Sie können dies nutzen, um das zweite verborgene Feld zu definieren:

  1. Fügen Sie dem Dokument ein weiteres verborgenes Feld hinzu.
  2. Markieren Sie es und öffnen Sie die Eigenschaftenpalette.
  3. Gehen Sie in der Eigenschaftenpalette auf die Registerkarte Attribute.
  4. Klicken Sie auf die Schaltfläche mit dem Plussymbol (+), um ein neues Attribut einzufügen.
  5. Setzen Sie das Attribut auf value.
  6. Klicken Sie auf den Wert des value-Felds und auf den Blitz, um es zu der Anforderungsvariablen zu binden.
  7. Wählen Sie die ID-Bindung.

Die Attributansicht der Eigenschaftenpalette für dieses verborgene Feld sollte aussehen wie in Abbildung 16.17 gezeigt.

Abbildung 16.17:  Die Bindungen für Ihr verborgenes Feld sollten wie hier gezeigt aussehen.

Das ist alles! Das Formular ist fertig, um für die Verhaltensweise Datensatz einfügen genutzt zu werden. Nur noch ein paar Minuten!

Speichern der Nachricht

Um die Nachricht zu speichern, fügen Sie sie als Datensatz in die Datenbank ein. Für das Formular wurde bereits alles konfiguriert, aber es muss noch ein letztes Serververhalten eingefügt werden.

Öffnen Sie die Palette Serververhalten und fügen Sie die Verhaltensweise Datensatz einfügen in das Dokument ein. Wählen Sie die Verbindung und die zu aktualisierende Tabelle. Im Abschnitt Werte abrufen aus der Konfiguration wählen Sie das Formular aus, das zusammen mit der neuen Nachricht gesendet wird, und vergleichen dann die Formularelemente mit dem Spaltennamen und dem Datentyp. Als letzten Schritt setzen Sie Nach dem Einfügen hierher gehen auf die Hauptnachrichtenanzeige. Abbildung 16.18 zeigt die vollständige Konfiguration für die Verhaltensweise Datensatz Einfügen.

Als letzten Schritt gehen Sie zur Hauptnachrichtenliste zurück und fügen einen Link zum Bildschirm für das Erstellen der Nachrichten ein, sodass die Nachrichten auch geschrieben werden können, ohne dass der Benutzer auf eine bereits existierende Nachricht antworten muss. Dazu verwenden Sie einen ganz einfachen Link, dem keine Parameter übergeben werden müssen.

Das war's. Wir sind fertig! Damit haben Sie ein vollfunktionales Nachrichten-Board.

Abbildung 16.18:  Jetzt fügen Sie noch die Möglichkeit ein, Datensätze in die Datenbank einzufügen.

16.5 Zusammenfassung

Wir haben heute eine Menge Stoff behandelt und eine relativ komplexe Applikation entwickelt. Dazu wurden viele der verfügbaren Serververhalten für die Nachrichtenliste und die Anzeigebildschirme verwendet. Hoffentlich haben Sie jetzt eine bessere Vorstellung davon, wie die Serververhalten kombiniert werden können und wie sie zusammenarbeiten, um komplexe Webprogramme zu erstellen.

Ich habe heute einen anderen Ansatz verwendet, aber dennoch wurde eine wichtige Einschränkung von UltraDev gezeigt. Es ist nicht möglich, mehrere Attribute zu kombinieren, um einen Datensatz zum Löschen auszuwählen. In einem früheren Kapitel habe ich eine speziell entworfene Datensatzgruppe verwendet, um nur die Datensätze auszuwählen, die gelöscht werden sollen. In diesem Fall ist es sich nicht erforderlich, sich über das Problem mit den Mehrfachattributen Gedanken zu machen, deshalb habe ich den SQL-Code direkt bearbeitet.

Falls in UltraDev ein Problem auftaucht, überlegen Sie, ob eine Kombination anderer Serververhalten Ihnen helfen kann. Falls nicht, müssen Sie den Quellcode manuell bearbeiten.

16.6 Fragen und Antworten

Frage:
Warum ist das Suchen so langsam?

Antwort:
Wenn Sie über mehrere unterschiedliche Felder in mehreren unterschiedlichen Datensätzen suchen, kann die Suche eine Weile dauern. Sie können ein Popup- Menü bereitstellen, in dem das Feld ausgewählt wird, das durchsucht werden soll.

Frage:
Wie moderiert der Moderator?

Antwort:
Der Moderator aktualisiert die Datensätze in der Datenbank und schaltet hidden auf 0 oder 1, abhängig davon, ob er einen Datensatz anzeigen oder verbergen will.

Frage:
Wie behebe ich am besten das Problem, Datensätze basierend auf zwei Parametern löschen zu müssen?

Antwort:
Bisher wurden in diesem Buch zwei Techniken vorgestellt. Wenn Sie Programmierer sind und sich mit der Bearbeitung von Code auskennen, sollten Sie diesen Ansatz wählen - andernfalls definieren Sie eine weitere Datensatzgruppe, um die Datenmenge zu begrenzen, die die Verhaltensweise Datensatz Löschen verarbeiten kann.

Frage:
Wie kann ich die Site erweitern?

Antwort:
Es gibt viel Raum für Verbesserungen - Datumsangaben für Nachrichten, Bearbeitung von Nachrichten - all diese Funktionsmerkmale können Sie mit Ihrem jetzigen Wissen bereits realisieren.

16.7 Workshop

Der Workshop dient dazu, den gelesenen Stoff mithilfe von gezielten Fragen und Übungen zu vertiefen. Die Antworten finden Sie in Anhang A, »Quiz-Antworten«.

Quiz

  1. Wofür wird das Feld parentID verwendet?
  2. Worin liegt das Problem mit dem Datentyp blob?
  3. Warum sollten Sie nicht alle Parameter im Verhalten Zu Detailseite wechseln übergeben, wenn sie auf die Antwortliste angewendet werden?
  4. Worauf müssen Sie auf Seiten mit mehreren Datensatzgruppen achten?
  5. Worin liegt das Problem bei der Verwendung des Feld namens Hidden als verborgenes Feld auf dem Formular?

Übungen

  1. Ändern Sie das System so ab, dass es mehr Informationen über die Nachrichten aufzeichnet - beispielsweise ein Datum und ein Thema. Auf diese Weise könnten Sie basierend auf dem Thema eigene Nachrichten-Boards einrichten.
  2. Ermöglichen Sie Bearbeitungen für die Nachrichten in dem System. Dazu könnten Sie einen vierten Bildschirm anlegen. Verwenden Sie das Kennwortfeld um festzustellen, ob der Benutzer die Erlaubnis besitzt, Nachrichten zu bearbeiten.
  3. Stellen Sie eine administrative Oberfläche für die Software bereit. Dies könnte genutzt werden, um das Attribut hidden für Nachrichten umzuschalten oder störende Nachrichten zu entfernen. Momentan muss dies direkt in der Datenbank vorgenommen werden - nicht die benutzerfreundlichste Methode, die Dinge zu handhaben.



vorheriges KapitelInhaltsverzeichnisStichwortverzeichnisFeedbackKapitelanfangnächstes Kapitel


© Markt+Technik Verlag, ein Imprint der Pearson Education Deutschland GmbH