SF Softwareberatung ApplicationCreator Demo für die.NET User's Group KA
Agenda Definition des Problems Was muss alles getan werden? Der ApplicationCreator Abgrenzung der einzelnen Assemblies Beispiel-Code Snippets 2 Statements + Strukturdefinition reichen Ergebnisse Datenbank, Rumpfanwendung, Stammdaten- und Suchformulare, Migration von Altdaten Gelernte Lektionen Ausblick
Definition des Problems Immer noch viel zu viel manueller Aufwand für die Erstellung neuer datenbankgestützter Anwendungen Trotz Assistenten und Designern Noch mehr Aufwand, um best practices zu realisieren
Was muss alles getan werden? (I) Auf dem Datenbankserver: Datenbankstrukturen planen Tabellen anlegen Gültigkeitsregeln festlegen Stored Procedures schreiben Rollen definieren Zugriffsrechte implementieren Versionierung regeln
Was muss alles getan werden? (II) In der Anwendung: Code zum Zugriff auf Stored Procedures schreiben Formulare entwerfen Weit mehr als Steuerelemente ziehen und Datenbindung definieren! Master-Detail-Detail… Suchmasken erstellen Menüs und das ganze Drumrum
Was muss alles getan werden? (III) Für Auswertungen: Stored Procedures schreiben… Dialoge für Selektionsmöglichkeiten erstellen Berichte entwerfen Das alles zum Leben erwecken
Das ist doof, fehlerträchtig und langweilig! Wie wäre es mit: 1. Datenbankstrukur definieren 2. Hinweise für das Layout besonders komplexer Formulare geben 3. Pizza essen (oder besondere Funktionalität implementieren) 4. Fertig!
Der ApplicationCreator Eigentlich ein Satz von derzeit 5 Assemblies Realisieren derzeit Windows- Datenverwaltungs-Anwendungen Erweiterbar Andere DBs als SQL Server Andere Oberflächen als Windows (Web) Spezielle Feld- und Tabellentypen
SFSoftwareberatung.Configuration Ähnlich Microsoft CMAB Noch einfacher zu benutzen Dafür fehlen noch ein paar Features Kann beliebige primitive oder serialisierbare Datentypen speichern An beliebige Orte Datenbank implementiert Unterscheidung zwischen Maschinen- und Benutzer-Optionen
SFSoftwareberatung.WinForms.StandardForms Windows XP-Designs ShortcutGenerator vergibt eindeutige Tastaturshortcuts Splash-Screens Info-Dialoge
SFSoftwareberatung.WinForms.Controls Alle möglichen Controls Navigation Verweis-Felder Panel mit Farbverlauf bei XP-Designs RepeatButton FullSelectLabel DBNumericUpDown (unterstützt DBNull und XP-Designs) DB-taugliche RadioGroup u. a.
SFSoftwareberatung.ApplicationCreator Oberflächen-unabhängige Anwendungsautomatik Anwendungsdefinition Datenbank Masken Datenzugriff Versionierung der Datenbankstruktur Migration von Alt-Datenbeständen Rollen Migration von Altdaten
SFSoftwareberatung.ApplicationCreator.WinForms Windows-basierte Nutzung des ApplicationCreator ApplicationMainForm ControlCreators FindDialog MasterFormEditor Controls DataMigrationDialog
Highlight: Die Anwendung myApplicationCompleter = New ApplicationCompleter( GetApplicationDescription(), New SqlServer.SqlFactory(New AppConfigConnectionStringGetter), New ActiveDirectoryRoleMembershipChecker, Me, True) myApplicationCompleter.InitializeApplication()
Highlight: Die Datenbankstruktur papier =.Tables.Add("Papier") With papier.Fields.Add(New FieldTypes.StringField("Bezeichnung", False, 1, 50)).CreateIndex(True, True).SetRowdescribing().Fields.Add(New FieldTypes.BooleanField("IstLogoVorgedruckt", False, False)).FriendlyName = "enthält vorgedrucktes Logo" With.AddEditView.Permissions.Grant(Leitung, Operations.Full).Grant(Benutzer, Operations.SelectFromAllTables) End With
Highlight: Master-Detail-Detail… schreibauftrag.AddMasterForm() formHint = New Hints.MasterFormLayoutHint(schreibauftrag.MasterForm) schreibauftrag.MasterForm.Hints.Add(formHint) ' Variante "Alles auf einmal sichtbar" 1: With formHint.MainPlace.AddVerticalSplitter With.LeftPane.AddHorizontalSplitter.TopPane.AddForm(schreibauftrag.MasterForm).BottomPane.AddForm("Berechtigte Gruppen", _ schreibauftrag.MasterForm.DetailForms.Add(nutzung.ReferenceField(schreibauftrag))) End With With.RightPane.AddHorizontalSplitter.TopPane.AddForm("Dokumente des Schreibauftrags", schreibauftrag.MasterForm.DetailForms.Add(refDokumentSchreibauftrag)).BottomPane.AddForm("Elemente des oben angezeigten Dokuments", schreibauftrag.MasterForm.DetailForms(refDokumentSchreibauftrag).DetailForms.Add(refElementDokument)) End With
Ergebnis 1: Die Datenbank
Highlights der Datenbank Vollautomatisch erzeugt Abgesetztes T-SQL ist schön formatiert All Inclusive: SQL Server-Rollen Tabellen mitsamt Gültigkeitsregeln, soweit abbildbar mit referentieller Integrität Sichten (für Suchformulare) Prozeduren (für jeglichen anderen Zugriff) Zugriffsrechte für die Rollen Niemals auf die Tabellen selbst
Ergebnis 2: Die Rumpfanwendung MDI-Formular Menüs automatisch erzeugt und gefüllt Von der Anwendung ergänzbar Einschließlich Tastaturshortcuts
Ergebnis 3: Stammdatenformulare
Highlights der Stammdatenformulare Vollautomatisch erzeugt Anbringen von Hints für besondere Wünsche möglich Hints für Layout von Master-Detail-Formularen Kacheln, Tabs Unterschiedliche Controls je nach Feldtyp ComboBox, RadioGroup, ReferenceBox, FileName, Folder, … Erweiterbar Unterschiedliche Formulare je nach Tabellentyp Gruppenmitgliedschaften Tabellen mit definierter Datensatzreihenfolge
Highlights der Stammdatenformulare Komfortable Features Auto-Resizing, Position und Größe merken Tastaturshortcuts Gültigkeitsprüfungen mit freundlichen Fehlermeldungen Klicken auf Label markiert gesamten Feldinhalt Sprung zu anderen Formularen bei Referenzfeldern Suchmasken immer verfügbar
Ergebnis 4: Suchformulare
Highlights der Suchformulare Vollautomatisch erzeugt Keine SQL Injection Attacks möglich Spezielle Definition der suchbaren und anzuzeigenden Felder möglich Standardmäßig werden nicht mehr als 100 Treffer angezeigt Auch via Code supereinfach aufzurufen Auto-Resizing, Position und Größe merken Tastaturshortcuts
Ergebnis 5: Migration von Altdaten
Highlights der Migration Gut geeignet, um Daten von alten Programmversionen zu übernehmen Auch wenn die Datenbankstrukturen nicht identisch sind Transaktionssicher Allgemeine Basisklasse Spezielle Ableitung für MDB-Dateien realisiert
Gelernte Lektionen Es ist viel Arbeit und manchmal hart, aber es geht und ist sehr spannend! DataBinding ist gut, aber nicht trivial Am meisten Zeit kosten Detailprobleme Schließlich soll das ganze stabil, komfortabel, schnell und sicher sein
Gelernte Lektionen: Data Binding Eigene Controls wegen DBNull Können von vorhandenen erben Implementieren Schnittstelle mit Wert- Property vom Typ Object Erzeugen Event Name muss EigenschaftsnameChanged sein! Typ muss EventHandler sein Nur auslösen, wenn der Inhalt auf etwas wirklich Anderes gesetzt wird! Absolut kritisch, damit Data Binding korrekt funktioniert
Gelernte Lektionen: Data Binding und Gültigkeitsprüfungen Beim Validieren im Fehlerfall keine Exceptions auslösen! Data Binding kommt komplett durcheinander Entgegen der MSDN-Dokumentation! Lieber RowError und Konsorten setzen und hinterher prüfen Ansonsten droht Verzweiflung
Gelernte Lektionen: Data Binding und ComboBoxen Geht alles, aber DBNull berücksichtigen ( die native ComboBox ist nicht direkt verwendbar) Bei Refresh der Daten vorher gesetzten Wert merken, hinterher wieder setzen Dabei keine Changed-Events auslösen!
Ausblick: Was noch kommen soll (I) In der Datenbank Rekursive Strukturen für Hierarchien Vertikale Zugriffsrechte Personen haben nur Rechte auf bestimmte Datensätze einer Tabelle Ohne Hintertüren! Vollautomatische Versionsaktualisierung In der Rumpfanwendung Symbolleisten Schnellzugriff auf die häufig benutzen Befehle selbstlernend
Ausblick: Was noch kommen soll (II) Formulare Weitere automatisch erzeugte Formulartypen für bestimmte Tabellentypen Hierarchie-Tabellen Hier leichtere Erweiterbarkeit Endlosformulare mit Steuerelementen (kein Grid) Verfeinerte Layoutmöglichkeiten Automatisch erzeugte Extras/Optionen-Dialoge Reporting ebenfalls weitgehend automatisch
Ausblick: Was noch kommen soll (III) Features Ausgabe nach Excel einfach, mächtig, gut formatiert, mit Formeln für Summen usw. Evtl. ApplicationCreator.WebForms ASP.NET Stammdatenverwaltung basierend auf der selben Anwendungs- definition wie das Windows-Pendant Grenzen nur durch die Phantasie
Kontakt Stefan Falk Softwareberatung