Atlas - Das Microsoft-Ajax-Framework

16.06.2006 von Thomas Wölfer
Die Web-Technologie Ajax geht auch an Microsoft nicht spurlos vorbei. Der Softwarekonzern präsentiert mit Atlas ein eigenes Framework. Wir stellen Ihnen die Entwicklungsumgebung an einem Praxisbeispiel vor.

Betrachtet man den Minimalteil von Atlas, dann handelt es sich dabei um eine Javascript-Bibliothek, die Benutzer-Interface-Komponenten verwaltet und Server-basierte Komponenten aufruft. Zusätzlich dazu stellt Atlas eigene Server-Komponenten zur Verfügung, die vordefiniertes Javascript erzeugen.

Die Atlas-Website mit allen Downloads und der Dokumentation finden Sie hier. Die Website zum Atlas Control Toolkit befindet sich hier. Ein gutes Beispiel für die Fähigkeiten von Atlas ist Pageflakes. Die Website erlaubt es Anwendern, sich eine personalisierte Webseite zu erstellen, etwa mit RSS-Feeds, Flickr- Bildergalerie und To-Do-Listen. Wie bei Ajax-Anwendungen üblich, lassen sich alle Inhalte frei positionieren, ohne dass die Seite neu geladen werden muss.

Die Client-Komponenten

Für die reine Client-seitige Entwicklung stellt Atlas eine mehrschichtige Sammlung an Javascript-Scripts zur Verfügung. Die unterste Schicht sorgt für die Kompatibilität der Browser. Die aktuelle Beta-Version (April CTP) unterstützt dabei den Internet Explorer sowie (mit geringen Einschränkungen) Firefox. Die fertige Version soll laut Microsoft IE, Firefox und Safari uneingeschränkt unterstützen. Weitere Browser sind laut Microsoft „denkbar“, momentan gibt es dafür aber keine klare Zusage.

Oberhalb der Browser-Kompatibilitätsschicht findet sich eine Schicht mit den „Core“-Diensten von Atlas. Dazu gehören unter anderem Javascript-Erweiterungen wie Klassen, Namespaces, Vererbung, das Event-Handling, Datentypen und die Möglichkeit, Objekte zu serialisieren. Diese Erweiterungen stellen dem Webentwickler letztlich ein Programmiermodell zur Verfügung, das sich sehr ähnlich wie das Modell des .NET-Frameworks darstellt. Auf dieser Basis findet sich dann die Atlas Base Class Library (BCL), die grundlegende Objekte zur Verfügung stellt und an Objekte aus der .NET BCL erinnert. Dazu gehören StringBuilder, Debugger und Timer-Objekte.

Ferner gibt es eine Netzwerkschicht. Diese Schicht enthält Objekte für die Kommunikation mit Webservices und Webanwendungen und kapselt auch die asynchronen Aufrufe per XMLHTTP. Für die Kommunikation mit Webdiensten verwendet Atlas Teile von WinFX, das momentan ebenfalls als Beta vorliegt. Benötigt die Atlas-Anwendung keine Kommunikationsmöglichkeiten mit Webdiensten, sind diese WinFX-Komponenten aber nicht notwendig: XMLHTTP-Requests und der Rest von Atlas sind also auch ohne WinFX einsatzbereit.

Kontrolle des User Interface

Atlas enthält auch eine reine UI-Schicht. Diese stellt Atlas-spezifische Client-Funktionalität bereit, etwa die „Behaviours“, einige UI-Komponenten und das Client-seitige Data-Binding.

Zudem enthält Atlas eine Sammlung an „echten“ UI-Kontrollelementen. Diese Elemente verfügen über Data-Binding-Möglichkeiten, sind per Script steuerbar und auf Wunsch mit Atlas-Behaviours verknüpft. Diese Kontrollen stellen unter anderem Drag-and-Drop zur Verfügung. Daneben sind beispielsweise auch Textboxen mit Auto-Vervollständigung möglich oder verschiedene Navigationselemente enthalten.

Neben den grundlegenden Kontrollelementen gibt es noch das Atlas Control Toolkit, das weitere Elemente enthält, und im Rahmen von zweiwöchigen Update-Intervallen auf etwa 50 bis 100 Controls aufgestockt werden soll. Das aktuelle Toolkit enthält zum Beispiel ein Kontrollelement für kaskadierende Dropdown-Listen und ein Pop-up-Control.

