Erstellen eigener Menüfunktionen mit dem Code-Generator

Allgemeine Beschreibung

Der Code-Generator dient dazu, eine eigene Menüfunktion mit zugehöriger Tabelle nach den Regeln von easyWinArt zu erstellen. Die neue angelegte Menüfunktion enthält alle Standard-Felder sowie eigene Felder, ihr ist eine Tabelle mit den entsprechenden Spalten und Datentypen zugrunde gelegt und sie beherrscht alle Logiken der anderen Menüfunktionen. Zu diesen gehören die allgemeine Bedienung sowie die Buttons der beiden Toolbars Aktions-Toolbar und Funktions-Toolbar, aber auch die drei Registerkarten für die Beschreibung, das Anhängen beliebig vieler Dokumente an jeden Datensatz und die Individual-Variablen.

Vorteile des Code-Generators

Der Code-Generator bringt einige bedeutende Vorteile mit sich. Durch die Automatisierung schrumpft die benötigte Entwicklungszeit deutlich. Die so erstellten Menüfunktionen bestehen aus einem immer gleich strukturierten und übersichtlichen Code. Diese Gleichmäßigkeit in der Programmierung ermöglicht die schnelle Bearbeitung und Wartung des Quellcodes. Der Code wird standardisiert.

Beispiel: Menüfunktion Vertreter

Als Beispiel für die Erzeugung einer eigenen Menüfunktion soll an dieser Stelle eine Menüfunktion 'Vertreter' erstellt werden. Diese enthält neben den Standard-Funktionen einige eigene Felder, zu denen auch ein Fremdschlüssel-Feld gehört, mit dem man eine passende Adresse für den Vertreter-Datensatz im Adressstamm suchen und auswählen kann.

1. Erzeugen der Rumpftabelle

Im ersten Schritt wird die Rumpf-Tabelle mit den in jeder Standard-Tabelle enthaltenen Spalten erzeugt. Dazu werden zunächst das Microsoft SQL Management Studio sowie easyWinArt gestartet, dabei der gewünschte Mandant für die Entwicklungen gewählt und die Menüfunktion 'Entwicklung -> Werkzeuge -> Code-Generator' geöffnet. Hier ist die letzte Registerkarte 'Neue Tabelle' zu bearbeiten. Darin wird zunächst die Datenbank ausgewählt, in der Regel die 'Daten'-Datenbank, welche die meisten mandantenspezifischen Daten enthält und im SQL-Server den gewählten Mandatennamen des gerade aktiven Mandanten mit einem vorangestellten 'easyWinArt' trägt. Zur Alternative stehen noch die Lizenzdatenbank 'easyWinArt', welche pro Installation immer einmalig ist, sowie die zum Mandanten gehörende Config-Datenbank, welche im SQL-Server ähnlich wie der Mandant, jedoch mit einem nachgestellten 'Config' betitelt ist. Im Management Studio lassen sich diese Datenbanken sowie die darin enthaltenen Tabellen leicht einsehen. Nach der Auswahl der Datenbank ist ein Tabellen-Name zu vergeben. Dieser sollte so gewählt sein, dass er nicht mit einer bestehenden oder zukünftigen Tabelle aus dem Standard-Umfang der Software kollidiert. Dazu lässt sich z.B. ein Präfix wie ein auf dem eigenen Firmennamen beruhendes Kürzel voranstellen. So heisst die Tabelle in diesem Fall einfach 'XY_Vertreter'. Über einen Klick auf den Button 'Rumpf-Tabelle erzeugen' wird das SQL-Skript generiert, mit dem die Tabelle im SQL Server erzeugt werden kann. Über die folgende Message-Box kann der Code-Generator dieses Skript direkt einspielen. Theoretisch kann man das Skript auch selbst manuell auf den SQL-Server ausführen.

2. Bearbeiten der Tabelle im Management Studio

