AskI Onlinefragebogen FH Zittau/Görlitz - Fachbereich Informatik Dozent: Lars Rönisch D. Israel, D. Winter, C. Schäfer, M. Kohlsche
Agenda System – Allgemein Backend Workflow Mail-Versand PDF-Erzeugung Chart-Erzeugung Frontend GUI Demo
System - Allgemein
Einleitung Web-Anwendung zur Durchführung einer Befragung Befragung zum Thema Kinder mir Downsyndrom Erstellt von René Hofmann Umsetzung des Systems mit Grails Web-Framework Basiert auf Sprache Groovy
Anforderungen Ausfüllung des Fragebogens Online Durch Passwort zu schützen Auswertung Durch angemeldete Manager (Passwortschutz) Mittels Diagrammen Sonstiges E-Mail-Versandt von Einladungen Einladungen als PDF-Dokument
System Nutzung der von Grails vorgegebenen Projektstruktur MVC-Pattern Datenmodell durch Domain-Klassen Logik durch Controller Oberfläche durch Grails-Server-Pages (vgl. JSP) Programmierung in Groovy, Unterstützt durch Java
Backend
Workflow I Umfrageausführung als Web-Flow Grails Web-Flow System, basiert auf Spring Web Flow Festlegung Start-, End- und Zwischenstates Web Flow System kontrolliert Ablauf, ein „Mittenrein“-Springen ist somit unmöglich → sichert Datenkonsistenz Eingabenkontrolle beim Absenden einer Maske Speicherung der Ergebnisse am Ende des Flows
Workflow II States der Umfrageausführung Start – Begrüßungsseite, evtl. Eingabemöglichkeit für Ticket-Passwort Zwischenstates - Eingabeseiten für jede Kategorie (1-6) Ende – Abschlusseite
E-Mail-Versand Nutzung der Java-Mail-API Versandt über SMTP Daten für SMTP werden in der Konfiguration gespeichert und sind im Admin-Bereich einstellbar Nutzung für das Versenden von Einladungen Einladungstext ist ebenfalls in der Konfig. einstellbar Nutzung auch für Versandt zurückgesetzter Passwörter der Manager
PDF-Erzeugung I PDF-Erzeugung mit iText ausgelagert in extra Klasse mächtiges Open-Source Framework für Java um PDF-Dateien zu erstellen und zu erweitern ausgelagert in extra Klasse PDF erhält kurzen Text, URL und ein Ticket
PDF-Erzeugung II neues Dokument wir erstellt Document document = new Document(); Ränder werden gesetzt document.setMargins(75, 75, 75, 75); Paragraphen werden hinzugefügt Paragraph paragraph = new Paragraph(); Font font = new Font(); Schriftgröße, Style font.setSize(14); font.setStyle(Font.BOLD); paragraph.setFont(font); paragraph.add(subject); document.add(paragraph); Dokument wird geschlossen document.close();
PDF-Erzeugung III PDF-Datei wird nicht auf die Festplatte geschrieben als Byte-Array weiter gegeben und verarbeitet ByteArrayOutputStream output = new ByteArrayOutputStream(); PdfWriter.getInstance(document, output); ... return output.toByteArray(); übernimmt die Änderungen und füllt Stream gibt Stream als Byte-Array zurück
PDF-Erzeugung IV
Chart-Erzeugung I Chart-Erzeugung mit JFreeChart sehr populäres Open-Source Framework für Java um Diagramme zu erstellen für jede Frage kann ein BarChart erzeugt werden zeigen die Antworten in % an
Chart-Erzeugung II DataSet wird erzeugt DataSet wird gefüllt DefaultCategoryDataset dataset = new DefaultCategoryDataset(); for(String key : keySet) { double value = values.get(key) / allValues * 100; dataset.addValue(value, key, ""); } DataSet wird gefüllt
Chart-Erzeugung III Chart wird erzeugt CategoryDataset dataset = createDataSet(values); JFreeChart chart = ChartFactory.createBarChart( "" +question, // chart title "", // domain axis label "%", // range axis label dataset, // data PlotOrientation.VERTICAL, // orientation true, // include legend true, // tooltips false // URLs ); setzen das DataSet
Chart-Erzeugung IV
Fehlermeldungen I Fehlermeldungen wichtig für den User um zu erkennen was er falsch gemacht hat! und wie er es richtig machen kann! falsche Fehlermeldungen verwirren nur
Fehlermeldungen II Standard-Fehlermeldungen von Grails treffen allgemeine Aussagen über die Fehler sind ungeeignet für den normalen Nutzer zu spezifisch zu viele Informationen
Fehlermeldungen III Fehlermeldungen angepasst anlegen eines neuen Verwalters oder Login Problem: Anpassung der Fehlermeldungen im Workflow
Frontend
Mockups I Erste Entwürfe als HTML von allen Team-Mitgliedern
Mockups II
Mockups III Zusammenfassung aller Ideen > 3 Mockups als Inspiration / Anregung
Oberfläche Standard Grails Layout Anpassung der Grails Styles mit CSS
AskI Oberfläche Navi Progressbar Frage-abschnitte I18n-buttons
Aufbau der GSPs I Grundlayout für alle GSPs in main.gsp Definition von immer sichtbaren Bereichen CSS-Includes, Locale-Auswahl, Kopf- und Fußzeilen Die eigentlichen Inhalte werden zur Laufzeit mit <g:layoutBody /> eingefügt GSPs die nicht auf main.gsp basieren > startUmfrage > endUmfrage
Aufbau der GSPs II Folgender Markup steht im Bodytag eines gewöhnlichen HTML-Grundgerüsts: SubmitButton veranlasst action Möglichst wenig hart gecodete Texte Verwenden von messages für i18n Kapseln von markup mit taglib Wird erstellt mit „grails create-tag-lib“
Einfühung einer TagLib Kapselt Markup Verbessert Lesbarkeit Steigerung der Wiederverwendbarkeit Verhinderung von duplicated Code >Taglib für ProgressBar >Current step und vorhergende steps werden gefärbt >Andere steps sind weiß
Einsatz von Ajax I Problem: Abhängig von Auswahl eines Listen-Items soll andere Liste gefüllt werden Klick zum Aktualisieren der zweiten Liste dem Nutzer möglichst ersparen
Einsatz von Ajax II Lösung: Einsatz von Ajax Füllen der 2. Liste bei onChange()-Event Gute Unterstützung durch Grails einfache Umsetzung Unstützte JavaScript Bibliotheken: Prototype Dojo Yahoo UI Library (YUI)
Einsatz von Ajax III Zu implementierende Teile: In GSP: In UmfrageController: Ander libs: dojo yahoo ui
Hilfe-System Erreichbar von jeder Seite, da in main.gsp Erklärung der Umfrage/ des Admin-Bereichs Angelehnt an *.CHM Hierarchischer Aufbau Navigation über „Bücher“ und Step-Bar
Hilfe-System II Erklärung der Elemente für nicht versiertere Benutzer Erörterung der Navigation und der Vorgänge während des Ausfüllens der Umfrage
Hilfe-System III „How-to“ für die Administration des Systems Erörterung der ersten Schritte
Schlussbemerkungen Weitestgehend Browserunabhängig W3C-valider HTML und CCS-Code Skalierbar Optimiert für Firefox und IE Workaround für min-width und visibility performant, da kaum Grafiken Dafür ca. 80 CSS-Klassen
!Demo!
VIELEN DANK FÜR IHRE AUFMERKSAMKEIT ENDE VIELEN DANK FÜR IHRE AUFMERKSAMKEIT