TriggerFormFramework

AktuelleGuidChanged

Wird aufgerufen, wenn der aktuell ausgewählte Datensatz und damit auch seine GUID (Primärschlüssel) wechselt. Dabei wird die globale Variable an der Menüfunktion 'AktuelleGUID' mit der neuen GUID gefüllt und anschließend dieses Ereignis ausgelöst. Dies passiert beim Wechseln das Datensätzes durch Blättern in der Suchliste, nach Neu, nach Löschen (dann ist die aktuelle GUID eine leere GUID), nach Suchen (aber nur, wenn auch der Datensatz auch wirklich wechselt), nach Aktualisieren (wenn dabei der Datensatz wechselt), beim Beenden (wenn noch ein neuer, ungespeicherter Datensatz besteht und die Frage nach dem Speichern mit 'Nein' beantwortet wird) usw. Das Ereignis wird nicht beim Öffnen einer Menü-Funktion ausgelöst. Über das konkrete Form-Objekt (z.B. 'VorgangFRM.AktuelleGUID') oder die EventArgs-Klasse e (z.B. 'e.AktuelleGUID') können die nach dem Blättern neue aktuelle GUID sowie die vorherige aktuelle GUID (z.B. 'e.AktuelleGUID' oder 'e.AktuelleGUID') abgefragt werden.

Beispiel: folgt bald

BacklinkPrüfung

speziell

DataGridAusblendenChanged

Dieses Ereignis wird ausgelöst, nachdem die Suchliste ein- oder ausgeblendet wird. Vom Benutzer kann die Suchliste über den entsprechenden Toolbar-Button oder über die Tasten Strg+F10 ein- und ausgeblendet werden. Ob die Suchliste ein- oder ausgeblendet ist, kann über die EventArgs-Klasse e abgefragt werden ('e.DataGridAusblendenButtonPushed').

Beispiel: folgt bald

Datenbindung

Dieses Ereignis kann verwendet werden, um eigene im Detailbereich ergänzte Steuerelemente an die entsprechenden Spalten in der Suchliste (DataGrid) zu binden, so dass ihre Daten wechselseitig synchronisiert werden.

Beispiel 1: Hier wurde die Menüfunktion 'Vorgangs-Belege' um ein Auswahlfeld 'Verantwortlicher' mit dem Namen 'A_comboboxVerantwortlicher' ergänzt, welches an das 'Name'-Feld der Anwender-Tabelle gebunden wird. Es wird also im Auswahlfeld bzw. in der entsprechenden Spalte der Suchliste der Name des dem Vorgangs-Beleg über dieses Auswahlfeld zugeordneten Anwenders angezeigt.


VB.NET: Datenbindung - Beispiel 1

  