Das Programmiermodell für Atlas-Controls ist dabei größtenteils deklarativ und erinnert stark an die Architektur von ASP.NET 2.0 auf dem Server. Die Client-Komponenten können dabei mit jedem Server-Backend zum Einsatz kommen. Auf der Atlas-Website gibt es beispielsweise Informationen über die Verwendung von Atlas im Zusammenhang mit einem PHP-basierten Webserver.

Die Server-Komponenten

Atlas enthält auch einen Satz an Server-Komponenten, die allerdings zwingend ASP.NET 2.0 vorschreiben. Atlas umfasst bestimmte Webservices, die ASP.NET 2.0 Profiles, Membership/Roles, Personalisierung und Globalisierung zur Verfügung stellen. Darüber hinaus gibt es Kontrollen, die an ASP.NET Server Controls erinnern, aber im Gegensatz zu diesen Atlas-kompatible Client-Scripts statt XHTML ausgeben.

An Kontrollelementen stehen zum Beispiel Buttons, Optionsboxen und Checkboxen zur Verfügung. Die Atlas Server-Controls sind dabei vollständig ins Visual Studio und die kostenlose Web-Developer-Express-Ausgabe integriert. Damit sind sie im Designer genauso einsetzbar, wie das auch mit den echten Server-Controls der Fall ist.

Atlas ist dabei auch für bereits vorliegende ASP.NET-Anwendungen geeignet: Um eine vorliegende Webanwendung um die Ajax-Funktionalität zu erweitern, sind nur extrem wenige Änderungen notwendig - und diese sind alle deklarativer Natur.

Beispiel: To-Do-Liste

Bei unserer Beispielanwendung handelt es sich um eine To-Do-Liste, in der Sie verschiedene Aufgaben eintragen und nach Belieben sortieren können. Die Anwendung enthält eine ASP.NET GridView, die die in einer SQL-Datenbank vorliegenden „TODO“-Einträge darstellt. Das Projekt liegt komplett im Quelltext vor, den Download finden Sie hier.

Das GridView-Kontrollelement stellt dabei unter anderem die Möglichkeit zur Verfügung, die Reihenfolge der einzelnen Zeilen zu verändern. Dazu muss der Benutzer auf die Überschrift einer Spalte klicken: Auf Basis des Inhalts dieser Spalte wird die Reihenfolge dann verändert. Damit das funktioniert, sendet das Programm einen Request an den Server. Der liefert dann eine neue Seite aus, auf der sich unter anderem auch die neu sortierte Listview befindet.

Im Beispielcode (Aufgaben.aspx) stellt sich diese GridView in der Kurzform wie folgt dar:

<asp:GridView ID="GridView1" runat="server DataSourceID="ObjectDataSource1">
<!-- Rest der View-Parameter wurden weggelassen -->
</asp:GridView>

Dies ist ein klassischer Fall, bei dem die Verwendung von Ajax zu einem besseren Benutzer-Interface führt: Statt die komplette Seite neu zu laden, reicht es schließlich aus, nur den Inhalt der Tabelle neu auszugeben.

Unentbehrlich: ScriptManager und UpdatePanel

Um das Ergebnis zu erreichen, ist ein Element zwingende Voraussetzung: Der ScriptManager. Der ScriptManager ist für die Verwaltung von Komponenten, Client-Requests und Server-Antworten auf einer ASP.NET-Seite verantwortlich.

Die Komponente kümmert sich außerdem um die Funktionalität, mit der Seiten nur teilweise nachgeladen werden können. Letzteres ist genau die Funktionalität, die für das Update der GridView benötigt wird.

<atlas:ScriptManager ID="s1" EnablePartialRendering="true" runat="server" />

Das UpdatePanel

Um ein einzelnes ASP.NET Control per Ajax zu erneuern, benötigt man ein weiteres Atlas Server-Control: Das UpdatePanel.

UpdatePanels markieren Bereiche auf der Seite, die sich einzeln erneuern lassen. Innerhalb des UpdatePanels gibt es den Knoten „ContentTemplate“. Dieser Knoten nimmt dann das ursprüngliche Control auf. Mit anderen Worten: Alles was man tun muss, ist, ein UpdatePanel zu instanziieren und den bisherigen GridView-Code unverändert in dessen ContentTemplate-Knoten zu kopieren.

