340 likes | 405 Views
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
E N D
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: • Datenbankstrukur definieren • Hinweise für das Layout besonders komplexer Formulare geben • Pizza essen (oder besondere Funktionalität implementieren) • 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 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 End With
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
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
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
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 Bindingund 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 Bindingund 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 • stefan.falk@ct-systeme.com