#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

                    '>>> Datenbindung für comboBox 'Verantwortlicher' 

                    Dim comboboxVerantwortlicher As EwaComboBox 

                    comboboxVerantwortlicher = CType(vorFRM.GroupBoxStichworte.Controls("A_comboboxVerantwortlicher"), EwaComboBox

                    vorFRM.DatenBindung(comboboxVerantwortlicher, TBL.Anwender.TBL & "Verantwortlicher", TBL.Anwender.NameVC) 

                End If 

        End Sub 

#End Region

DatenbindungComboBox

Dieses Ereignis kann verwendet werden, um eigene ergänzte Comboboxen (Auswahlfelder) mit auswählbaren Werten zu füllen sowie bei comboBoxen mit blauem Label davor die Logik zu ergänzen, dass der Wert auch über das Auswahlfenster gewählt werden kann, welches nach einem Klick auf das Label erscheint. Weiterhin werden auch Fremdschlüssel-Textboxen mittels dieses Ereignisses um ihre Logiken ergänzt.

Beispiel 1:


VB.NET: DatenbindungComboBox - Beispiel 1

  

#Region " VorgangFRM_EwaDatenbindungComboBox-Ereignis (Auch für Fremdschlüssel-TextBoxen) " 

        Private Sub VorgangFRM_EwaDatenbindungComboBox(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.DatenbindungComboBox 

                '>>> Bei Menüfunktion  V O R G A N G  

                If TypeOf sender Is VorgangFRM Then 

                    Dim vorFRM As VorgangFRM 

                    vorFRM = CType(sender, VorgangFRM

                    '>>> Datenbindung für comboBox 'Verantwortlicher' 

                    Dim comboboxVerantwortlicher As EwaComboBox 

                    comboboxVerantwortlicher = CType(vorFRM.GroupBoxStichworte.Controls("A_comboboxVerantwortlicher"), EwaComboBox

                    comboboxVerantwortlicher.EwaCreateSQL = TBL.Vorgang.SQL 

                End If 

        End Sub 

#End Region

DatenBindungInit

...

Beispiel: folgt bald

Ewa1zuNmulti

Mit diesem Ereignis können Ewa1zuN-Controls beeinflusst werden. Es kann beispielsweise über SQL eingeschränkt werden, was an verschiedenen Stellen in den Registerkarten angzeigt wird. Ein großer Vorteil ist, dass auf diese Weise zentral alle entsprechenden Ewa1zuN-Controls, sogar zukünftig ergänzte, eingestellt werden.

Beispiel 1: In Ewa1zuN-Controls sieht der Anwender nur noch unverschlüsselte Dokumente, oder solche, welche für seine Person oder seine Gruppe verschlüsselt sind.

Beispiel 2: Anwender der Gruppe 'Vertrieb' sehen keine Dokumente mehr an den Adressen.


VB.NET: Ewa1zuNmulti - Beispiel 1

  

#Region " TriggerFormFramework_Ewa1zuNmulti-Ereignis " 

        Private Sub TriggerFormFramework_Ewa1zuNmulti(sender As Object, e As Ewa1ZuNmultiEventArgs) Handles Me.Ewa1zuNmulti 

                '>>> Ewa1zuN-Dokumentenmanagement 

                If e.Ewa1zuNobj.FunktionsKennzeichen1nGUID = MF.DokumentenManagement Then 

                    '>>> Vor dem Aktualisieren des Inhalts 

                    If e.Zeitpunkt = Ewa1ZuNmultiZeitpunkt.VorDataTableAktualisieren Then 

                        '>>> Erweiterungs-String für den SQL-Befehl 

                        Dim where As String = "(" & TBL.Dokumente.TBL & "." & TBL.Dokumente.OwnerGUID & " IS NULL OR " & _ 

                                              TBL.Dokumente.TBL & "." & TBL.Dokumente.OwnerGUID & " = '" & GV.User.GUID.ToString & "') OR " & _ 

                                              "(" & TBL.Dokumente.TBL & "." & TBL.Dokumente.GruppeGUID & " IS NULL OR " & _ 

                                              TBL.Dokumente.TBL & "." & TBL.Dokumente.GruppeGUID & " = '" & GV.User.Gruppe.ToString & "')" 

                        '>>> SQL-Befehl des Ewa1zuN erweitern 

                        If e.Ewa1zuNobj.SqlBefehl.Contains("WHERE") Then 

                            e.Ewa1zuNobj.SqlBefehl = e.Ewa1zuNobj.SqlBefehl.Replace(" WHERE ", " WHERE (" & where & ") AND "

                        Else 

                            If e.Ewa1zuNobj.SqlBefehl.Contains("ORDER BY") Then 

                                e.Ewa1zuNobj.SqlBefehl = e.Ewa1zuNobj.SqlBefehl.Replace(" ORDER BY ", " WHERE (" & where & ") ORDER BY "

                            Else 

                                e.Ewa1zuNobj.SqlBefehl &= " WHERE (" & where & ")" 

                            End If 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region


VB.NET: Ewa1zuNmulti - Beispiel 2

  

#Region " TriggerFormFramework_Ewa1zuNmulti-Ereignis " 

        Private Sub TriggerFormFramework_Ewa1zuNmulti(sender As Object, e As Ewa1ZuNmultiEventArgs) Handles Me.Ewa1zuNmulti 

                '>>> Nur für Anwender der Gruppe 'Vertrieb' 

                If GV.User.Gruppe = C.ToGuidX("87226792-75bc-4fe3-84f2-d20c18b6e116") Then 

                    '>>> Nur bei Adressen-Fenster und Ewa1zuN-Dokumentenmanagement 

                    If TypeOf e.Ewa1zuNobj.BasisFRM Is AdressenFRM AndAlso e.Ewa1zuNobj.FunktionsKennzeichen1nGUID = MF.DokumentenManagement Then 

                        '>>> Vor dem Aktualisieren des Inhalts 

                        If e.Zeitpunkt = Ewa1ZuNmultiZeitpunkt.VorDataTableAktualisieren Then 

                            '>>> SQL-Befehl ändern 

                            Dim where As String = "1=2" 

                            e.Ewa1zuNobj.SqlBefehl = Fkt.ErweiternWhereKlausel(Fkt.HoleSqlBefehlOhneWhere(e.Ewa1zuNobj.SqlBefehl), where) 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region

EwaAutomatischeLagerortAbfrageForm

Dieses Ereignis wird zu verschiedenen Aktionen und Zeitpunkten innerhalb des Fensters für automatische Lagerbuchungen ausgelöst. Bei entsprechend eingestellter Mandanten-Konfiguration und ggf. entsprechenden Lagerbeständen eines Artikels wird dieses Fenster bei Lieferungen, Fertigungs-Aufträgen usw. angezeigt. Folgende Kombinationen stehen zur Verfügung:

  • Typ 'ButtonNeuerLagerOrt' und Zeitpunkt 'NachAusführung'
  • Typ 'ButtonNeueCharge' und Zeitpunkt 'NachAusführung'
  • Typ 'Form' und Zeitpunkt 'NachLoad' / 'FormClosing'

Hinweis: Falls Programmierungen erfolgen sollen, nachdem das Fenster wirklich komplett geladen ist, bitte den Trigger 'EwaModalFormLoadClosing' verwenden, im Sinne von NachLoadEnde.

Beispiel 1: Für den Fall, dass die Menüfunktion 'Fertigungs-Erledigt-Meldungen' geöffnet wird und darin eine Fertig-Meldung erfolgt und somit ein neuer Datensatz angelegt wird, welcher wiederum aufgrund einer entsprechenden Konfiguration und Fertigungs-Stückliste mehrere Lagerabbuchungen sowie eine Lagerzubuchung bedingt, zu denen jeweils nacheinander das Fenster für automatische Lagerbuchungen erscheint, soll der Kommentar, welcher im ersten der Lagerbuchungsfenster eingegeben wird, automatisch in den folgenden Lagerbuchungsfenstern im entsprechenden Textfeld voreingstellt werden.

Beispiel 2: Allgemeine Beispiele.


VB.NET: EwaAutomatischeLagerortAbfrageForm - Beispiel 1

  

#Region " TriggerFormFramework_EwaAutomatischeLagerortAbfrageForm-Ereignis " 

        Private Sub TriggerFormFramework_EwaAutomatischeLagerortAbfrageForm(sender As Object, e As AutomatischeLagerortAbfrageFormEventArgs) Handles Me.EwaAutomatischeLagerortAbfrageForm 

                '>>> Beim Öffnen des automatischen Lager-Buchungsfensters 

                If e.NachLoadJN Then 

                    '>>> Sofern die aktuell im Vordergrund befindliche Form das Fertigungs-Erledigt-Meldungen-Fenster ist 

                    If TypeOf Menue.FRM.ErrorForm Is FertigungsErledigtMeldungenFRM Then 

                        Dim form As LagerortAuswahlHF = CType(e.ZugangAbgangFormular, LagerortAuswahlHF

                        '>>> Fertigungs-Erledigt-Meldungen-Fenster  

                        Dim lagerErledigtFRM As FertigungsErledigtMeldungenFRM 

                        lagerErledigtFRM = CType(Menue.FRM.ErrorForm, FertigungsErledigtMeldungenFRM

                        '>>> Prüfen, ob ein Objekt vomn Typ 'TextFürLagerbuchungInFertigungserledigtMeldung' gemerkt wurde 

                        If TypeOf lagerErledigtFRM.ObjektNurFürSDK Is TextFürLagerbuchungInFertigungserledigtMeldung Then 

                            '>>> Text aus Objekt holen und in -Kommentar-TextBox setzen, falls diese leer ist 

                            Dim textFürLagerbuchungInFertigungserledigtMeldungOBJ As TextFürLagerbuchungInFertigungserledigtMeldung 

                            textFürLagerbuchungInFertigungserledigtMeldungOBJ = CType(lagerErledigtFRM.ObjektNurFürSDK, TextFürLagerbuchungInFertigungserledigtMeldung

                            If textFürLagerbuchungInFertigungserledigtMeldungOBJ.KommentarText.Trim <> "" Then 

                                e.ZugangAbgangFormular.TextBoxEigenerKommentar.Text = textFürLagerbuchungInFertigungserledigtMeldungOBJ.KommentarText 

                            End If 

                        End If 

                    End If 

                End If 

                '>>> Beim Schließen des automatischen Lager-Buchungsfensters 

                If e.FormClosingJN Then 

                    '>>> Sofern die aktuell im Vordergrund befindliche Form das Fertigungs-Erledigt-Meldungen-Fenster ist 

                    If TypeOf Menue.FRM.ErrorForm Is FertigungsErledigtMeldungenFRM Then 

                        '>>> Fertigungs-Erledigt-Meldungen-Fenster  

                        Dim lagerErledigtFRM As FertigungsErledigtMeldungenFRM 

                        lagerErledigtFRM = CType(Menue.FRM.ErrorForm, FertigungsErledigtMeldungenFRM

                        '>>> Text aus Kommentar-Textbox 

                        Dim text As String = e.ZugangAbgangFormular.TextBoxEigenerKommentar.Text 

                        '>>> Falls ein Text vorhanden, diesen am Fenster merken, ansonsten gemerktes Objekt löschen 

                        If text.Trim <> "" Then 

                            Dim textFürLagerbuchungInFertigungserledigtMeldungOBJ As New TextFürLagerbuchungInFertigungserledigtMeldung 

                            textFürLagerbuchungInFertigungserledigtMeldungOBJ.KommentarText = text 

                            lagerErledigtFRM.ObjektNurFürSDK = textFürLagerbuchungInFertigungserledigtMeldungOBJ 

                        Else 

                            lagerErledigtFRM.ObjektNurFürSDK = Nothing 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region 

 

#Region " Class TextFürLagerbuchungInFertigungserledigtMeldung " 

        Class TextFürLagerbuchungInFertigungserledigtMeldung 

            Friend KommentarText As String 

        End Class 

#End Region

EwaDrucken

Mit dem Ereignis 'EwaDrucken' kann auf das Drucken reagiert sowie selbiges verhindert werden. Es wird zwischen den verschiedenen Drucktypen wie 'Drucken', 'Fax', 'E-Mail', usw. differenziert. Dabei stehen sehr viele Informationen über den geplanten Druck zur Verfügung. So kann z.B. ein Hinweis oder ähnliches angezeigt werden, wenn man einen ganz bestimmten Report andrucken möchte. Der Druck kann mittels der Variable 'AktionAusführen' verhindert werden.

Beispiel 1: Der Druck des Reports 'Rechnung' wird in der Menüfunktion 'Beleg-Verwaltung' unterbunden.


VB.NET: EwaDrucken - Beispiel 1

  

#Region " TriggerFormFramework_EwaDrucken-Ereignis " 

        Private Sub TriggerFormFramework_EwaDrucken(sender As Object, e As FormFrameworkDruckenEventArgs, ByRef AktionAusführen As Boolean) Handles Me.EwaDrucken 

                If TypeOf e.BasisFRM Is VorgangFRM AndAlso e.Zeitpunkt = DruckenZeitpunkt.DruckenStart AndAlso e.ObjLL.Anzeige = "Rechnung" Then 

                    AktionAusführen = False 

                End If 

        End Sub 

#End Region

EwaDruckenAusgeführt

...

Beispiel: folgt bald

EwaLagerortMagazinChargenAuswahl

Dieses Ereignis wird ausgelöst, wenn durch eine Lagerbuchung eine Lagerplatz-Auswahl ausgelöst würde. Dabei entscheidet easyWinArt, von welchen Lagerorten und Magazinen die zu buchende Menge abgebucht werden soll. Bei chargenfähigen Artikeln werden auch die abzubuchenden Chargen festgelegt. Je nach Konfiguration und Sachlage kann ein Auswahl-Fenster erscheinen, in dem der Anwender die Auswahl treffen kann. Für jede einzelne Lagerbuchung wird dieser Trigger zu Beginn und am Ende ausgelöst.

Wird der Trigger, wie in Beispiel 1 beschrieben, zum Blockieren negativer Lagerbuchungen verwendet, so ist eine solche Blockade auch in folgenden Triggern zu realisieren:

  • LagerBuchungsPlausibilitätsPrüfung (BusinessLayer)
  • ÜbergreifendeNegativeLagerBestandsPrüfung (BusinessLayer)

Beispiel 1: Negative Lagerbuchungen sind in der Mandanten-Konfiguration grundsätzlich ausgeschaltet. Nur für Artikel, deren Artikelnummer mit 'A' beginnt, soll das Buchen in den negativen Bestand eingeschaltet werden.


VB.NET: EwaLagerortMagazinChargenAuswahl - Beispiel 1

  
#Region " TriggerFormFramework_EwaLagerortMagazinChargenAuswahl-Ereignis "
        Private Sub TriggerFormFramework_EwaLagerortMagazinChargenAuswahl(sender As Object, e As LagerortMagazinChargenAuswahlEventArgsHandles Me.EwaLagerortMagazinChargenAuswahl
            If e.Zeitpunkt = LagerortMagazinChargenAuswahlZeitpunkt.StartAuswahl Then
                Dim artGUID As Guid = e.LagerortMagazinAuswahlSTR.Artikel
                Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
                If C.ToStringX(tmpDBZ.HoleFeld(TBL.Artikel.ArtikelNummerVC, TBL.Artikel.TBL, TBL.Artikel.GUID, artGUID.ToString)).StartsWith("A"Then
                    GV.ConfigMandant.NegativerLagerBestandZulässig = True
                End If
            Else
                GV.ConfigMandant.NegativerLagerBestandZulässig = False
            End If
        End Sub
#End Region

EwaMenueFormLoadClosing

Dieses Ereignis wird ausgelöst, wenn das Hauptfenster von easyWinArt geöffnet bzw. geschlossen wird. Über das EventArg 'e.MenueForm' oder den Sender kann auf das Hauptfenster zugegriffen werden, um Eigenschaften abzufragen oder es zu verändern.

Beispiel 1: In diesem Beispiel wird das komplette Menü 'BDE' ausgeblendet.


VB.NET: EwaMenueFormLoadClosing - Beispiel 1

  

#Region " TriggerFormFramework_EwaMenueFormLoadClosing-Ereignis " 

        Private Sub TriggerFormFramework_EwaMenueFormLoadClosing(sender As Object, e As MenüFormEventArgs) Handles Me.EwaMenueFormLoadClosing 

                '>>> Beim Starten des Hauptfensters 

                If e.LoadJN Then 

                    '>>> Menüpunkt ausblenden, wenn 'BDE' im Text vorkommt 

                    For Each item As ToolStripMenuItem In e.MenueForm.MainMenuStrip.Items 

                        If item.Text.Contains("BDE") Then 

                            item.Visible = False 

                            Exit Sub 

                        End If 

                    Next 

                End If 

        End Sub 

#End Region

EwaModalFormLoadClosing

Dieses Ereignis wird ausgelöst, wenn eine von der BasisModalForm abgeleitete Form geöffnet bzw. geschlossen wird. Dabei handelt es sich um alle kleineren Fenster, die im täglichen Betrieb von easyWinArt erscheinen, z.B. Lagerort-Abfrage-Fenster, das Drucken-Fenster, Ja-Nein-Abfragen etc.

Beispiel 1: Hier wird die Sprache im Drucken-Fenster beim Öffnen automatisch auf 'Deutsch' gestellt, wenn aus einer Einkaufs-Lieferung heraus gedruckt wird.


VB.NET: EwaModalFormLoadClosing - Beispiel 1

  

#Region " TriggerFormFramework_EwaModalFormLoadClosing-Ereignis " 

        Private Sub TriggerFormFramework_EwaModalFormLoadClosing(ByVal sender As Object, ByVal e As ModalFormEventArgs) Handles Me.EwaModalFormLoadClosing 

            '>>> Nur beim Drucken-Fenster 

            If TypeOf sender Is DruckenFRM Then 

                Dim druckenFenster As DruckenFRM 

                druckenFenster = CType(sender, DruckenFRM

                '>>> Nur, wenn das Drucken-Fenster aus einem Vorgangs-Belege-Fenster geöffnet wurde 

                If TypeOf druckenFenster.BasisFRM Is VorgangFRM Then 

                    Dim vorgangFenster As VorgangFRM 

                    vorgangFenster = CType(druckenFenster.BasisFRM, VorgangFRM

                    '>>> Nur, wenn gerade eine Einkaufs-Lieferung ausgewählt ist 

                    If vorgangFenster.BelegTypGUID = BT.EkLieferung Then 

                        '>>> Sprache 'Deutsch' im Drucken-Fenster einstellen 

                        druckenFenster.ComboBoxDrucksprache.SelectedIndex = druckenFenster.ComboBoxDrucksprache.Items.IndexOf("Deutsch"

                    End If 

                End If 

            End If

If TypeOf sender Is MeldungsFormJaNeinAbbrechen AndAlso e.Zeitpunkt = ModalFormZeitpunkt.StartForm Then
    MsgBox("startform")
End If
 
If TypeOf sender Is MeldungsFormJaNeinAbbrechen AndAlso e.Zeitpunkt = ModalFormZeitpunkt.NachLoad Then
    MsgBox("NachLoad: " & e.StartFormJN)
End If
 
If TypeOf sender Is MeldungsFormJaNeinAbbrechen AndAlso e.Zeitpunkt = ModalFormZeitpunkt.NachLoadEnde Then
    MsgBox("NachLoadEnde: " & e.NachLoadJN)
End If
 
If TypeOf sender Is MeldungsFormJaNeinAbbrechen AndAlso e.Zeitpunkt = ModalFormZeitpunkt.FormClosing Then
    MsgBox("FormClosing: " & e.FormClosingJN)
End If 

        End Sub 

#End Region



VB.NET: EwaModalFormLoadClosing - Beispiel 2

  

#Region " TriggerFormFramework_EwaAutomatischeLagerortAbfrageForm-Ereignis " 

        Private Sub TriggerFormFramework_EwaAutomatischeLagerortAbfrageForm(sender As Object, e As AutomatischeLagerortAbfrageFormEventArgs) Handles Me.EwaAutomatischeLagerortAbfrageForm 

                Dim fenster As LagerortAuswahlHF = e.ZugangAbgangFormular 

                '>>> NachLoad (Nicht NachLoadEnde!!!) 

                If e.Typ = AutomatischeLagerortAbfrageFormTyp.Form AndAlso e.Zeitpunkt = AutomatischeLagerortAbfrageFormZeitpunkt.NachLoad Then 

                    ' xxx 

                End If 

                '>>> FormClosing 

                If e.Typ = AutomatischeLagerortAbfrageFormTyp.Form AndAlso e.Zeitpunkt = AutomatischeLagerortAbfrageFormZeitpunkt.FormClosing Then 

                    ' xxx 

                End If 

                '>>> ButtonNeuerLagerOrt, NachAusführung 

                If e.Typ = AutomatischeLagerortAbfrageFormTyp.ButtonNeuerLagerOrt AndAlso e.Zeitpunkt = AutomatischeLagerortAbfrageFormZeitpunkt.NachAusführung Then 

                    fenster.TextBoxAuswahlCharge.Text = "test" 

                End If 

                '>>> ButtonNeueCharge, NachAusführung 

                If e.Typ = AutomatischeLagerortAbfrageFormTyp.ButtonNeueCharge AndAlso e.Zeitpunkt = AutomatischeLagerortAbfrageFormZeitpunkt.NachAusführung Then 

                    fenster.TextBoxAuswahlCharge.Text = "test" 

                End If 

        End Sub 

#End Region 

 

#Region " TriggerFormFramework_EwaModalFormLoadClosing-Ereignis (Zu Verwenden für NachLoadEnde)" 

        Private Sub TriggerFormFramework_EwaModalFormLoadClosing(sender As Object, e As ModalFormEventArgs) Handles Me.EwaModalFormLoadClosing 

                '>>> Beim LagerAuswahlFenster 

                If TypeOf sender Is LagerortAuswahlHF Then 

                    Dim fenster As LagerortAuswahlHF = CType(sender, LagerortAuswahlHF

                    If e.NachLoadJN AndAlso fenster.ZugangJN Then 

                        fenster.TextBoxAuswahlCharge.Text = "test" 

                    End If 

                End If 

        End Sub 

#End Region

EwaRegisterkartenAusblenden

Mit dem Ereignis 'EwaRegisterkartenAusblenden' können die Registerkarten der Menüfunktionen, welche sich rechts im Detailbereich befinden, individuell ein- und ausgeblendet werden. Im Standard können die Registerkarten pro Mandant und pro Menüfunktion eingestellt und entsprechend ausgeblendet werden, dies wird beim Öffnen einer Menüfunktion gemäß der Daten in der Tabelle 'AnwenderRegisterAusblenden' ausgeführt. Dabei kann mit diesem Trigger vor dieser Daten-Ermittlung, danach und auch nach dem eigentlichen Ausblenden Einfluss genommen werden. Dabei ist es möglich, die Daten-Ermittlung zu unterbinden. Um für eigene Programmierungen die internen Namen der Registerkarten zu erhalten, kann bei gedrückter Tastenkombination STRG+ALT eines der Registerkarten-Icons mit der rechten Maustaste angeklickt werden.

Beispiel 1: Für alle Anwender der Gruppe 'Fertigung' sollen nur bestimmte Registerkarten zu sehen sein. Um zu verhindern, dass zukünftige neue Registerkarten zu sehen sein werden, werden zunächst dynamisch alle möglichen Registerkarten ausgeblendet und nur gezielt einige eingeblendet. Die Standard-Ermittlung wird dabei komplett deaktiviert. Weiterhin soll der Anwender Müller die Branchen der Adressen nicht sehen. Hier wird einfach nach der Ermittlung diese Registerkarte ausgeblendet, falls sie es nicht sowieso bereits über die Standard-Einstellungen ist.


VB.NET: EwaRegisterkartenAusblenden - Beispiel 1

  

#Region " TriggerFormFramework_EwaRegisterkartenAusblenden-Ereignis " 

        Private Sub TriggerFormFramework_EwaRegisterkartenAusblenden(sender As Object, e As RegisterkartenAusblendenEventArgs, ByRef ErmittlungAusführen As Boolean) Handles Me.EwaRegisterkartenAusblenden 

            '>>> Bei Menüfunktion  A R T I K E L 

            If TypeOf sender Is ArtikelFRM Then 

                If GV.User.GruppenName = "Fertigung" Then 

                    Dim artFRM As ArtikelFRM = CType(sender, ArtikelFRM

                    '>>> Vor der Ermittlung alle Registerkarten ausblenden, nur gezielt einige einblenden 

                    If e.Zeitpunkt = RegisterkartenAusblendenZeitpunkt.VorErmittlung Then 

                        '>>> Alle TabPage-Namen holen 

                        Dim alleTabPageNamen As List(Of String) = artFRM.TabControlStandard.TabPages.Cast(Of TabPage).Select(Function(x) x.Name).ToList 

                        '>>> Nicht auszublendende Registerkarten wieder von der Liste aller Namen entfernen 

                        alleTabPageNamen.Remove("TabPageSonderBezeichnungen"

                        alleTabPageNamen.Remove("TabPageKlassifikation"

                        alleTabPageNamen.Remove("TabPageTerminierung"

                        alleTabPageNamen.Remove("TabPageStücklisteFertigung"

                        alleTabPageNamen.Remove("TabPageBemerkung"

                        alleTabPageNamen.Remove("TabPageTerminierung"

                        alleTabPageNamen.Remove("TabPageIndVar"

                        '>>> Namens-Liste der auszublendenden Registerkarten übergeben 

                        e.AuszublendendeTabsLIS.AddRange(alleTabPageNamen) 

                        '>>> Keine Standard-Ausblendung durchführen 

                        ErmittlungAusführen = False 

                    End If 

                End If 

            End If 

            '>>> Bei Menüfunktion  A D R E S S E N 

            If TypeOf sender Is AdressenFRM Then 

                '>>> Nach der Ermittlung eine Registerkarte entfernen für einen bestimmten Anwender, wenn diese nicht sowieso schon global entfernt ist 

                If GV.User.Name = "Müller" Then 

                    If e.Zeitpunkt = RegisterkartenAusblendenZeitpunkt.NachErmittlung Then 

                        If Not e.AuszublendendeTabsLIS.Contains("TabPageBranchen") Then 

                            e.AuszublendendeTabsLIS.Add("TabPageBranchen"

                        End If 

                    End If 

                End If 

            End If 

        End Sub 

#End Region

EwaSetzeEmailFaxDms

Das Ereignis 'EwaSetzeEmailFaxDms' wird beim Starten des Druckvorgangs (Vorschau, Drucken, E-Mail, FAX, Export, EDI-Lager, ...) ausgelöst. Entweder können eigene Programmierungen mit dem Druck verbunden werden oder aber es wird der Druckvorgang beeinflusst. Eine sinnvolle Einsatzmöglichkeit ist das Setzen eigener E-Mail-Texte für das Versenden von Mails über die EventArgs-Klasse e.

In unterem Beispiel wird für den Body-Text der zu versendenden Mails ein individueller Text bestehend aus Grußformel, Ansprechpartner des Beleges (mit Anrede, Titel, Name) und einem eigenen Signatur-Textblock gesetzt. Grußformel sowie der Signatur-Textblock werden als Druck-Sprachtexte angelegt, so dass diese auch unabhängig von der Programmierung bei Bedarf in easyWinArt selbst angepasst und auch mehrsprachig hinterlegt werden können.


VB.NET: EwaSetzeEmailFaxDms - Beispiel 1

  

#Region " TriggerFormFramework_EwaSetzeEmailFaxDms-Ereignis " 

    Private Sub TriggerFormFramework_EwaSetzeEmailFaxDms(ByVal sender As Object, ByVal e As FormFrameworkEmailFaxDmsEventArgs) Handles Me.EwaSetzeEmailFaxDms 

            '>>> V O R G A N G 

            If TypeOf sender Is VorgangFRM Then 

                Dim VorFRM As VorgangFRM 

                VorFRM = DirectCast(sender, VorgangFRM) 

                '>>> Guid der gewählten Sprache für den Druck 

                Dim sprachGuid As Guid = VorFRM.DruckSpracheAktuell 

                Dim grusswort, ansprechpartner, bearbeiter, signatur As String 

                '>>> Anrede, Titel, Nachname 

                ansprechpartner = FktF.HoleAnsprechpartnerVorgangLL(sprachGuid, C.ToStringX(VorFRM.AktuelleGUID), False) 

                '>>> Grusswort in den Druck-Sprachtexten hinterlegt, hier als Nr. 80002, z.B. 'Guten Tag' 

                grusswort = Drucken.Text(sprachGuid, 80002) 

                '>>> 1. Teil des Body-Textes zuweisen 

                e.EMailBodyOhneSignatur = grusswort & ansprechpartner 

                '>>> Signatur mit Bearbeiter, Anschrift, etc. 

                bearbeiter = ">>> Bearbeiter <<<" 

                '>>> Signatur in den Druck-Sprachtexten hinterlegt, hier als Nr. 80001, z.B.: 

                ' 

                ' {SACHBEARBEITER} 

                ' 

                ' Muster GmbH' 

                ' Musterstr. 34 

                ' 45678 Musterhausen 

                ' 

                signatur = Drucken.Text(VorFRM.DruckSpracheAktuell, 80001) 

                Dim tmpBearbeiter As Anwender = Nothing 

                tmpBearbeiter = New Anwender(GV.User.GUID) 

                '>>> Unterschriften-Text / Name des Bearbeiters holen 

                If tmpBearbeiter.OK Then 

                    If tmpBearbeiter.UnterschriftenText.Trim <> "" Then 

                        bearbeiter = tmpBearbeiter.UnterschriftenText 

                    Else 

                        If tmpBearbeiter.NameLang <> "" Then bearbeiter = tmpBearbeiter.NameLang 

                    End If 

                Else 

                    If GV.User.UnterschriftenText.Trim <> "" Then 

                        bearbeiter = GV.User.UnterschriftenText 

                    Else 

                        If GV.User.NameLang.Trim <> "" Then bearbeiter = GV.User.NameLang 

                    End If 

                End If 

                signatur = signatur.Replace("{SACHBEARBEITER}", bearbeiter) 

                '>>> 2. Teil des Body-Textes zuweisen 

                e.EMailBodySignatur = signatur 

            End If 

              End Sub 

#End Region

LLErweitereDataSource

Das Ereignis 'LLErweitereDataSource' wird beim Verarbeiten eines Reports (Vorschau, Drucken, Fax, E-Mail, Export) ausgelöst, sofern am Report das Häkchen 'Optionale Datenquelle' aktiviert ist. Grundsätzlich bezieht sich diese Funktionalität also auf die verschiedenen Möglichkeiten hinter den Buttons 'Drucken' und 'Liste' der Aktions-Toolbar. Mit ihr kann die durch den easyWinArt-Standard für den Report vorgegebene Datenquelle erweitert werden, so dass zusätzlich eigene Daten für den Druck unmittelbar aus der SDK-Programmierung in VB.NET kommen. Die  wird dabei ersetzt. Soll statt dessen die ursprüngliche Datenquelle des easyWinArt-Standards komplett ersetzt werden, so ist dazu der Trigger 'LLSetzeDataSource' zu verwenden.

Dieses Ereignis wird weiterhin nur dann ausgelöst, wenn das Häkchen 'Erweiterte Datenquelle / VAR' nicht angehakt ist. Für den anderen Fall steht der Trigger 'LLErweitereDataSourceErweitert' zur Verfügung.

Während sich hinter dem 'sender' das Basisformular verbirgt, aus dem der Druck gestartet wurde, bietet die EventArgs-Klasse e vielseitige Funktionen an, von denen 'e.LL' das wichtigste ist, da hierüber z.B. auf Datenquelle Einfluss genommen werden kann.

Beispiel folgt in Kürze ...

LLErweitereDataSourceErweitert

Das Ereignis 'LLErweitereDataSourceErweitert' wird beim Verarbeiten eines Reports (Vorschau, Drucken, Fax, E-Mail, Export) ausgelöst, sofern am Report das Häkchen 'Optionale Datenquelle' aktiviert ist. Grundsätzlich bezieht sich diese Funktionalität also auf die verschiedenen Möglichkeiten hinter den Buttons 'Drucken' und 'Liste' der Aktions-Toolbar. Mit ihr kann die durch den easyWinArt-Standard für den Report vorgegebene Datenquelle erweitert werden, so dass zusätzlich eigene Daten für den Druck unmittelbar aus der SDK-Programmierung in VB.NET kommen. Die  wird dabei ersetzt. Soll statt dessen die ursprüngliche Datenquelle des easyWinArt-Standards komplett ersetzt werden, so ist dazu der Trigger 'LLSetzeDataSourceErweitert' zu verwenden.

Dieses Ereignis wird weiterhin nur dann ausgelöst, wenn das Häkchen 'Erweiterte Datenquelle / VAR' angehakt ist. Für den anderen Fall steht der Trigger 'LLErweitereDataSource' zur Verfügung.

Während sich hinter dem 'sender' das Basisformular verbirgt, aus dem der Druck gestartet wurde, bietet die EventArgs-Klasse e vielseitige Funktionen an, von denen 'e.LL' das wichtigste ist, da hierüber z.B. auf Datenquelle Einfluss genommen werden kann.

In unterem Beispiel wird für einen bestimmten Report zur Datenquelle eine Spalte ergänzt und diese mit den jeweils zu den bereits vorhandenen Zeilen passenden Daten gefüllt.


VB.NET: LLErweitereDataSourceErweitert - Beispiel 1

  

#Region " TriggerFormFramework_LLErweitereDataSourceErweitert-Ereignis " 

        Private Sub TriggerFormFramework_LLErweitereDataSourceErweitert(sender As Object, e As FormFrameworkLLEventArgs) Handles Me.LLErweitereDataSourceErweitert 

                '>>> D I S P O S I T I O N 

                If TypeOf sender Is DispositionBedarfFRM Then 

                    Dim dispoFRM As DispositionBedarfFRM 

                    dispoFRM = CType(sender, DispositionBedarfFRM

                    '>>> Nur für bestimmten Report, wird über Druck-Parameter 5 sichergestellt 

                    If e.LL.EwaDruckParameter5 = "Test123" Then 

                        '>>> Datenquelle des easyWinArt-Standards von List&Label holen 

                        Dim quellDS As DataSet = CType(e.LL.DataSource, DataSet

                        Dim quellTBL As DataTable = quellDS.Tables(0) 

                        '>>> Neue Spalte in Datenquelle von List&Label ergänzen 

                        Dim bestLiefertermin As New DataColumn 

                        bestLiefertermin.ColumnName = "A_BestätigterLieferterminPosition" 

                        bestLiefertermin.DataType = GetType(System.DateTime

                        quellTBL.Columns.Add(bestLiefertermin) 

                        '>>> String mit GUIDs aller Positionen bilden, für die bestätigte Liefertermine geholt werden müssen 

                        Dim inString As String = "" 

                        For Each row As DataRow In quellTBL.Rows 

                            If Not row(TBL.DispositionBedarf.TBL & "_" & TBL.DispositionBedarf.AuftragsPositionGUID) Is DBNull.Value Then 

                                Dim posGUID As Guid = C.ToGuidX(row(TBL.DispositionBedarf.TBL & "_" & TBL.DispositionBedarf.AuftragsPositionGUID)) 

                                If posGUID <> Guid.Empty Then 

                                    inString &= "'" & posGUID.ToString & "'," 

                                End If 

                            End If 

                        Next 

                        inString = inString.Trim(","c

                        '>>> Liefertermine in DataTable holen 

                        Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                        Dim tmpSQL As String = "SELECT DISTINCT " & TBL.VorgangsPosition.GUID & _ 

                                                    ", " & TBL.VorgangsPosition.LieferterminBestätigtDT & _ 

                                               " FROM " & TBL.VorgangsPosition.TBL & _ 

                                               " WHERE " & TBL.VorgangsPosition.GUID & " IN (" & inString & ")" 

                        Dim bestätigteLiefertermineTBL As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.VorgangsPosition.TBL) 

                        '>>> Datenquelle von List&Label durchlaufen und neue Spalte mit Inhalt füllen 

                        For Each quellZeile As DataRow In quellTBL.Rows 

                            If Not quellZeile(TBL.DispositionBedarf.TBL & "_" & TBL.DispositionBedarf.AuftragsPositionGUID) Is DBNull.Value Then 

                                Dim posGUID As Guid = C.ToGuidX(quellZeile(TBL.DispositionBedarf.TBL & "_" & TBL.DispositionBedarf.AuftragsPositionGUID)) 

                                If posGUID <> Guid.Empty Then 

                                    '>>> Inhalt aus der Liefertermin-Tabelle holen 

                                    Dim ergebnisse() As DataRow 

                                    ergebnisse = bestätigteLiefertermineTBL.Select(TBL.VorgangsPosition.GUID & " = '" & posGUID.ToString & "'"

                                    For Each terminZeile As DataRow In ergebnisse 

                                        If Not terminZeile(TBL.VorgangsPosition.LieferterminBestätigtDT) Is DBNull.Value Then 

                                            quellZeile("A_BestätigterLieferterminPosition") = terminZeile(TBL.VorgangsPosition.LieferterminBestätigtDT) 

                                        End If 

                                    Next 

                                End If 

                            End If 

                        Next 

                    End If 

                End If 

                End Sub 

#End Region

LLSetzeDataSource

Das Ereignis 'LLSetzeDataSource' wird beim Verarbeiten eines Reports (Vorschau, Drucken, Fax, E-Mail, Export) ausgelöst, sofern am Report das Häkchen 'Optionale Datenquelle' aktiviert ist. Grundsätzlich bezieht sich diese Funktionalität also auf die verschiedenen Möglichkeiten hinter den Buttons 'Drucken' und 'Liste' der Aktions-Toolbar. Mit ihr können für den Report eigene Datenquellen eingestellt werden, so dass die Daten für den Druck unmittelbar aus der Programmierung in VB.NET kommen. Die ursprüngliche Datenquelle des easyWinArt-Standards wird dabei ersetzt. Soll diese lediglich erweitert werden, so ist dazu der Trigger 'LLErweitereDataSource' zu verwenden.

Dieses Ereignis wird weiterhin nur dann ausgelöst, wenn das Häkchen 'Erweiterte Datenquelle / VAR' nicht angehakt ist. Für den anderen Fall steht der Trigger 'LLSetzeDataSourceErweitert' zur Verfügung.

Während sich hinter dem 'sender' das Basisformular verbirgt, aus dem der Druck gestartet wurde, bietet die EventArgs-Klasse 'e' vielseitige Funktionen an, von denen 'e.LL' das wichtigste ist, da hierüber z.B. die Datenquelle eingestellt wird. Als Datenquelle kann alles verwendet werden, wofür im Report-Designer ein Datenprovider verfügbar ist, z.B. DataTable, DataSet, DataView, generische Listen, usw.

Beispiel 1: Für einen bestimmten Report der Menüfunktion 'Adressen' wird eine optionale Datenquelle als DataTable bereitgestellt. Die Daten werden dafür aus der Datenbank selektiert.

Beispiel 2: Es wird eine generische Liste erstellt und diese dann als Datenquelle einem bestimmten Report der Menüfunktion 'Artikel' bereitgestellt.

Beispiel 3: Hier wird ein DataSet mit zwei Tabellen, welche miteinander verknüpft sind, als Datenquelle für einen bestimmten Report verwendet. Durch die Verknüpfung kann im Designer eine Tabelle mit Unter-Tabelle realisiert werden.


VB.NET: LLSetzeDataSource - Beispiel 1

  

#Region " TriggerFormFramework_LLSetzeDataSource-Ereignis " 

        Private Sub TriggerFormFramework_LLSetzeDataSource(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSource 

                '>>> A D R E S S E N - Menüfunktion 

                If TypeOf sender Is AdressenFRM Then 

                    '>>> Diese Datenbindung nur für den Report-Eintrag mit dem entsprechenden Wert im DruckParameter1 

                    If e.LL.EwaDruckParameter1 = "Meine-Adress-Liste" Then 

                        '>>> Tabelle bilden mit den Daten 

                        Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                        Dim tmpSQL As String = "SELECT " & TBL.Adressen.AdressNummerINT & _ 

                                               ", " & TBL.Adressen.FirmenNameVC & _ 

                                               ", " & TBL.Adressen.OrtVC & _ 

                                               " FROM " & TBL.Adressen.TBL & _ 

                                               " WHERE " & TBL.Adressen.PlzVC & " LIKE '4%'" 

                        Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Adressen.TBL) 

                        '>>> Liste als Datenquelle dem Formular Artikel (Auslöser des Ereignisses) zuordnen 

                        e.LL.DataSource = tmpTable 

                    End If 

                End If 

               End Sub 

#End Region


VB.NET: LLSetzeDataSource - Beispiel 2

  

#Region " TriggerFormFramework_LLSetzeDataSource-Ereignis " 

        Private Sub TriggerFormFramework_LLSetzeDataSource(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSource 

                '>>> A R T I K E L 

                If TypeOf sender Is ArtikelFRM Then 

                    '>>> Diese Datenbindung nur für den Report-Eintrag mit dem entsprechenden Wert im DruckParameter1 

                    If e.LL.EwaDruckParameter1 = "Meine-Artikel-Liste" Then 

                        '>>> Beispiel-Generische-Liste erstellen 

                        Dim meineListe As New List(Of String

                        meineListe.Add("Auto 123"

                        meineListe.Add("Bahn 456"

                        '>>> Liste als Datenquelle dem Formular Artikel (Auslöser des Ereignisses) zuordnen 

                        e.LL.DataSource = meineListe 

                    End If 

                End If 

                End Sub 

#End Region


VB.NET: LLSetzeDataSource - Beispiel 3

  

#Region " TriggerFormFramework_LLSetzeDataSource-Ereignis " 

        Private Sub TriggerFormFramework_LLSetzeDataSource(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSource 

                '>>> V O R G A N G - Menüfunktion   

                If TypeOf sender Is VorgangFRM Then 

                    Dim vorFRM As VorgangFRM 

                    vorFRM = CType(sender, VorgangFRM

                    '>>> Diese Datenquelle nur für den Report mit dem Wort 'Terminliste' im DruckParameter1   

                    If e.LL.EwaDruckParameter1 = "Terminliste" Then 

                        '>>> String der GUIDs der aktuell in der Menüfunktion geöffneten Aufträge bilden 

                        Dim inString As String = "" 

                        For Each row As DataRow In vorFRM.BB.DataTableStandard.Rows 

                            inString &= "'" & C.ToStringX(row(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID)) & "'," 

                        Next 

                        inString = inString.TrimEnd(","c

                        '>>> Tabelle der aktuellen Menüfunktion kopieren, da die Original-Tabelle bereits ein eigenes Dataset hat 

                        Dim aufträgeTBL As DataTable = vorFRM.BB.DataTableStandard.Copy 

                        '>>> Dataset für Tabellen anlegen 

                        Dim ds As New DataSet("Datenquelle"

                        '>>> kopierte Tabelle mit Aufträgen dem Dataset hinzufügen 

                        ds.Tables.Add(aufträgeTBL) 

                        '>>> weitere Daten (zugehörige Bestellungen) aus einer Anwender-View holen und Tabelle bilden 

                        Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                        Dim tmpSQL As String = "SELECT * " & _ 

                                               " FROM " & "AV_BestellPosZuAufPos" & _ 

                                               " WHERE " & "AuftragsGUID" & " IN (" & inString & " )" 

                        Dim bestellungenTBL As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, "AuftragsBestellungen"

                        '>>> neue Tabelle vom eigenen Dataset lösen, damit es zum neuen Dataset hinzugefügt werden kann 

                        bestellungenTBL.DataSet.Tables.Remove(bestellungenTBL) 

                        '>>> Tabelle zum neuen Dataset hinzufügen 

                        ds.Tables.Add(bestellungenTBL) 

                        '>>> Daten der beiden im Dataset befindlichen Tabellen miteinander verknüpfen (1:n-Beziehung) 

                        Dim oberColumn As DataColumn = ds.Tables(TBL.Vorgang.TBL).Columns(TBL.Vorgang.TBL & "_" & TBL.Vorgang.GUID) 

                        Dim unterColumn As DataColumn = ds.Tables("AuftragsBestellungen").Columns("AuftragsGUID"

                        ds.Relations.Add("Rel_" & "AuftragsBestellungen", oberColumn, unterColumn) 

                        '>>> DataSet als Datenquelle dem Report zuweisen 

                        e.LL.DataSource = ds 

                    End If 

                End If 

        End Sub 

#End Region

LLSetzeDataSourceErweitert

Das Ereignis 'LLSetzeDataSourceErweitert' wird beim Verarbeiten eines Reports (Vorschau, Drucken, Fax, E-Mail, Export) ausgelöst, sofern am Report das Häkchen 'Optionale Datenquelle' aktiviert ist. Grundsätzlich bezieht sich diese Funktionalität also auf die verschiedenen Möglichkeiten hinter den Buttons 'Drucken' und 'Liste' der Aktions-Toolbar. Mit ihr können für den Report eigene Datenquellen eingestellt werden, so dass die Daten für den Druck unmittelbar aus der Programmierung in VB.NET kommen. Die ursprüngliche Datenquelle des easyWinArt-Standards wird dabei ersetzt. Soll diese lediglich erweitert werden, so ist dazu der Trigger 'LLErweitereDataSourceErweitert' zu verwenden.

Dieses Ereignis wird weiterhin nur dann ausgelöst, wenn das Häkchen 'Erweiterte Datenquelle / VAR' angehakt ist. Für den anderen Fall steht der Trigger 'LLSetzeDataSource' zur Verfügung.

Während sich hinter dem 'sender' das Basisformular verbirgt, aus dem der Druck gestartet wurde, bietet die EventArgs-Klasse e vielseitige Funktionen an, von denen 'e.LL' das wichtigste ist, da hierüber z.B. die Datenquelle eingestellt wird. Als Datenquelle kann alles verwendet werden, wofür im Report-Designer ein Datenprovider verfügbar ist, z.B. DataTable, DataSet, DataView, generische Listen, usw.

In unterem Beispiel wird für einen bestimmten Report der Menüfunktion 'Artikel' die Struktur-Stückliste gebildet, um weitere Informationen der Dispositionsmengen ergänzt und dann als Datenquelle übergeben.


VB.NET: LLSetzeDataSourceErweitert - Beispiel 1

  

#Region " TriggerFormFramework_LLSetzeDataSourceErweitert-Ereignis " 

        Private Sub TriggerFormFramework_LLSetzeDataSourceErweitert(ByVal sender As Object, ByVal e As FormFrameworkLLEventArgs) Handles Me.LLSetzeDataSourceErweitert 

                '>>> Bei Menüfunktion  A R T I K E L 

                If TypeOf sender Is ArtikelFRM Then 

                    Dim artFRM As ArtikelFRM 

                    artFRM = CType(sender, ArtikelFRM

                    '>>> Nur für einen bestimmten Report, der den Parameter entsprechend eingestellt hat 

                    If e.LL.EwaDruckParameter3.Contains("Dispomengen") Then 

                        Dim tmpColumn As DataColumn 

                        Dim zeile As DataRow 

                        Dim dispoOBJ As Dispo 

                        Dim stücklisteTBL As New DataTable 

                        '>>> Struktur-Stückliste des aktuellen Artikels holen 

                        stücklisteTBL = FktB.HoleStrukturStücklisteDT(StücklistenTyp.Fertigung, artFRM.AktuelleGUID) 

                        '>>> Drei Spalten an die geholte Tabelle ergänzen, um die weiteren Daten aufnehmen zu können 

                        tmpColumn = New DataColumn("FreierBestand", System.Type.GetType(DatenTypColumn.Double)) 

                        stücklisteTBL.Columns.Add(tmpColumn) 

                        tmpColumn = New DataColumn("BestellBestand", System.Type.GetType(DatenTypColumn.Double)) 

                        stücklisteTBL.Columns.Add(tmpColumn) 

                        tmpColumn = New DataColumn("DispositionsBestand", System.Type.GetType(DatenTypColumn.Double)) 

                        stücklisteTBL.Columns.Add(tmpColumn) 

                        '>>> In jeder Zeile die drei zusätzlichen Spalten um Dispo-Daten ergänzen 

                        For Each zeile In stücklisteTBL.Rows 

                            dispoOBJ = New Dispo(C.ToGuidX(zeile(TBL.Artikel.GUID)), False

                            zeile("FreierBestand") = dispoOBJ.FreierBestand 

                            zeile("BestellBestand") = dispoOBJ.BestellBestand 

                            zeile("DispositionsBestand") = dispoOBJ.DispoBestand 

                        Next 

                        e.LL.DataSource = stücklisteTBL 

                    End If 

                End If 

        End Sub 

#End Region

NachDatensatzChangedMultiEreignis

Beschreibung folgt.

Beispiel 1: Bei jeder Menüfunktion soll, sofern es die Registerkarte Bemerkung mit der Bemerkungs-Textbox gibt, in dieser Textbox ganz nach unten gescrollt werden, so dass man beim wechseln auf diese Registerkarte sogleich den neusten (untersten) Text zu sehen bekommt.


VB.NET: NachDatensatzChangedMultiEreignis - Beispiel 1

  

#Region " TriggerFormFramework_NachDatensatzChangedMultiEreignis-Ereignis " 

        Private Sub TriggerFormFramework_NachDatensatzChangedMultiEreignis(ByVal sender As Object, ByVal e As FormFrameworkMultiEventArgs) Handles Me.NachDatensatzChangedMultiEreignis 

            Try 

                '>>> Bei allen Menüfunktionen 

                If TypeOf sender Is BasisForm Then 

                    Dim fenster As BasisForm 

                    fenster = CType(sender, BasisForm

                    Dim tabPageBemerkung As TabPage 

                    If fenster.TabControlBasis Is Nothing Then Exit Sub 

                    Dim registerkarten As EwaTabControl = fenster.TabControlBasis 

                    If registerkarten.TabPages Is Nothing Then Exit Sub 

                    If registerkarten.TabPages.Count = 0 Then Exit Sub 

                    If registerkarten.TabPages.ContainsKey("TabPageBemerkung") Then 

                        tabPageBemerkung = registerkarten.TabPages.Item("TabPageBemerkung"

                        If tabPageBemerkung.Controls.ContainsKey("GroupBoxBemerkung") Then 

                            Dim tmpGroupBox As EwaGroupBox = CType(tabPageBemerkung.Controls("GroupBoxBemerkung"), EwaGroupBox

                            If tmpGroupBox.Controls.ContainsKey("TextBoxBemerkung") Then 

                                Dim textBoxBemerkung As EwaTextBox = CType(tmpGroupBox.Controls("TextBoxBemerkung"), EwaTextBox

                                textBoxBemerkung.Select(textBoxBemerkung.TextLength, 0) 

                                textBoxBemerkung.ScrollToCaret() 

                            End If 

                        End If 

                    End If 

                End If 

            Catch ex As Exception 

                Throw New EwaException(ex) 

            End Try 

        End Sub 

#End Region

NachKopieren

Dieses Ereignis wird ausgelöst, nachdem der Anwender auf den Button 'Kopieren' geklickt hat bzw. wenn die Klasse 'FcKopieren' durch Programmierung ausgeführt wird ('CType(New FcKopieren(Me), IEwaFunktion).Run()'). Es kann sinnvoll eingesetzt werden, um Voreinstellungen oder vordefinierte Werte zu setzen, sobald ein Datensatz vom Anwender kopiert wird.

Beispiel 1: Nach dem Kopieren eines Artikels soll eine Individual-Variablen-Integerbox auf 0 gesetzt werden, da diese mit dem Kopieren sonst den Wert des kopierten Datensatzes annehmen würde.

Beispiel 2: Beim Kopieren einer Anfrage in der Beleg-Verwaltung soll die Projekt-Nr mitkopiert werden.


VB.NET: Nach Kopieren - Beispiel 1

  

#Region " TriggerFormFramework_NachKopieren-Ereignis " 

        Private Sub TriggerFormFramework_NachKopieren(sender As Object, e As FormFrameworkEventArgs) Handles Me.NachKopieren 

            Try 

                '>>> Nur bei MenüFunktion  A R T I K E L    

                If TypeOf sender Is ArtikelFRM Then 

                    Dim artFRM As ArtikelFRM = CType(sender, ArtikelFRM

                    '>>> IntegerBox der Individual-Variable suchen 

                    For Each ctrl In artFRM.PanelIndVar.Controls 

                        If TypeOf ctrl Is EwaIntegerBox Then 

                            Dim tmpIntegerBox As EwaIntegerBox = CType(ctrl, EwaIntegerBox

                            '>>> gewünschte IntegerBox über den Namen der Spalte in der Datenbank identifizieren 

                            If tmpIntegerBox.EwaBindungsSpalte = "IndVarInterneArtikelnummer" Then 

                                '>>> eine 0 in die IntegerBox setzen 

                                artFRM.BasisFkt.SetzeControl(tmpIntegerBox, 0) 

                            End If 

                        End If 

                    Next 

                End If 

            Catch ex As Exception 

                Throw New EwaException(ex) 

            End Try 

        End Sub 

#End Region


VB.NET: Nach Kopieren - Beispiel 2

  

#Region " TriggerFormFramework_NachKopieren-Ereignis " 

        Private Sub TriggerFormFramework_NachKopieren(sender As Object, e As FormFrameworkEventArgs) Handles Me.NachKopieren 

            '>>> Bei Menüfunktion  V O R G A N G 

            If TypeOf sender Is VorgangFRM Then 

                Dim vorFRM As VorgangFRM = CType(sender, VorgangFRM

                '>>> Nur bei Anfrage 

                If vorFRM.BelegTypGUID = BT.EkAnfrage Then 

                    '>>> Beim Kopieren einer Anfrage soll die Projekt-Nr mitgenommen werden 

                    Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                    Dim projektNrQuellAnfrage As Integer 

                    Dim tmpSQL As String = "SELECT " & TBL.Projekte.ProjektNummerINT & _ 

                                           " FROM " & TBL.Projekte.TBL & _ 

                                           " INNER JOIN " & TBL.Vorgang.TBL & " ON " & TBL.Vorgang.TBL & "." & TBL.Vorgang.ProjektGUID & _ 

                                           " = " & TBL.Projekte.TBL & "." & TBL.Projekte.GUID & _ 

                                           " WHERE " & TBL.Vorgang.TBL & "." & TBL.Vorgang.GUID & " = '" & e.AktuelleVorherigeGUID.ToString & "'" 

                    Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Projekte.TBL) 

                    If tmpTable.Rows.Count > 0 Then 

                        projektNrQuellAnfrage = C.ToIntegerX(tmpTable.Rows(0)(TBL.Projekte.ProjektNummerINT)) 

                        vorFRM.BasisFkt.SetzeControl(vorFRM.IntegerBoxProjektNummer_ProjekteProjekt, projektNrQuellAnfrage) 

                    End If 

                End If 

            End If 

        End Sub 

#End Region

NachLoad

Dieses Ereignis wird zum Ende des Ladevorgangs einer Form (einer easyWinArt-Menüfunktion) hin angezeigt. Das Microsoft-Ereignis 'Form.Load' wurde erweitert, so dass noch einige easyWinArt-spezifische Funktionen und Prozeduren durchlaufen werden. In diesem Rahmen wird ziemlich am Ende dann das Ereignis 'NachLoad' angestoßen.

Im unteren ersten Beispiel soll nach dem Laden der Vorgangs-Positionen automatisch das Anlegen einer neuen Position gestartet werden, sofern noch keine Positionen vorhanden sind. Es wird letztendlich die Funktion aufgerufen, welche auch beim Betätigen des Buttons 'Neu' ausgeführt wird. Weil aber der Zeitpunkt des 'NachLoad' noch zu früh ist und 'Neu' noch nicht betätigt werden kann, wird hier auf einen Timer zurückgegriffen, welcher diese Aktion 250 Millisekunden nach dem 'NachLoad' ausführt.

Das zweite Beispiel demonstriert, wie der Button 'Beleg manuell auf erledigt setzen' für alle Anwender ohne das Häkchen 'Admin' versteckt wird. Dazu wird dieser in ein temporäres ToolStrip verschoben, welches nicht auf dem Fenster sichtbar ist. So können alle Logiken, die standardmäßig auf den Button ausgeführt werden, weiterlaufen. Bei Bedarf oder in gewissen Fällen kann er auch wieder eingeblendet werden.


VB.NET: NachLoad - Beispiel 1

  

#Region " TriggerFormFramework_NachLoad-Ereignis " 

        Private Sub TriggerFormFramework_NachLoad(sender As Object, e As FormFrameworkEventArgs) Handles Me.NachLoad 

                '>>> Bei Menüfunktion  V O R G A N G S P O S I T I O N 

                If TypeOf sender Is VorgangsPositionFRM Then 

                    Dim posFRM As VorgangsPositionFRM 

                    posFRM = CType(sender, VorgangsPositionFRM

                    '>>> Nur, wenn noch keine Positionen da sind 

                    If posFRM.DataGridStandard.VisibleRowCount = 0 Then 

                        '>>> Timer erzeugen und starten, der den Neu-Button betätigt 

                        Dim posTimer As New Timer 

                        '>>> Tag wird als Übergabe der Form verwendet 

                        posTimer.Tag = posFRM 

                        posTimer.Interval = 250 

                        posTimer.Start() 

                        AddHandler posTimer.Tick, AddressOf NeuePositionBeiPositionenFRM 

                    End If 

                End If 

        End Sub 

#End Region 

 

#Region " Private Sub: NeuePositionBeiPositionenFRM (Timer stoppen und Button 'Neu' betätigen) " 

        Private Sub NeuePositionBeiPositionenFRM(sender As Object, e As System.EventArgs

                Dim posTimer As Timer 

                Dim posFRM As VorgangsPositionFRM 

                posTimer = CType(sender, Timer

                posFRM = CType(posTimer.Tag, VorgangsPositionFRM

                posTimer.Stop() 

                posTimer.Dispose() 

                '>>> Neu-Button betätigen 

                CType(New FcNeu(posFRM), IEwaFunktion).Run() 

        End Sub 

#End Region


VB.NET: NachLoad - Beispiel 2

  

#Region " TriggerFormFramework_NachLoad-Ereignis " 

        Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad 

                '>>> Bei Menüfunktion  V O R G A N G  

                If TypeOf sender Is VorgangFRM Then 

                    Dim vorFRM As VorgangFRM 

                    vorFRM = DirectCast(sender, VorgangFRM

                    '>>> Button "Manuell Erledigt" ausblenden für Nicht-Admins  

                    If Not GV.User.Admin Then 

                        Dim tempStrip As New ToolStrip 

                        tempStrip.Items.Add(vorFRM.ToolBarButtonManuelErledigt) 

                    End If 

                End If 

        End Sub 

#End Region

NachNeu

Dieses Ereignis wird ausgelöst, nachdem der Anwender auf den Button 'Neu' geklickt hat bzw. wenn die Klasse 'FcNeu' durch Programmierung ausgeführt wird ('CType(New FcNeu(Me), IEwaFunktion).Run()'). Es kann sinnvoll eingesetzt werden, um Voreinstellungen oder vordefinierte Werte zu setzen, sobald ein neuer Datensatz vom Anwender angelegt wird.

Im unteren Beispiel soll im Kassenbuch das Fibu-Konto bei einem neuen Kassenbuch-Eintrag zunächst auf 'leer' stehen, damit man gezwungen ist, ein Fibu-Konto auszuwählen.


VB.NET: NachNeu - Beispiel 1

  

#Region " TriggerFormFramework_NachNeu-Ereignis " 

        Private Sub TriggerFormFramework_NachNeu(ByVal sender As Object, ByVal e As FormFrameworkNeuEventArgs) Handles Me.NachNeu 

                If TypeOf sender Is FibuKassenbuchFRM Then 

                    Dim kassenbuchFRM As FibuKassenbuchFRM 

                    kassenbuchFRM = CType(sender, FibuKassenbuchFRM) 

                    '>>> Inhalt der comboBox auf den ersten Wert (leer) setzen 

                    kassenbuchFRM.ComboBoxKontoNummer_FibuKontenrahmenBuchung.SelectedIndex = 0 

                End If 

        End Sub 

#End Region

NachSpeichern

Dieses Ereignis wird ausgelöst, nachdem der Anwender auf den Button 'Speichern' geklickt hat bzw. wenn die Klasse 'FcSpeichern' durch Programmierung ausgeführt wird ('CType(New FcSpeichern(Me), IEwaFunktion).Run()') und der Speichervorgang an seinem Ende angekommen ist. Es kann sinnvoll eingesetzt werden, um nach dem Speichern eine Prüfung durchzuführen oder den gespeicherten Datensatz um zusätzliche Daten zu ergänzen.

Beispiel 1: Nach dem Kopieren eines Artikels werden die Fremdsprachen-Texte (Kurz-Bezeichnung, Lang-Bezeichnung, Bezeichnung Verkauf, Bezeichung Einkauf, Bezeichnung Fertigung) vom Quell-Artikel an den kopierten Artikel mit übernommen.


VB.NET: NachSpeichern - Beispiel 1

  

#Region " TriggerFormFramework_NachSpeichern-Ereignis " 

        Private Sub TriggerFormFramework_NachSpeichern(sender As Object, e As FormFrameworkSpeichernEventArgs) Handles Me.NachSpeichern 

                '>>> Nur bei Menü-Funktion A R T I K E L   

                If TypeOf sender Is ArtikelFRM Then 

                    If e.SpeicherungsTyp = SpeichernTyp.Kopieren Then 

                        '>>> Temporäre Tabelle erstellen mit den Staffelpreisen des Quell-Artikels   

                        Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                        Dim tmpSQL As String = "SELECT " & TBL.Artikel.TextNrBezeichnungKurzINT & _ 

                                               ", " & TBL.Artikel.TextNrBezeichnungLangINT & _ 

                                               ", " & TBL.Artikel.TextNrBezeichnungEinkaufINT & _ 

                                               ", " & TBL.Artikel.TextNrBezeichnungFertigungINT & _ 

                                               ", " & TBL.Artikel.TextNrBezeichnungVerkaufINT & _ 

                                               " FROM " & TBL.Artikel.TBL & _ 

                                               " WHERE " & TBL.Artikel.GUID & " = @ArtikelGUID " 

                        tmpDBZ.LöscheParameter() 

                        tmpDBZ.AddFelder("ArtikelGUID", e.AktuelleVorherigeGUID, EwaSQL.UniqueIdentifier) 

                        Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.ArtikelStaffel.TBL) 

                        '>>> Sprachtexte kopieren 

                        '>>> B e g i n n - T r a n s a k t i o n : 

                        Using transactionOBJ As TransactionScope = Fkt.SetzeTransactionScope 

                            KopiereSprachText(TBL.Artikel.TextNrBezeichnungKurzINT, tmpTable, e.AktuelleGUID) 

                            KopiereSprachText(TBL.Artikel.TextNrBezeichnungLangINT, tmpTable, e.AktuelleGUID) 

                            KopiereSprachText(TBL.Artikel.TextNrBezeichnungEinkaufINT, tmpTable, e.AktuelleGUID) 

                            KopiereSprachText(TBL.Artikel.TextNrBezeichnungFertigungINT, tmpTable, e.AktuelleGUID) 

                            KopiereSprachText(TBL.Artikel.TextNrBezeichnungVerkaufINT, tmpTable, e.AktuelleGUID) 

                            '>>> C O M M I T : 

                            If transactionOBJ IsNot Nothing Then transactionOBJ.Complete() 

                            '>>> E n d e - T r a n s a k t i o n : 

                        End Using 

                        '>>> Datensatz aktualisieren: 

                        FktF.AktualisiereAktuellenDatensatz(e.BasisFRM, True, True

                    End If 

                End If 

        End Sub 

#End Region 

 

#Region " Private Sub: KopiereSprachText () " 

        Private Sub KopiereSprachText(SpaltenName As String, TmpTBL As DataTable, AktuelleGuid As Guid

                Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                If C.ToIntegerX(TmpTBL.Rows(0)(SpaltenName)) > 0 Then 

                    Dim freieSprachtext As Integer 

                    '>>> Nächste freie Nummer holen für die Texte des Ziel-Artikels 

                    freieSprachtext = tmpDBZ.HoleErsteFreieIntegerSpalte(TBL.SprachTextNummern.TextNummerINT, TBL.SprachTextNummern.TBL, 1000001) 

                    '>>> Texte des Quell-Artikels holen 

                    Dim befehlFürZuKopierendeSprachtexteSQL As String = "SELECT " & TBL.SprachTextNummern.SprachKennzeichenGUID & _ 

                                                ", " & TBL.SprachTextNummern.SprachTextVC & _ 

                                           " FROM " & TBL.SprachTextNummern.TBL & _ 

                                           " WHERE " & TBL.SprachTextNummern.TextNummerINT & " = " & C.ToIntegerX(TmpTBL.Rows(0)(SpaltenName)) 

                    Dim zuKopierendeSprachtexteTBL As DataTable = tmpDBZ.BildeDataTableSQL(befehlFürZuKopierendeSprachtexteSQL, TBL.SprachTextNummern.TBL) 

                    '>>> Texte für neuen Artikel speichern 

                    For Each row As DataRow In zuKopierendeSprachtexteTBL.Rows 

                        '>>> INSERT: 

                        tmpDBZ.LöscheFelder() 

                        tmpDBZ.AddFelder(TBL.SprachTextNummern.SprachKennzeichenGUID, C.ToGuidX(row(TBL.SprachTextNummern.SprachKennzeichenGUID)), EwaSQL.UniqueIdentifier) 

                        tmpDBZ.AddFelder(TBL.SprachTextNummern.SprachTextVC, C.ToStringX(row(TBL.SprachTextNummern.SprachTextVC)), EwaSQL.NVarChar) 

                        tmpDBZ.AddFelder(TBL.SprachTextNummern.TextNummerINT, freieSprachtext, EwaSQL.Integer) 

                        tmpDBZ.InsertDatensatz(TBL.SprachTextNummern.TBL) 

                        '>>> UPDATE: 

                        tmpDBZ.LöscheFelder() 

                        tmpDBZ.AddFelder(SpaltenName, freieSprachtext, EwaSQL.Integer) 

                        tmpDBZ.UpdateDatensatz(TBL.Artikel.TBL, AktuelleGuid) 

                    Next 

                End If 

        End Sub 

#End Region

SpeichernOK

Das Ereignis 'SpeichernOK' wird direkt nach dem eigentlichen Speichern eines Datensatzes ausgeführt. In der Reihenfolge erfolgt dies nach dem Ereignis 'StartSpeichern' und vor dem Ereignis 'NachSpeichern'. Es wird nur durchlaufen, wenn das Speichern ohne Fehler durchgeführt worden ist. Ein wichiger Unterschied zum 'NachSpeichern' besteht darin, dass sich über die Eigenschaft 'SpeicherungsTyp' des Formulars einer Menüfunktion (z.B. 'ArtFRM.SpeicherungsTyp') noch erkennen lässt, aus welchem Modus heraus gespeichert worden ist, also z.B. nach 'Neu', nach 'Kopieren' oder einfach nach 'Ändern' eines bereits vorhandenen Datensatzes.

In nachfolgendem Beispiel 1 sollen bei neu angelegten Artikeln ein bestimmter Artikel-Lagerort voreingestellt werden und bei kopierten Artikeln immer alle Lager-Orte des Quell-Artikels übernommen werden, sobald der Artikel gespeichert wird.

Das Beispiel 2 ist ähnlich aufgebaut, hier werden beim Kopieren eines Artikels alle neutralen Staffelpreise mitkopiert, sobald der neue Artikel gespeichert wird.


VB.NET: SpeichernOK - Beispiel 1

  

#Region " TriggerFormFramework_SpeichernOK-Ereignis " 

        Private Sub TriggerFormFramework_SpeichernOK(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.SpeichernOK 

                '>>> A R T I K E L  

                If TypeOf sender Is ArtikelFRM Then 

                    Dim ArtFRM As ArtikelFRM 

                    Dim lagerorteTable As New DataTable 

                    Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                    Dim quellArtikel, kopierterArtikel As Guid 

                    ArtFRM = DirectCast(sender, ArtikelFRM

                    '>>> nur bei neu angelegten oder durch Kopie neu angelegten Artikeln  

                    If ArtFRM.SpeicherungsTyp = SpeichernTyp.Neu Or ArtFRM.SpeicherungsTyp = SpeichernTyp.Kopieren Then 

                        kopierterArtikel = e.AktuelleGUID 

                        '>>> Für neue Artikel bestimmten Lagerort verwenden 

                        If ArtFRM.SpeicherungsTyp = SpeichernTyp.Neu Then 

                            Dim tmpRow As DataRow 

                            lagerorteTable.Columns.Add(New DataColumn(TBL.ArtikelLagerOrte.ArtikelGUID, Type.GetType("System.Guid"))) 

                            lagerorteTable.Columns.Add(New DataColumn(TBL.ArtikelLagerOrte.LagerOrtGUID, Type.GetType("System.Guid"))) 

                            lagerorteTable.Columns.Add(New DataColumn(TBL.ArtikelLagerOrte.DefaultMagazinGUID, Type.GetType("System.Guid"))) 

                            lagerorteTable.Columns.Add(New DataColumn(TBL.ArtikelLagerOrte.HauptArtikelLagerOrtBIT, Type.GetType("System.Boolean"))) 

                            tmpRow = lagerorteTable.NewRow 

                            lagerorteTable.Rows.Add(tmpRow) 

                            tmpRow(0) = kopierterArtikel 

                            tmpRow(1) = New Guid("daa8d692-3e6a-4ef5-8655-b633b57a7d93") '>>> GUID des Lager-Ortes 

                            tmpRow(2) = New Guid("26bb2ef0-7c5d-4af7-9d9b-9b2a96663f09") '>>> GUID des Lager-Magazins 

                            tmpRow(3) = True '>>> Standard-Artikel-Lagerort 

                        End If 

                        '>>> Für kopierte Artikel die Artikel-Lagerorte des Quell-Artikels verwenden 

                        If ArtFRM.SpeicherungsTyp = SpeichernTyp.Kopieren Then 

                            quellArtikel = e.AktuelleVorherigeGUID 

                            '>>> Temporäre Tabelle mit den Artikel-Lagerorten des Quell-Artikels erstellen  

                            Dim tmpSQL As String = "SELECT " & TBL.ArtikelLagerOrte.LagerOrtGUID & _ 

                                                        ", " & TBL.ArtikelLagerOrte.DefaultMagazinGUID & _ 

                                                        ", " & TBL.ArtikelLagerOrte.HauptArtikelLagerOrtBIT & _ 

                                                   " FROM " & TBL.ArtikelLagerOrte.TBL & _ 

                                                   " WHERE " & TBL.ArtikelLagerOrte.ArtikelGUID & " = @Artikel " 

                            tmpDBZ.LöscheParameter() 

                            tmpDBZ.AddFelder("Artikel", quellArtikel, EwaSQL.UniqueIdentifier) 

                            lagerorteTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.ArtikelLagerOrte.TBL) 

                        End If 

                        '>>> Temporäre Tabelle mit den Artikel-Lagerorten des Quell-Artikels durchlaufen und jeweils für den kopierten Artikel übernehmen  

                        If lagerorteTable.Rows.Count > 0 Then 

                            Dim tmpRow As DataRow 

                            For Each tmpRow In lagerorteTable.Rows 

                                '>>> INSERT: Neuen Datensatz (Artikel-Lagerort) in Tabelle ArtikelLagerOrte einfügen  

                                tmpDBZ.LöscheFelder() 

                                tmpDBZ.AddFelder(TBL.ArtikelLagerOrte.ArtikelGUID, kopierterArtikel, EwaSQL.UniqueIdentifier) 

                                tmpDBZ.AddFelder(TBL.ArtikelLagerOrte.LagerOrtGUID, tmpRow(TBL.ArtikelLagerOrte.LagerOrtGUID), EwaSQL.UniqueIdentifier) 

                                tmpDBZ.AddFelder(TBL.ArtikelLagerOrte.DefaultMagazinGUID, tmpRow(TBL.ArtikelLagerOrte.DefaultMagazinGUID), EwaSQL.UniqueIdentifier) 

                                tmpDBZ.AddFelder(TBL.ArtikelLagerOrte.HauptArtikelLagerOrtBIT, tmpRow(TBL.ArtikelLagerOrte.HauptArtikelLagerOrtBIT), EwaSQL.Bit) 

                                tmpDBZ.InsertDatensatz(TBL.ArtikelLagerOrte.TBL) 

                            Next 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region


VB.NET: SpeichernOK - Beispiel 2

  

#Region " TriggerFormFramework_SpeichernOK-Ereignis " 

        Private Sub TriggerFormFramework_SpeichernOK(ByVal sender As Object, ByVal e As FormFrameworkSTypeEventArgs) Handles Me.SpeichernOK 

                '>>> Nur bei Menü-Funktion A R T I K E L 

                If TypeOf sender Is ArtikelFRM Then 

                    If e.SpeicherungsTyp = SpeichernTyp.Kopieren Then

                        '>>> Temporäre Tabelle erstellen mit den Staffelpreisen des Quell-Artikels 

                        Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                        Dim tmpSQL As String = "SELECT " & TBL.ArtikelStaffel.KundeJNBIT & _ 

                                               ", " & TBL.ArtikelStaffel.MengeDBL & _ 

                                               ", " & TBL.ArtikelStaffel.PreisDBL & _ 

                                               ", " & TBL.ArtikelStaffel.RabattDBL & _ 

                                               ", " & TBL.ArtikelStaffel.AbzugDBL & _ 

                                               " FROM " & TBL.ArtikelStaffel.TBL & _ 

                                               " WHERE " & TBL.ArtikelStaffel.ArtikelGUID & " = @ArtikelGUID " 

                        tmpDBZ.LöscheParameter() 

                        tmpDBZ.AddFelder("ArtikelGUID", e.AktuelleVorherigeGUID, EwaSQL.UniqueIdentifier) 

                        Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.ArtikelStaffel.TBL) 

                        '>>> Wenn temporäre Tabelle nicht leer ist: Jede der Zeilen an den neuen Artikel übernehmen 

                        If tmpTable.Rows.Count > 0 Then 

                            Dim reihe As DataRow 

                            For Each reihe In tmpTable.Rows 

                                '>>> Reihe für neuen Artikel in die Datenbank einfügen 

                                tmpDBZ.LöscheFelder() 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.ArtikelGUID, e.AktuelleGUID, EwaSQL.UniqueIdentifier) 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.KundeJNBIT, reihe(TBL.ArtikelStaffel.KundeJNBIT), EwaSQL.Bit) 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.MengeDBL, reihe(TBL.ArtikelStaffel.MengeDBL), EwaSQL.Float) 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.PreisDBL, reihe(TBL.ArtikelStaffel.PreisDBL), EwaSQL.Float) 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.RabattDBL, reihe(TBL.ArtikelStaffel.RabattDBL), EwaSQL.Float) 

                                tmpDBZ.AddFelder(TBL.ArtikelStaffel.AbzugDBL, reihe(TBL.ArtikelStaffel.AbzugDBL), EwaSQL.Float) 

                                tmpDBZ.InsertDatensatz(TBL.ArtikelStaffel.TBL) 

                            Next 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region

SpeichernZusatzFelder

Wenn in einer Menüfunktion eigene Steuerelemente ergänzt werden, dann müssen diese auch in diesem Trigger eingebaut werden, damit der Inhalt beim Speichern eines Datensatzes mitgespeichert wird.


VB.NET: SpeichernZusatzFelder: Beispiel 1

  

#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

                '>>> Datenbindung für comboBox 'Verantwortlicher' 

                Dim comboboxVerantwortlicher As EwaComboBox 

                comboboxVerantwortlicher = CType(vorFRM.GroupBoxStichworte.Controls("A_comboboxVerantwortlicher"), EwaComboBox

                e.HauptDB.AddFelder(TBL.Vorgang.A_Verantwortlicher, comboboxVerantwortlicher.EwaWert, EwaSQL.UniqueIdentifier) 

            End If 

        End Sub 

#End Region

StartFormInit

Das Ereignis 'StartFormInit' wird beim Starten einer Menüfunktion zu einem sehr frühen zeitpunkt ausgelöst. Dies ist noch vor den Ereignissen 'StartForm' und  'NachLoad'. Es eignet sich z.B. für das Verhindern des Starts der Menüfunktion.

Beispiel 1: Im folgenden Beispiel soll die Menüfunktion 'Vorgangs-Belege' derart eingeschränkt werden, dass nur Anwender einer bestimmten Gruppe diese öffnen können.


VB.NET: StartFormInit - Beispiel 1

  

#Region " TriggerFormFramework_StartFormInit-Ereignis " 

        Private Sub TriggerFormFramework_StartFormInit(ByVal sender As Object, ByVal e As FormFrameworkStartFormInitEventArgs) Handles Me.StartFormInit 

                If e.FunktionsKennzeichenGUID = MF.Vorgang AndAlso 

                    Not GV.User.Gruppe = C.ToGuidX("a1c10eee-5fbe-4a9f-bdea-13f6d5b81328") Then 

                    FktF.Meldung("Sie besitzen nicht die notwendige Berechtigung zum Öffnen dieser Menüfunktion!"

                    e.FormBeenden = True 

                End If 

        End Sub 

#End Region

StartForm

Das Ereignis 'StartForm' wird beim Starten einer Menüfunktion ausgelöst. Es liegt nach dem Ereignis 'StartFormInit' und vor dem Ereignis 'NachLoad'. Es eignet sich entsprechend gut für gewisse Änderungen oder Einschränkungen an der Menüfunktion oder für Prüfungen, ob die Menüfuntkion überhaupt aufgerufen werden soll.

Im folgenden Beispiel soll die Menüfunktion 'Vorgangs-Belege' derart eingeschränkt werden, dass der Anwender nur seine eigenen Belege sehen kann, d.h. die ihn im Feld 'Bearbeiter' eingestellt haben.


VB.NET: StartForm - Beispiel 1

  

#Region " TriggerFormFramework_StartForm-Ereignis " 

        Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.StartForm 

                '>>> Nur 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 guidAktuellerAnwender, spalte, sqlWhereErgänzung As String 

                    guidAktuellerAnwender = C.ToStringX(GV.User.GUID) 

                    spalte = TBL.Vorgang.TBL & "." & TBL.Vorgang.BearbeiterGUID 

                    sqlWhereErgänzung = spalte & " = '" & guidAktuellerAnwender & "'" 

                    '>>> Damit beim Suchen / Aktualisieren etc. der neue SQL-Befehl gilt 

                    vorFRM.MenueFunktionenWerteSTR.SqlWhere = Fkt.AddOnWhereKlausel(vorFRM.MenueFunktionenWerteSTR.SqlWhere, sqlWhereErgänzung) 

                    vorFRM.MenueFunktionenWerteSTR.SqlStartWhere = Fkt.AddOnWhereKlausel(vorFRM.MenueFunktionenWerteSTR.SqlStartWhere, sqlWhereErgänzung) 

                    '>>> Damit die Menüfunktion schon beim allerersten Starten den neuen SQL-Befehl mit der Einschränkung hat 

                    vorFRM.SqlBefehl = Fkt.ErweiternWhereKlausel(vorFRM.SqlBefehl, sqlWhereErgänzung) 

                End If 

        End Sub 

#End Region

VorDrucken

Das Ereignis 'VorDrucken' wird ausgelöst, wenn die zentrale Drucken-Funktion im easyWinArt-Framework aufgerufen wird oder nachdem der Anwender auf den Button 'Drucken' geklickt hat bzw. wenn die Klasse 'FcDrucken' durch Programmierung ausgeführt wird ('CType(New FcDrucken(Me), IEwaFunktion).Run()'). Es läuft vor dem eigentlichen Druckvorgang, über den boolschen Parameter AktionAusführen kann das Drucken an dieser Stelle verhindert werden, als wäre es nicht gestartet worden. So können z.B. vor dem Drucken eines Datensatzes zusätzliche Plausibilitäten überprüft werden oder auch gewisse (Zwangs-)Einstellungen getroffen werden.

Beispiel 1: Der Druck einer Verkaufs-Rechnung mit einer Auslands-Adresse (Ländertyp der Adresse ist nicht 'Deutschland') ist nicht zugelassen.


VB.NET: VorDrucken - Beispiel 1

  

#Region " TriggerFormFramework_VorDrucken-Ereignis " 

        Private Sub TriggerFormFramework_VorDrucken(ByVal sender As Object, ByVal e As FormFrameworkEventArgs, ByRef AktionAusführen As Boolean) Handles Me.VorDrucken 

                '>>> Nur bei Menüfunktion  V o r g a n g 

                If TypeOf sender Is VorgangFRM Then 

                    Dim vorFRM As VorgangFRM = CType(sender, VorgangFRM

                    '>>> Nur bei Verkaufs-Rechnungen 

                    If vorFRM.BelegTypGUID = BT.VkRechnung Then 

                        '>>> Nur, wenn der Schlusstext fehlt 

                        If vorFRM.TextBoxSchlusstext.Text.Trim = "" Then 

                            '>>> Nur bei Rechnungen an nicht-deutsche Adressen 

                            Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                            Dim länderTyp As Guid = C.ToGuidX(tmpDBZ.HoleFeld(TBL.LänderKennzeichen.LänderTypGUID, TBL.LänderKennzeichen.TBL, TBL.LänderKennzeichen.GUID, vorFRM.TextBoxAdresseGUID.Text)) 

                            If länderTyp <> LT.Deutschland Then 

                                FktF.Meldung("Kein Druck erlaubt: Bitte für Auslands-Rechnungen den Schlusstext angeben.", vorFRM) 

                                '>>> Drucken wird abgebrochen 

                                AktionAusführen = False 

                            End If 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region

VorListe

Das Ereignis 'VorListe' wird ausgelöst, wenn die zentrale Liste-Funktion im easyWinArt-Framework aufgerufen wird oder nachdem der Anwender auf den Button 'Liste' geklickt hat bzw. wenn die Klasse 'FcListe' durch Programmierung ausgeführt wird ('CType(New FcListe(Me), IEwaFunktion).Run()'). Es läuft vor dem eigentlichen Listen-Druckvorgang, über den boolschen Parameter AktionAusführen kann das Drucken der Liste an dieser Stelle verhindert werden, als wäre es nicht gestartet worden. So können z.B. vor dem Drucken einer Liste zusätzliche Plausibilitäten überprüft werden.

VorSpeichern

Das Ereignis 'VorSpeichern' wird ausgelöst, wenn die zentrale Speichern-Funktion im easyWinArt-Framework aufgerufen wird oder nachdem der Anwender auf den Button 'Speichern' geklickt hat bzw. wenn die Klasse 'FcSpeichern' durch Programmierung ausgeführt wird ('CType(New FcSpeichern(Me), IEwaFunktion).Run()'). Es läuft vor dem eigentlichen Speichern, über den boolschen Parameter AktionAusführen kann das Speichern an dieser Stelle verhindert werden, als wäre es nicht gestartet worden. So können z.B. vor dem Speichern eines Datensatzes zusätzliche Plausibilitäten überprüft werden oder auch gewisse (Zwangs-)Einstellungen getroffen werden.

Beispiel 1: Das Speichern eines Artikels ohne Produktgruppe und Warengruppe ist nicht möglich, ein entsprechender Hinweis erscheint. Beispiel 2: Beim Speichern eines gerade neu angelegten Angebotes wird ein automatischer Einleitungstext generiert, sofern noch nichts in den Einleitungstext eingegeben wurde. Dazu wird ein individueller Drucksprachtext geholt und in diesen der ausgewählte Ansprechpartner des Beleges eingefügt. Beispiel 3: Vor dem Speichern eines Beleges wird geprüft, ob das Textfeld 'Ihr Beleg' jetzt leer ist, vorher jedoch einen Wert enthalten hat. In diesem Fall erscheint eine Abfrage, wird diese verneint, so wird das Speichern abgebrochen und der alte Wert wird wieder in dieses Textfeld eingefügt.


VB.NET: VorSpeichern - Beispiel 1

  

#Region " TriggerFormFramework_VorSpeichern-Ereignis " 

        Private Sub TriggerFormFramework_VorSpeichern(ByVal sender As Object, ByVal e As FormFrameworkEventArgs, ByRef AktionAusführen As Boolean) Handles Me.VorSpeichern 

                '>>> A R T I K E L 

                If TypeOf sender Is ArtikelFRM Then 

                    Dim ArtFRM As ArtikelFRM 

                    ArtFRM = DirectCast(sender, ArtikelFRM) 

                    '>>> Artikel nicht speichern, wenn keine Produktgruppe eingetragen ist 

                    If ArtFRM.TextBoxProduktgruppe_Produktgruppen.Text = "" Then 

                        FktF.Meldung("Speichern ist noch nicht erlaubt: Bitte geben Sie eine Produktgruppe ein.", ArtFRM) 

                        AktionAusführen = False 

                    End If 

                    '>>> Artikel nicht speichern, wenn keine Warengruppe eingetragen ist 

                    If ArtFRM.TextBoxWarengruppe_Warengruppen.Text = "" Then 

                        FktF.Meldung("Speichern ist noch nicht erlaubt: Bitte geben Sie eine Warengruppe ein.", ArtFRM) 

                        AktionAusführen = False 

                    End If 

                End If 

        End Sub 

#End Region


VB.NET: VorSpeichern - Beispiel 2

  

#Region " TriggerFormFramework_VorSpeichern-Ereignis " 

        Private Sub TriggerFormFramework_VorSpeichern(ByVal sender As Object, ByVal e As FormFrameworkEventArgs, ByRef AktionAusführen As Boolean) Handles Me.VorSpeichern 

                '>>> Bei Menüfunktion V O R G A N G 

                If TypeOf sender Is VorgangFRM Then 

                    Dim VorFRM As VorgangFRM 

                    VorFRM = CType(sender, VorgangFRM

                    '>>> Nur, wenn gerade ein neuer Vorgang angelegt wird 

                    If VorFRM.SpeicherungsTyp = SpeichernTyp.Neu Then 

                        '>>> Nur bei Angeboten 

                        If VorFRM.BelegTypGUID = BT.VkAngebot Then 

                            Dim einleitungstext, ansprechpartner, tmpAnredeGUID, tmpAnrede, tmpAnredeTitelGUID, tmpAnredeTitel, nachname As String 

                            Dim tmpAnredeTextNR As Integer 

                            Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB 

                            Dim sprachGuid As Guid = VorFRM.DruckSpracheForm 

                            '>>> Wenn im Einleitungstext bereits etwas drinsteht, dann beenden 

                            If VorFRM.TextBoxEinleitungstext.Text.Trim <> "" Then Exit Sub 

                            '>>> Der Text in den Drucksprachtexten mit der Nummer 80002 könnte lauten: 

                            '>>> Guten Tag {Ansprechpartner} 

                            einleitungstext = Drucken.Text(sprachGuid, 80002) 

                            '>>> Anrede ermitteln 

                            tmpAnredeGUID = C.ToStringX(VorFRM.ComboBoxKennung_Anreden.EwaWert) 

                            tmpAnredeTextNR = C.ToIntegerX(tmpDBZ.HoleFeld(TBL.Anreden.DruckTextNummerINT, TBL.Anreden.TBL, TBL.Anreden.GUID, tmpAnredeGUID)) 

                            tmpAnrede = Drucken.Text(sprachGuid, tmpAnredeTextNR) 

                            '>>> Titel ermitteln 

                            tmpAnredeTitelGUID = C.ToStringX(VorFRM.ComboBoxTitel_AnredeTitel.EwaWert) 

                            If tmpAnredeTitelGUID = "" Then 

                                tmpAnredeTitel = "" 

                            Else 

                                tmpAnredeTitel = C.ToStringX(tmpDBZ.HoleFeld(TBL.AnredeTitel.TitelVC, TBL.AnredeTitel.TBL, TBL.AnredeTitel.GUID, tmpAnredeTitelGUID)) & " " 

                            End If 

                            '>>> Nachname ermitteln 

                            nachname = C.ToStringX(tmpDBZ.HoleFeld(TBL.Ansprechpartner.NachnameVC, TBL.Ansprechpartner.TBL, TBL.Ansprechpartner.GUID, VorFRM.TextBoxAnsprechpartnerId.Text)) 

                            '>>> Ansprechparter zusammensetzen und in Einleitungstext einsetzen 

                            ansprechpartner = tmpAnrede & " " & tmpAnredeTitel & nachname 

                            If ansprechpartner.Trim <> "" Then einleitungstext = einleitungstext.Replace("{Ansprechpartner}", ansprechpartner) 

                            '>>> Einleitungstext in die Textbox 'Einleitungstext' setzen 

                            VorFRM.BasisFkt.SetzeControl(VorFRM.TextBoxEinleitungstext, einleitungstext) 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region


VB.NET: VorSpeichern - Beispiel 3

  

#Region " TriggerFormFramework_VorSpeichern-Ereignis " 

        Private Sub TriggerFormFramework_VorSpeichern(ByVal sender As Object, ByVal e As FormFrameworkEventArgs, ByRef AktionAusführen As Boolean) Handles Me.VorSpeichern 

                '>>> 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 txtBox As EwaTextBox = vorFRM.TextBoxIhrBeleg 

                    Dim aktDtRow As DataRow = vorFRM.AktuelleDtRow 

                    '>>> Nur beim Ändern (nicht Neu, Kopieren) und wenn der Wert in der Textbox 'IhrBeleg' jetzt leer ist 

                    If vorFRM.SpeicherungsTyp = SpeichernTyp.Ändern AndAlso txtBox.Text.Trim = "" AndAlso Not aktDtRow Is Nothing Then 

                        '>>> alten Wert der Textbox holen 

                        Dim alterWert As String 

                        Try 

                            alterWert = C.ToStringXAll(aktDtRow.Item(txtBox.DataBindings.Item(0).BindingMemberInfo.BindingField, DataRowVersion.Original)) 

                        Catch ex As VersionNotFoundException 

                            '>>> Abfangen, wenn es kein 'DataRowVersion.Original' gibt: 

                            Exit Sub 

                        End Try 

                        '>>> Wenn der alte Wert nicht leer war 

                        If alterWert <> "" Then 

                            If FktF.MeldungJN("Sie haben gerade das Feld 'Ihr Beleg' gelöscht." & vbCrLf & _ 

                                              "Sind Sie sicher?", "Hinweis") = Windows.Forms.DialogResult.No Then 

                                vorFRM.BasisFkt.SetzeControl(txtBox, aktDtRow.Item(txtBox.DataBindings.Item(0).BindingMemberInfo.BindingField, DataRowVersion.Original)) 

                                AktionAusführen = False 

                            End If 

                        End If 

                    End If 

                End If 

        End Sub 

#End Region

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“.