About

This page contains a single entry from the blog posted on October 26, 2007 1:59 AM.

The previous post in this blog was Die Geschichte mit der Vererbung.

The next post in this blog is System-Statusanzeige.

Many more can be found on the main index page or by looking through the archives.

Powered by
Movable Type 3.31

« Die Geschichte mit der Vererbung | Main | System-Statusanzeige »

Neue Benutzer Schritt für Schritt

Die letzten zwei Tage habe ich mich mal von meinem Modell losgerissen und endlich eines der umfangreicheren Use-Cases implementiert: Das Schrittweise Anlegen eines neuen Kunden mit (fast) allem drum und dran. Meine Anforderungen an die Implementierung waren in etwa die folgenden:

  • Übersichtlichkeit: Der Administrator oder Reseller, der den Kunden anlegt, soll nicht von einem Monster-Formular erschlagen werden, sondern Schritt für Schritt durch den Prozess geführt werden.
  • REST lässt grüßen: Sowohl der Gesamtprozess als auch jeder einzelne Unterschritt ist direkt über eine eindeutige URL zu erreichen. Beim Aufruf des Gesamtprozesses (/admin/create_hosting_account) wird auf die letzte noch nicht bearbeitete Eingabemaske gewechselt (wenn z.B. Schritt 1 und 2 bearbeitet sind, springe zu Maske 3). Beim expliziten Aufruf eines Schrittes (z.B. /admin/create_hosting_account/3) wird, sofern alle vorangehenden Schritte erfolgreich waren, zu diesem gewechselt.
  • Es sollte jederzeit möglich sein, in eine bereits bearbeitete Maske zu wechseln und dort Änderungen vorzunehmen, ohne dass Eingaben aus einer anderenMaske dadurch verändert werden müssten. Nach Bearbeiten einer Maske wird immer in die letzte noch nicht fertig bearbeitete Maske gesprungen.
  • Überprüfung auf Fehler erfolgt beim Absenden jeder einzelnen Maske, nicht erst am Ende des Prozesses
  • Bis zum letzten Schritt werden keinerlei Daten in der Datenbank abgespeichert. Und selbst im letzten Schritt wird durch eine Datenbanktransaktion dafür gesorgt, dass entweder alles oder gar nichts übernommen wird -- im zweiteren Fall wird wieder zum letzten Schritt gewechselt.
  • Die Umsetzung im Code sollte mit möglichst wenig Wiederholung (DRY ;-)) und im Hinblick auf zukünftige Erweiterung um weitere Schritte geschehen.
  • nochmal REST: Wird ein Schritt mit GET aufgerufen, wird dieser angezeigt ohne jegliche Fehlermeldungen, sollten sich in der aktuellen Maske noch Fehler befinden. Geschieht der Aufruf mit POST (und hoffentlich Formular-Eingaben), wird versucht, diesen Schritt abzuschließen indem die eigegebenen Daten validiert und in der Session zwischengespeichert werden. Bei DELETE-Aufrufen wird die gesamte "Transaktion" abgebrochen, d.h. alle bisher getätigten Eingaben werden gelöscht und es wird zum ersten Schrit gesprungen. PUT wird nicht verwendet.

Das Oberflächendesign lässt sicherlich noch den einen oder anderen Wunsch offen, denn momentan verwende ich einfach noch die Standard-Formulare des Rails-Scaffolds (wer sich die fieldsets genauer anschaut, wird evtl. feststellen, dass sie sich genau mit den Datenbankentitäten decken -- im ersten Schritt wärden das Client und Address). Außerdem sind noch keinerlei "dynamischen" Elemente implementiert, so lässt sich z.B. erst eine Domain und ein E-Mailaccount (E-Mailadresse, Adresse,...) im Laufe des Prozesses anlegen. Ziel ist es, diese auf eine beliebige Zahl zu erhöhen (Stichwort Formularerweiterung mit JS).

Ansonsten funktioniert eigentlich alles wie gewünscht, besonders die garantierte Vollständigkeit aller vorherigen Schritte bei der Anzeige eines beliebigen Schrites (Die Überprüfung auf Vollständigkeit von Schritt n erfordert die vorherige Überprüfung von Schritt n-1, rekursiv bis Schritt 1 -- es ist so nicht möglich, dass irgend eine Überprüfung "aus Versehen" beim Programmieren ausgelassen werden könne).

Und hier noch ein paar Screenshots:

snap7.png Erster Schritt: Eingabe Der Kontaktdaten des Kunden

snap8.png Upps, da hat sich wohl wer vertan: Ausführliche Fehlermeldungen eind selbstverständlich.

snap9.png Alle Eingaben OK, weiter geht's mit dem zweiten Schritt.

TrackBack

TrackBack URL for this entry:
http://www.innoq.com/movabletype/mt-tb.cgi/2835

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)