Web Services: Johns ASPX GUI-Schicht

Nun kann es mit dem Hinzufügen der ASPX-Seiten zur Anwendung losgehen. Zuerst fügt man alle Seiten hinzu und kopiert den entsprechenden Code hinein, dann kann man noch einmal alle wichtigen Aspekte jeder Seite durchgehen. Man klickt mit der rechten Maustaste auf die Anwendung WSB2BJohn und wählt Add | Add Web Form (Hinzufügen | Web Formular hinzufügen) für die in der unten stehenden Tabelle aufgeführten Seiten. Für jede Seite kopiert man den Code vom Link aus der HTML-Spalte in die HTML-Ansicht der Seite und den Code aus der Code Behind-Spalte in die entsprechende Klasse der Seite.

Diese Seiten sind Johns Anwendung hinzuzufügen
HTML Code Behind
EditBook.aspx (Listing A) EditBook.aspx.vb (Listing B)
HomePage.aspx (Listing C) HomePage.aspx.vb (Listing D)
SearchOrders.aspx (Listing E) SearchOrders.aspx.vb (Listing F)
ViewBooks.aspx (Listing G) ViewBooks.aspx.vb (Listing H)

Hier nun Erläuterungen zu den wichtigsten Aspekten des Codes jeder Seite. Man beachte, dass jede Seite bereits über das NavBar-Steuerelement verfügt. Um ein Benutzersteuerelement auf einer ASPX-Seite zu platzieren, muss man nur das Steuerelement mit der Maus aus dem Projektmappen-Explorer auf die Design-Ansicht einer beliebigen ASPX-Seite ziehen. Die Verknüpfung mit dem Code erfolgt automatisch im Hintergrund.

HomePage.aspx

Diese Seite präsentiert einfach eine Reihe von Label-Steuerelementen mit zwei Informationen: dem aktuellen Datum und der Anzahl der offenen Bestellungen. Wenn John seine Anwendung startet, ist seine erste Aufgabe, sich darum zu kümmern, welche Bestellungen zu bearbeiten sind. Indem man ihm diese Information liefert, weiß er sofort nach Starten der Anwendung exakt, was er zu tun hat.

Die Code-Behind-Datei ruft einfach die bestehende Business-Komponente auf, um alle Bestellungen abzurufen, deren Status „In Bearbeitung“ (Pending) lautet, und schreibt die Anzahl der Reihen des sich ergebenden DataSets in das Label-Steuerelement der Präsentation. Das aktuelle Datum wird im entsprechenden Label-Steuerelement angezeigt.

ViewBooks.aspx

Diese Seite enthält ein DataGrid für die Anzeige einer Liste von Büchern sowie einen Button zur Bearbeitung. Wie man sieht, wurde das DataGrid mit einem speziellen Code angereichert, so dass man jede Zelle anklicken kann, um eine Reihe zu markieren. Dies erreicht man durch Hinzufügen von Code zum ItemDataBound-Ereignis, das für jede zum DataGrid hinzugefügte Reihe aufgerufen wird.

Das DataGrid verfügt über eine versteckte Button-Spalte, die für die Markierungsfunktion sorgt. Falls dieser Button sichtbar wäre, würde man in der ganz linken Spalte des DataGrids einen Button bemerken, der die Auswahl einer Reihe des Grids ermöglicht. Dieser Button wird unsichtbar gemacht und bindet seine Funktion an das „onclick“-Ereignis jeder einzelnen Zelle des DataGrids, indem man die Methode Page.GetPostBackClientHyperlink verwendet. Damit verhält sich jede Zelle des DataGrids so, als ob sie ein Auswahl-Button-Steuerelement wäre.

Und schließlich wird für ein markiertes Element des DataGrids ein Bearbeiten-Button angezeigt. Wenn man auf diesen klickt, wird die ID des Buches aus dem DataGrid extrahiert und auf die Seite EditBook.aspx weitergeleitet. Indem die ID als öffentliche Eigenschaft gespeichert wird, bleibt der Abfragestring unbeeinträchtigt und ermöglicht der Zielseite, die Daten zur übergebenen ID abzurufen.