Ist das Skript ausgeführt, so lässt sich die neue Tabelle bereits im Management Studio untersuchen. Dazu dient ein rechter Mausklick auf die Tabelle im Objekt-Explorer. Im Kontextmenü ist der Eintrag 'Entwerfen' zu wählen. Es öffnet sich eine Ansicht der Tabellen-Spalten mit ihren Eigenschaften. Alle vorhandenen Spalten gehören zum Standard und werden in der Regel auch belassen, da sie teilweise für die Datenbindung und weitere Funktionalität unerlässlich sind. Allerdings werden jetzt die eigenen benötigten Spalten hinzugefügt. In unserem Beispiel sind folgende Felder zu ergänzen:

  • Adresse, uniqueidentifier, Nullwert nicht zulassen
  • Matchcode, nvarchar(20), Nullwert zulassen
  • Name, nvarchar(200), Nullwert nicht zulassen
  • Provision, float, Nullwert zulassen
  • Kommentar, nvarchar(200), Nullwert zulassen
  • Aktiv, bit, Nullwert nicht zulassen

Für die Provision wird ein Standardwert '0' unten in der Registerkarte 'Spalteneigenschaften' eingestellt. Die vier unteren Felder sollen später vom Anwender bearbeitet werden können, während die Adresse aus dem Adressstamm ausgewählt wird. Anschließend zeigt das Feld Matchcode den entsprechenden Text der Adresse an. Damit das so funktioniert, muss die Spalte Adresse als Fremdschlüssel fungieren. Dazu ist im Objekt-Explorer die Tabelle 'ewa.XY_Vertreter' aufzuklappen. Mit einem Rechtsklick auf den Ordner 'Schlüssel' lässt sich im Kontextmenü ein neuer Fremdschlüssel erzeugen. Im erscheinenden Fenster ist zunächst auf der rechten Seite die Tabellen- und Spaltenspezifikation einzustellen. Dazu lässt sich über den Button '...' (mit den drei Punkten) rechts daneben ein weiteres Fenster öffnen. Hierin ist als Primärschlüsseltabelle die Tabelle 'Adressen' und darunter die Spalte GUID zu wählen, welche der Primärschlüssel der Adressen-Tabelle ist. Links ist die Fremdschlüsseltabelle 'XY_Vertreter' bereits fest eingestellt, da das Fenster von dort aus geöffnet wurde. Es wird lediglich darunter die Spalte 'Adresse' selektiert. Jetzt kann dieses Fenster mit OK bestätigt werden. Im noch offenen ersten Fenster werden jetzt die beiden Optionen 'Vorhandene Daten bei Erstellung oder Reaktivierung überprüfen' sowie 'Für Replikation erzwingen' auf 'Nein' gesetzt. Jetzt kann auch das Fenster geschlossen werden. Gespeichert wird mit Betätigen des Speichern-Buttons, woraufhin die Änderungen in beiden Tabellen 'XY_Vertreter' und 'Adressen' gespeichert werden. Sollte die Speicherung verhindert werden, so muss im Menü 'Extras -> Optionen...' und dort im Punkt 'Designer' die Option 'Speichern von Änderungen verhindern, die die Neuerstellung der Tabelle erfordern' deaktiviert werden. Ein erneuter Speicherversuch sollte dann zum Erfolg führen. Die Beziehung  wird im Objekt-Explorer im Unterordner 'Schlüssel' platziert. Es kann sein, dass der Eintrag erst nach einer Aktualisierung zu sehen ist. Nach allen Änderungen wird abschließend die neue Tabelle 'XY_Vertreter' gespeichert.

3. Erzeugen der eigentlichen Menüfunktion

Für diesen Schritt ist die Menüfunktion 'Entwicklung -> Werkzeuge -> Menue-Funktionen' zu öffnen. Diese enthält alle im easyWinArt vorhandenen Menüfunktionen, daher wird hier zunächst über den Button 'Neu' ein neuer Datensatz angelegt. Als erstes wird ein Funktionskennzeichen vergeben. Dieses muss eindeutig sein, sollte also möglichst so gewählt werden, dass es weder jetzt noch zukünftig mit den anderen Kennzeichen kolidiert. Es dient auch zum Direkt-Aufruf einer Menüfunktion, sollte also möglichst kurz sein, z.B. 'VERT'. Jetzt wird der Prozedurname eingestellt, dieser sollte mit dem Tabellennamen gleich lauten, in diesem Fall 'XY_VERTRETER'. Als nächstes wird die Bezeichnung der Anzeige eingestellt, was später auch links im Navigationsbereich und im Menü stehen wird, z.B. 'Vertreter'. Darunter wird eine Überschrift eingetragen, die über der Menüfunktion stehen wird, beispielsweise 'Verwaltung aller Vertreter'. Eine Eingabe von Textnummern ist nur für Mehrsprachigkeit notwendig, bleiben diese bei 0, werden die oben stehenden, gerade eigetragenen Werte verwendet. Links kann jetzt das Icon-Index eingestellt werden. Eine Übersicht aller verfügbaren Icons liefert die Menüfunktion 'Entwicklung -> Werkzeuge -> Verfügbare Icons'. Darunter lässt sich die Position im Menü bestimmen, z.B. im Menü 'Stammdaten'. Weiter unten kann jetzt die Datenbank gewählt werden, wie oben bereits erklärt, meist die 'DATEN'-Datenbank. Darunter erfolgt die Auswahl der Tabelle durch Anklicken des blauen Schriftzuges 'Primär-Tabelle / -View', hier 'XY_Vertreter'. Nun fehlt nur noch die Einstellung der Anzahl der Datensätze beim Start, d.h. beim Aufruf der Menüfunktion, z.B. 200. Rechts stellt man am besten noch das Häckchen 'Individual-Variablen' auf ein und 'Abstand' auf 3. Danach kann gespeichert werden. Nach dem Speichern lässt sich durch Anklicken des blauen Schriftzuges 'Menue-Position' die genaue Position per Drag and Drop bestimmen.

4. Einstellung der Menue-Funktionen-Selects

Im nächsten Schritt sind die zu dieser Menüfunktion gehörenden Menue-Funktionen-Selects zu bearbeiten. Diese lassen sich über den Button unten links 'Menue-Funktionen-Select' öffnen, aus der Menüfunktion 'Menue-Funktionen' heraus. Hier werden alle Felder angelegt, die auch zuvor in Schritt 2 erzeugt worden sind. Dabei spielt das Feld Adressen wie bereits erwähnt eine Sonderrolle, da diese nicht selbst vergeben, sondern aus dem Adress-Stamm gewählt wird. Tragen Sie jeweils folgende Werte ein:

  • Tabellen-Name: Adressen, Feld-Name: AdressNummer, Daten-Typ: Integer, Steuerelement-Typ: IntegerBox, LookUp-Feld: Adresse, Anzeige: Adressnummer, Erweiterte Suche
  • Tabellen-Name: Adressen, Feld-Name: MatchCode, Daten-Typ: String, Steuerelement-Typ: TextBox, Anzeige: Matchcode, Erweiterte Suche
  • Tabellen-Name: XY_Vertreter, Feld-Name: Name, Daten-Typ: String, Steuerelement-Typ: TextBox, Anzeige: Vertretername, Erweiterte Suche, Schnellsuche, Sortierungsfeld, Sortier-Reihenfolge 1
  • Tabellen-Name: XY_Vertreter, Feld-Name: Provision, Daten-Typ: Double, Steuerelement-Typ: DoubleBox, Anzeige: Provision, Feld-Format: N2, Erweiterte Suche, Schnellsuche
  • Tabellen-Name: XY_Vertreter, Feld-Name: Kommentar, Daten-Typ: String, Steuerelement-Typ: TextBox, Anzeige: Kommentar, Erweiterte Suche
  • Tabellen-Name: XY_Vertreter, Feld-Name: Aktiv, Daten-Typ: Bit, Steuerelement-Typ: CheckBox, Anzeige: Aktiv, Erweiterte Suche

5. Einstellung der Menue-Funktionen-Froms

Im nächsten Schritt sind die zu dieser Menüfunktion gehörenden Menue-Funktionen-Froms zu bearbeiten. Diese lassen sich über den Button unten links 'Menue-Funktionen-From' öffnen, aus der Menüfunktion 'Menue-Funktionen' heraus. Diese Funktion ist für die richtige Verknüpfung zwischen den einzelnen Tabellen zuständig. Wechseln Sie in den Änderungsmodus und stellen Sie als Quell-Tabelle 'XY_Vertreter' und als Quell-Guid-Spalte 'Adresse' ein. die Quell-Guid-Spalte kann evtl. erst nach einem Speichern eingestellt werden. Dadurch wird unten für den SQL-Befehl ein 'LEFT OUTER JOIN' erzeugt. Ein Klick auf den Button 'SQL-From übertragen' und de SQL-Befehl wird in der Menüfunktion aus Punkt 3 im Feld 'SQL-From' eingetragen.

6. Codegenerator-Daten in das SDK-Projekt übertragen

Im nächsten Schritt wird der Code-Generator aus der Menüfunktion 'Menue-Funktionen' heraus geöffnet über den entsprechenden Button links unten.

Kopieren Sie den gesamten Code aus der Registerkarte 'TBL-Struktur' in die Zwischenablage und öffnen die das SDK-Projekt über die Datei 'easyWinArt-SDK.sln'. Öffnen Sie darin den Code der Projektdatei 'Tabellen-SDK.vb' und fügen Sie den Code aus der Zwischenablage unterhalb von 'User-defined Code Area:' ein. Speichern und schließen Sie die Datei 'Tabellen-SDK.vb'.

Gehen Sie nun wieder zurück zum Codegenerator und kopieren Sie den gesamten Code aus der Registerkarte 'MenuFunctions' in die Zwischenablage. Öffnen Sie darin den Code der Projektdatei 'MenuFunctions.vb' und fügen Sie den Code aus der Zwischenablage unterhalb von 'user-defined-menue-functions' ein. Das ein Fehler angezeigt wird, soll zunächst nicht weiter stören. Speichern und schließen Sie die Datei 'MenuFunctions.vb'.

Kopieren Sie anschließend den Inhalt der Registerkarte 'Business-Object' in die Zwischenablage. Erstellen Sie dann im Projektmappen-Explorer dem Projekt '06-UserBusinessLayer-SDK' eine neue Klasse mit dem Namen 'XY_VertreterOBJ.vb' und überschreiben Sie den Inhalt dieser Klasse mit dem Code aus der Zwischenablage. In diesem Code lassen sich übrigens jetzt leicht Eindeutigkeitsverletzungen abfangen, etc.

Als nächstes ist in der Registerkarte 'Formular-Designer' im Codegenerator zu sehen, wie der Name für die Form lauten soll, nämlich 'XY_VERTRETERFRM'. Legen Sie im Projektmappen-Explorer im Ordner 'user-defined-forms' über einen Rechtsklick eine neue Windows Form mit dem Namen 'XY_VertreterFRM.vb' an, ziehen Sie die Form mit der Maus links im Designer etwas größer und speichern Sie danach erst ab. Speichern Sie auch alle anderen Registerkarten im Visual Studio, falls noch nicht geschehen und schließen Sie diese.

Betätigen Sie dann im Projektmappen-Explorer oben den Button 'Alle Dateien anzeigen', klappen Sie den Eintrag 'XY_VertreterFRM.vb' auf und öffnen Sie den Code der Datei 'XY_VertreterFRM.Designer.vb'. Ersetzen Sie hier alles durch den Code aus der Registerkarte 'Formular-Designer' im Codegenerator und speichern und schließen Sie diese Datei.

Kopieren Sie anschließend noch den gesamten Code aus der Registerkarte 'Formular' im Codegenerator, öffnen Sie im Visual Studio den Code der Datei 'XY_VertreterFRM.vb' und ersetzen Sie dort den Code durch den aus der Zwischenablage. Suchen Sie dann die beiden als fehlerhaft gekennzeichneten Zeilen. Löschen Sie die Zeile mit der Lizenz und setzen Sie das gewünschte Start-Control, z.B. 'Me.TextBoxName'.Die komplette Prozedur 'XY_VERTRETERFRM_EwaNachLoadEnde' kann der Übersicht halber gelöscht werden. Anschließend wird die Datei abgespeichert.

7. SQL-Befehl für Fremdschlüssel-GUID eintragen

Damit die Adresse aus dem Adressen-Stamm geholt werden kann, ist noch eine Anpassung nötig. Öffnen Sie die Datei 'XY_VertreterFRM.vb' und suchen Sie die Prozedur 'SetzeEwaFremdSchlüsselGuid()'. Hier ist bereits ein auskommentierter SQL-Befehl enthalten. Dieser muss entsprechend wieder aktiviert und richtig mit Inhalt gefüllt werden:

