Ergänzen von Feldern in Original-Menüfunktionen
Allgemein ist es möglich, Original-Menüfunktionen von easyWinArt mit Hilfe des SDK um eigene datenbank-gestützte Felder zu erweitern, um zu jedem Datensatz zusätzliche Informationen abspeichern zu können oder z.B. diesen mit einem anderen bzw. mit mehreren anderen Datensätzen über Fremdschlüssel zu verknüpfen. Die hier beschriebenen Funktionalitäten setzen das SDK voraus und gehen über die Möglichkeiten von Individualvariablen hinaus, da eine Platzierung des Feldes theoretisch an einer beliebigen Stelle im Detailbereich möglich ist. Oft ist eine Platzierung auf einer eigenen Registerkarte sinnvoll.
In diesem Beispiel wird ein kleines Textfeld 'Status' unterhalb des Labels 'Firma' in der Beleg-Verwaltung eingefügt. Natürlich könnte dieses genauso gut auf einer eigenen Registerkarte dargestellt werden.
1. Tabelle in der Datenbank erweitern
Mit Hilfe des Management Studios navigieren Sie im Objekt-Explorer zur Daten-Datenbank des gewünschten Mandanten, z.B. 'easyWinArtMeierGmbH', darunter zur Tabelle der gewünschten Menüfunktion, in diesem Fall die Tabelle 'Vorgang', da das Feld in die Menüfunktion 'Vorgangs-Belege' eingefügt werden soll. Welche Tabelle die richtige ist, lässt sich im easyWinArt ganz oben rechts nach einem Klick auf die Erläuterungen zur aktuellen Menüfunktion einsehen. Klicken Sie mit rechts auf die Tabelle und dann auf den Kontextmenü-Eintrag 'Entwerfen'. Im rechts neu geöffneten Fenster lässt sich nun unterhalb der bereits vorhandenen Felder ein weiteres Feld ergänzen und definieren. Geben Sie einen Namen ein, der das Feld nicht mit den vorhandenen oder zukünftigen Feldern kollidieren lässt, z.B. 'A_Status'. Als Datentyp kommen in Frage:
- uniqueidentifier (GUID, z.B. Primär-/ Fremdschlüssel)
- bit (Häkchen Ja-Nein)
- datetime (Datums- oder Uhrzeit-Felder)
- float (Komma-Zahlen)
- int (Ganztellige Zahlen)
- nvarchar(MAX) (lange Texte)
- nvarchar(100) (auf x Stellen begrenzte Texte)
- varbinary(MAX) (Dateien / Bilder)
- varbinary(10000) (begrenzte Dateien / Bilder)
In diesem Falle wählen wir nvarchar(20), unser Textfeld nimmt also maximal 20 Zeichen auf. Als dritte Einstellung kann definiert werden, ob das Feld ein Pflichtfeld ist, also nicht NULL sein darf. Wird kein Haken gesetzt, so kann ein Vorgang später nicht gespeichert werden, ohne dass der Anwender einen Text in das neue Feld eingibt, es erscheint eine entsprechende Meldung.
Besonderheit: Bei bit-Feldern muss immer der Haken nicht gesetzt sein und unten in den Spalteneigenschaften ist als Standardwert oder -bindung ((0)) einzustellen.
Jetzt wird das Tabellen-Layout mittels Speichern abgespeichert. Sollte dies nicht möglich sein, 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.
2. Anlegen des Eintrages in Menue-Funktionen-Select
Um der Menüfunktion das neue Feld bekannt zu geben, und damit es in der Suchliste aufgeführt wird, starten Sie easyWinArt und öffnen Sie die Menüfunktion 'Entwicklung -> Werkzeuge -> Menue-Funktionen-Select', in der Suchmaske ist die gewünschte Menüfunktion einzugeben, in diesem Fall bei Anzeige 'Vorgangs-Belege' oder bei Funktionskennzeichen 'VOR'. Das Kennzeichen ist ebenfalls oben rechts in der entsprechenden Menüfunktion unter den Erläuterungen zur aktuellen Menüfunktion einzusehen, falls es nicht bekannt ist. Im neu geöffneten Fenster sind alle Spalten der Suchliste der Menüfunktion 'Vorgangs-Belege' enthalten.
Über 'Neu' kann jetzt ein neuer Eintrag ergänzt werden. Klicken Sie zuerst auf das blaue Wort 'Feld-Name' und wählen das soeben in der Datenbank angelegte neue Feld aus. Darunter wählen Sie den passenden Datentyp zum neuen Feld aus, bei Texten immer den Typ 'String' und nie den Typ 'Text', so also auch jetzt entsprechend 'String'. Darunter ist der Steuerelement-Typ auszuwählen, hier wäre das eine Textbox. Rechts oben bei Anzeige vergeben Sie einen Namen für das Feld, dieser wird dann als Spaltenüberschrift in der Suchliste verwendet. Soll die Oberfläche mehrsprachig sein, so lässt sich auch eine Textnummer hinterlegen. Diese ist aber vorher zusammen mit den mehrsprachigen Texten unter 'Entwicklung -> Sprachen -> Alle Sprachen SDK' anzulegen. In dem Fall wird nicht mehr der Text im Feld 'Anzeige', sondern der je nach gewählter Oberflächen-Sprache entsprechende Text als Spaltenüberschrift angezeigt. Speichern Sie jetzt den neuen Eintrag ab.
3. Anlage des neuen Feldes und Ergänzung der notwendigen Programmierungen
In diesem Fall wird das Feld programmiertechnisch erzeugt und auf dem Formular der Menü-Funktion 'Vorgänge' platziert. Dann ist die Datenbindung zu ergänzen, damit unser neues Steuerelement an die entsprechende Spalte in der Suchliste gebunden wird und der Inhalt auch entsprechend aktualisiert und synchronisiert wird. Letztlich muss auch das Speichern programmiert werden, damit der Inhalt des neuen Steuerelementes beim Speichern des Datensatzes auch in die Datenbank weggespeichert wird. Letzteres wird über den Trigger 'SpeichernZusatzFelder' eingestellt.
VB.NET SDK-Programmcode: Beispiel
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim VorFRM As VorgangFRM
VorFRM = CType(sender, VorgangFRM)
Dim neueTextbox As New EwaTextBox
neueTextbox.Width = 60
neueTextbox.Name = "A_TextBoxStatus"
neueTextbox.Left = 5
neueTextbox.Top = 60
neueTextbox.MaxLength = 20
VorFRM.GroupBoxAdresse.Controls.Add(neueTextbox)
End If
End Sub
#End Region
#Region " TriggerFormFramework_DatenBindung-Ereignis "
Private Sub TriggerFormFramework_DatenBindung(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.DatenBindung
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim VorFRM As VorgangFRM
VorFRM = CType(sender, VorgangFRM)
Dim tmpTextBox As EwaTextBox
tmpTextBox = CType(VorFRM.GroupBoxAdresse.Controls("A_TextBoxStatus"), EwaTextBox)
VorFRM.DatenBindung(tmpTextBox, TBL.Vorgang.TBL, "A_Status")
End If
End Sub
#End Region
#Region " TriggerFormFramework_SpeichernZusatzFelder-Ereignis "
Private Sub TriggerFormFramework_SpeichernZusatzFelder(ByVal sender As Object, ByVal e As FormFrameworkZusatzEventArgs) Handles Me.SpeichernZusatzFelder
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim VorFRM As VorgangFRM
VorFRM = CType(sender, VorgangFRM)
Dim tmpTextBox As EwaTextBox
tmpTextBox = CType(VorFRM.GroupBoxAdresse.Controls("A_TextBoxStatus"), EwaTextBox)
e.HauptDB.AddFelder("A_Status", tmpTextBox.Text, EwaSQL.NVarChar)
End If
End Sub
#End Region