<atlas:UpdatePanel ID="p2" runat="server" Mode="Conditional" >
<ContentTemplate>
<asp:GridView ID="GridView1"

Klickt der Benutzer nun auf den Titel einer Spalte in der GridView, dann resultiert das nicht länger in einem normalen Request an den Server, der anschließend die komplette Seite neu lädt. Stattdessen wird nur noch der Inhalt der GridView - beziehungsweise der Inhalt des UpdatePanels - nachgeladen.

Asynchrone Postbacks auslösen

ServerControls, die sich also innerhalb eines Update-Panels befinden, verwenden asynchrone Postbacks, um sich selbst nachzuladen. Controls, die sich außerhalb eines UpdatePanels befinden, verwenden hingegen weiterhin normale Postbacks, um die komplette Seite neu zu laden.

Der asynchrone Postback kann auch auf eine andere Art ausgelöst werden. Dazu führt man zusätzlich zum ContentTemplate-Knoten einen „Triggers“-Knoten ein. Der Triggers-Knoten lässt sich mit Bedingungen ausgestattet erweitern, die ebenfalls einen Postback auslösen. Diese Bedingungen lassen sich beispielsweise an Events oder Eigenschaften anderer Kontrollelemente binden.

Inhalte durch Postbacks beeinflussen

Nehmen wir an, die ASP-Seite enthält auch eine ComboBox mit dem Namen „DropDownList1“ (im Beispielcode ist dies der Fall), die ebenfalls den Inhalt der GridView beeinflusst. Der Zustand einer Combo-Box lässt sich an deren Eigenschaft mit dem Namen „SelectedValue“ festmachen. Ändert sich also „SelectedValue“, so muss der asynchrone Postback ausgelöst werden.

Die dafür benötigte Deklaration hat folgenden Aufbau:

<Triggers>
<atlas:ControlValueTrigger ControlID="DropDownList1" PropertyName="SelectedValue" />
</Triggers>

Atlas einsetzen

Die einfachste Möglichkeit, Atlas zu verwenden, besteht darin, das aktuelle Beta herunterzuladen und zu installieren. Dadurch wird ein neues Projekt-Template im Visual Studio (Express) installiert, mit dem ein neues Atlas-Webprojekt möglich ist. Dieses Webprojekt enthält dann bereits alle für Atlas notwendigen Referenzen und Einträge im web.config. Danach stehen die Atlas-Server-Kontrollelemente einfach in der Toolbox zur Verfügung - genau, wie man das von ASP.NET 2.0 Controls gewohnt ist.

Um ein bereits vorliegendes APS.NET-Projekt in ein Atlas-Projekt umzuwandeln, ist nach der Installation von Atlas momentan ein wenig Handarbeit notwendig. Was dabei im Einzelnen zu tun ist, wird aber in der Atlas-Dokumentation Schritt für Schritt erläutert. Dort finden sich neben herkömmlichen Text-Tutorials auch Videos zur Arbeit mit den vorliegenden Kontrollelementen. Die ganze Atlas-Bibliothek steht dabei im Quellcode zur Verfügung.

Fazit

Mit Atlas baut Microsoft an einem Quellcode-offenen System für interaktive Webanwendungen, das sich hervorragend in ASP.NET 2.0 und das Visual Studio integriert - aber davon nicht notwendigerweise abhängig ist.

Im aktuellen Zustand kann das Beta zwar bereits für öffentliche Seiten verwendet werden - allerdings werden der vollständige Firefox-Support sowie der Support für Safari erst in einer noch ausstehenden Beta-Version verfügbar sein. Zudem ist eine Unterstützung für andere Browser, etwa Opera oder Konqueror, nicht gegeben. Ob sich Microsoft einen Gefallen tut, einzelne Browser auszuschließen, ist fraglich. Zumindest die Entwickler der Atlas-Beispielprojekte unterstützen Opera ebenfalls.

Auch ist das Interesse der Entwickler an Atlas derzeit noch nicht so stark. Der Redmonder Software-Riese zeigt zwar einige interessante Beispiele auf der Homepage des Projekts, richtig bekannte Ajax-Anwendungen sind allerdings nicht darunter. Zum einen liegt das sicher an dem derzeitigen Noch-Beta-Status, zum anderen gibt es zahlreiche konkurrierende Ajax-Frameworks, etwa von Google. (mja)