VB.NET SDK-Programmcode

  

SQL = " SELECT " & TBL.Adressen.GUID & " FROM " & TBL.Adressen.TBL & _ 

      " WHERE " & TBL.Adressen.AdressNummerINT & " = '" & Me.IntegerBoxAdressNummer_Adressen.Text & "'"

Damit wird die GUID der Adresse dem XY_Vertreter-Objekt für den Business-Layer bereitgestellt.

8. Anpassen der Form mit dem Designer

Jetzt kann die Datei 'XY_VertreterFRM.vb' in der Designer-Ansicht geöffnet werden. Hier sind jetzt alle gewünschten Steuerelemente zu sehen und können nach Wunsch ausgerichtet werden. ACHTUNG: Die Breite des Formulars darf auf Grund eines Fehlers im Designer keinesfalls verändert werden, auch nicht bei vererbten Formularen. Zunächst ist es sinnvoll, das 'PanelAnwendung' in der Vertikalen zu verringern, gerade wenn man nur wenige Steuerelemente hat. So wird der Detailbereich kleiner und oben ist mehr Platz für die Suchliste. Damit der Matchcode nicht vom Anwender bearbeitet werden kann, sollten die beiden Eigenschaften des Matchcodes 'EwaReadOnly' und 'EwaReadOnlyFlag' auf true gesetzt werden.

9. Automatisches Einfügen des Matchcodes bei Adress-Auswahl

Damit der Matchcode automatisch erscheint, wenn eine Adresse ausgewählt wird, muss einwenig programmiert werden. Dazu öffnet man die Datei 'XY_VertreterFRM.vb', wählt oben das Steuerelement 'IntegerBoxAdressNummer_Adressen' und rechts daneben das Ereignis 'EwaControlChanged' aus. Im Code wird der entsprechende Codeblock automatisch angelegt. Hier muss über einen SQL-Befehl der Matchcode geholt und dann mittels der Prozedur 'SetzeControl' in das Steuerelement geschrieben werden. 'SetzeControl' kann den mitgelieferten Snippets entnommen werden. Der Code müsste dann so aussehen:

VB.NET SDK-Programmcode

  

    Private Sub IntegerBoxAdressNummer_Adressen_EwaControlChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles IntegerBoxAdressNummer_Adressen.EwaControlChanged 

        Dim SQL As String = "" 

        Dim DBZ As SQLServerZugriff = Datenbank.DatenDB 

        Dim MatchCode As String 

        SQL = " SELECT " & TBL.Adressen.MatchCodeVC & " FROM " & TBL.Adressen.TBL & _ 

              " WHERE " & TBL.Adressen.AdressNummerINT & " = '" & Me.IntegerBoxAdressNummer_Adressen.Text & "'" 

        MatchCode = C.ToStringX(DBZ.HoleErsteZeileErsteSpalte(SQL)) 

        Me.BasisFkt.SetzeControl(Me.TextBoxMatchCode_Adressen, MatchCode) 

    End Sub

9. Kompilieren des SDK

Jetzt wird die gesamte Projektmappe neu erstellt. Denken Sie daran, dass easyWinArt vorher beendet werden muss, bevor neu erstellt werden kann. Sollte easyWinArt danach nicht starten, so kann das daran liegen, dass die unsichtbare Datei 'easyWinArt-SDK.suo', die neben der Datei 'easyWinArt-SDK.sln' liegt, nicht gelöscht wurde. Löschen Sie diese und kompilieren Sie anschließend die Projektmappe neu. Jetzt sollte easyWinArt starten und die neue Menüfunktion 'Vertreter' über das Menü aufrufbar sein.

Beratung erwünscht?

Gerne können Sie mich oder einen mein­er freund­lichen Kollegen telefonisch er­reichen:  +49 2161 277 680

Alter­na­tiv schrei­ben Sie uns an  info@it-easy.de oder nutz­en Sie das nach­folgende Kontakt­formular.

Ihr Ralf Jasper
Kundenservice

Mitarbeiterfoto von Herrn Ralf Jasper


Rückruf-Service

Für eine möglichst unkomplizierte Kontaktaufnahme füllen Sie bitte das unten stehende Formular aus und klicken auf „Rückruf anfordern“.