EditBook.aspx

Diese Seite ermöglicht das Bearbeiten und Speichern der Daten zu einzelnen Büchern. Beim Aufruf verwendet die Seite eine fortschrittliche Methode zur Parameterübergabe, um die ID des Buches festzustellen. Bekanntermaßen wird diese Seite nur von ViewBooks.aspx aufgerufen, deshalb kann man den Context-Handler als eine Instanz von ViewBooks.aspx casten, wodurch man Zugriff auf die BookId-Eigenschaft erhält, die beim Klicken auf den Bearbeiten-Button auf dieser Seite gesetzt wurde. Da die Seite mithilfe von Server.Transfer() aufgerufen wird, hat man während der Lebensdauer des aktuellen Requests Zugang zu den Informationen der aufrufenden Seite. Nach dessen Abbruch gehen die Daten verloren.

Dann kann man die Business-Komponente aufrufen, um die Daten für die aus dem Context-Handler entnommene BookId abzurufen. Danach muss man nur noch das Präsentations-Formular mit den Daten aus der Datenbank füllen. Die Validierungskontrollen stellen sicher, dass alle erforderlichen Felder vor dem Speichern ausgefüllt sind. Ist dies der Fall, wird durch einen Aufruf über die Business-Schicht die Datenbank mit den Daten aus dem Formular aktualisiert.

SearchOrders.aspx

Diese Seite ermöglicht John, einen Kunden oder Auftragsstatus auszuwählen oder eine Suche durchzuführen. Beim Laden der Seite wird das Auswahlmenü für die Kunden dynamisch mit den Daten aus der Datenbank gefüllt, während das Auswahlmenü für den Status mit den (statischen) Werten der gemeinsamen Konstanten in der OrderDb-Klasse gefüllt wird, die gültige Werte für den Status enthalten.

Das für die Präsentation verwendete DataGrid ist flexibel und erlaubt den Einsatz in unterschiedlichen Funktionskontexten. Wenn eine Suche nach Aufträgen durchgeführt wird, die nicht den Status „In Bearbeitung“ (Pending) haben, wird das Ergebnis als normale Tabelle dargestellt. Falls der Benutzer nur nach Aufträgen sucht, die noch „In Bearbeitung“ sind, gibt es eine zusätzliche Spalte, über die weitere Funktionen zugänglich sind.

Diese dynamische Spalte ist eine PushButton-Spalte, die dem Benutzer erlaubt, einen Auftrag per Web Service gegenüber dem Client, von dem der Auftrag stammt, zu bestätigen. Wenn man auf diesen Button klickt, werden die zum Auftrag gehörigen Daten aus der Datenbank abgerufen und ein asynchroner Web Service aufgerufen. Der Aufruf des Web Service erfolgt asynchron, damit der Benutzer nicht auf eine Antwort warten muss. Dies ist bei einer Web-Anwendung sehr wichtig, da ein Benutzer einen Button häufig mehrmals anklickt, wenn er innerhalb einer bestimmten Zeit keine Antwort erhält.

In diesem Fall ist Tom der Client. Deshalb werden eine Instanz seiner Web Service Proxy-Klasse sowie die Methode BeginConfirmOrder() aufgerufen. Die Bearbeitung wird sofort wieder dem Client übergeben und dem Benutzer wird eine Meldung angezeigt, dass der Prozess in Gang gesetzt wurde. Falls der Web Service eine erfolgreiche Ausgabe erzeugt, wird die Methode CompleteOrder() aufgerufen, sobald der asynchrone Prozess an Johns Anwendung ausgibt. Diese Methode kann sicher davon ausgehen, dass Toms Anwendung den Auftrag korrekt bearbeitet hat, und Johns Anwendung kann den Auftragsstatus nun auf „Bearbeitet“ (Complete) ändern.

Themenseiten: Software, Webentwicklung

Fanden Sie diesen Artikel nützlich?
Content Loading ...
Whitepaper

Artikel empfehlen:

Neueste Kommentare 

Noch keine Kommentare zu Web Services: Johns ASPX GUI-Schicht

Kommentar hinzufügen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *