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 LagerortMagazinChargenAuswahlEventArgs) Handles 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