Verschiedene Code-Snippets
Eigene Preisfindung auf Tastenkombination ALT + W
Mit dem Beispiel-Code wird ein bestimmter Preis, der programmiertechnisch beliebig erzeugt werden kann, in das Einzeplreis-Feld der Position hineingesetzt, sobald die Tastenkombination 'Alt + W' gedrückt wird. Dies wird über das Ereignis 'KeyUp' abgefragt, weil die Ereignisse 'KeyDown' und 'KeyPress' bereits durch easyWinArt-Funktionen abgefangen und verwendet werden.
VB.NET SDK-Programmcode
#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 S P O S I T I O N
If TypeOf sender Is VorgangsPositionFRM Then
Dim posFRM As VorgangsPositionFRM
posFRM = CType(sender, VorgangsPositionFRM)
'>>> Ereignis hinzufügen, für KeyUp, weil KeyDown und KeyPress schon durch easyWinArt blockiert sind
AddHandler posFRM.DoubleBoxPreis.KeyUp, AddressOf MeineKalkulation
End If
End Sub
#End Region
#Region " Private Sub: MeineKalkulation () "
Private Sub MeineKalkulation(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
'>>> Reagieren auf ALT + W
If e.KeyCode = Keys.W AndAlso My.Computer.Keyboard.AltKeyDown = True Then
Dim posFRM As VorgangsPositionFRM
Dim doubleBoxPreis As EwaDoubleBox
doubleBoxPreis = CType(sender, EwaDoubleBox)
posFRM = CType(doubleBoxPreis.FindForm, VorgangsPositionFRM)
'>>> Preis in DoubleBoxPreis setzen
posFRM.BasisFkt.SetzeControl(doubleBoxPreis, 99.99)
End If
End Sub
#End Region
Prüfung auf Fertigungs-Freigabe in Disposition
Dispositions-Bedarfe, welche als Ursache einen Kundenauftrag haben, sollen zwar in der Disposition zu sehen sein, aber solange keine Freigabe erteilt wurde, sollen sie nicht disponiert werden können. Die Freigabe wird über eine Individual-Variable (CheckBox) am Kundenauftrag erteilt, welche mit Hilfe einer View (Felder: Guid, Freigabe) als Select in der Menüfunktion 'Disposition' hinzugefügt wird. Es wird diese View verwendet und in dieser werden Null-Werte abgefangen, damit es keine undefinierten CheckBoxen gibt für Bedarfe, die keinen Kundenauftrag als Ursache haben. Wird ein nicht freigegebener Kundenauftrags-Bedarf angeklickt, erscheint ein Hinweis und das Häkchen wird wieder entfernt.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_NachLoad-Ereignis "
Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad
'>>> Bei Menüfunktion D I S P O B E D A R F
If TypeOf sender Is DispositionBedarfFRM Then
Dim dispoFRM As DispositionBedarfFRM
dispoFRM = CType(sender, DispositionBedarfFRM)
AddHandler dispoFRM.CheckBoxDisponierenJN.EwaControlChanged, AddressOf Me.FreigabePrüfen
End If
End Sub
#End Region
#Region " Private Sub: FreigabePrüfen () "
Private Sub FreigabePrüfen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim tmpCheckBox As EwaCheckBox
Dim dispoFRM As DispositionBedarfFRM
tmpCheckBox = CType(sender, EwaCheckBox)
'>>> Falls die Checkbox gerade angehakt wurde
If tmpCheckBox.Checked Then
dispoFRM = CType(tmpCheckBox.FindForm, DispositionBedarfFRM)
Dim row As DataRow
'>>> Wichtig: BB.AktuelleRow geht nicht, da zu früh hier, Index aus DataGrid holen !!!
row = dispoFRM.BB.DataTableStandard.Rows(dispoFRM.BB.DataGridStandard.CurrentRowIndex)
Dim belegIdentifizierer As String = C.ToStringX((row(TBL.Vorgang.TBL & "_" & TBL.Vorgang.BelegIdentifiziererVC)))
'>>> Wenn diese Zeile ein Auftrags-Bedarf ist
If Not belegIdentifizierer = Nothing AndAlso belegIdentifizierer <> "" Then
Dim freigabe As Boolean = C.ToBooleanX(row("AV_DispoFertigungsfreigabe" & "_" & "FertigungsFreigabe"))
'>>> Wenn keine Freigabe, dann Häkchen entfernen und Meldung
If freigabe = False Then
FktF.Meldung("Achtung: Keine Freigabe", dispoFRM)
dispoFRM.BasisFkt.SetzeControl(tmpCheckBox, False)
End If
End If
End If
End Sub
#End Region
Verbindlichkeiten automatisiert bezahlen
Mit dem unteren Beispiel werden alle offenen Verbindlichkeiten automatisch bezahlt durch Automatisierung der Abläufe, die normalerweise durch Benutzerinterkation erfolgen. Es wird also im easyWinArt nacheinander für jede entsprechende Verbindlichkeit die Menüfunktion 'Zahlungen' geöffnet, dann der Button 'neu' betätigt, entsprechende Werte eingetragen, dann der Button 'Speichern' betätigt und anschließend wieder beendet.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Registerkarte und Button ergänzen
Dim meinTab As New TabPage
Dim buttonZahlungenErledigen As New EwaButton
buttonZahlungenErledigen.Width = 120
buttonZahlungenErledigen.Text = "Zahlungen erledigen"
buttonZahlungenErledigen.EwaReadOnlyAktiv = True
meinTab.ImageIndex = 131
meinTab.Controls.Add(buttonZahlungenErledigen)
vorFRM.TabControlStandard.Controls.Add(meinTab)
AddHandler buttonZahlungenErledigen.Click, AddressOf ZahlungErledigen
End If
End Sub
#End Region
#Region " TriggerFormFramework_NachDatensatzChangedMultiEreignis-Ereignis "
Private Sub TriggerFormFramework_NachDatensatzChangedMultiEreignis(ByVal sender As Object, ByVal e As FormFrameworkMultiEventArgs) Handles Me.NachDatensatzChangedMultiEreignis
'>>> Bei Menüfunktion Z A H L U N G
If TypeOf sender Is ZahlungenFRM Then
Dim zahlFRM As ZahlungenFRM
zahlFRM = CType(sender, ZahlungenFRM)
'>>> Zahlungen erledigen, wenn im EwaObjekt das Wort 'Erledigen' steht
If e.EreignisTyp = MultiEventTyp.NachLoad AndAlso zahlFRM.EwaObjekt.ToString = "Erledigen" Then
'>>> Neu-Button betätigen
CType(New FcNeu(zahlFRM), IEwaFunktion).Run()
'>>> Skonto löschen, es wurde immer alles bezahlt
zahlFRM.ButtonSkontoLöschen.PerformClick()
'>>> Zahlungsart 'Lastschrift' setzen, damit in keinem Fall Kontodaten benötigt werden
zahlFRM.BasisFkt.SetzeControl(zahlFRM.ComboBoxKürzel_ZahlungsArt, "LSCHR")
'>>> Datum-Kontoauszug setzen, damit die Zahlung erledigt ist und nicht geplant oder angewiesen
zahlFRM.BasisFkt.SetzeControl(zahlFRM.DatePickerDatumKontoauszug, SqlZeit.Now.Date.ToShortDateString)
'>>> Ggf. Zahlungs-Datum setzen
If zahlFRM.DatePickerDatumZahlung.Text = "" Then
zahlFRM.BasisFkt.SetzeControl(zahlFRM.DatePickerDatumZahlung, SqlZeit.Now.Date.ToShortDateString)
End If
'>>> Speichern
CType(New FcSpeichern(zahlFRM), IEwaFunktion).Run()
'>>> Beenden des Fensters
CType(New FcBeenden(zahlFRM, False), IEwaFunktion).Run()
End If
End If
End Sub
#End Region
#Region " Private Sub: ZahlungErledigen (Automatisiertes Eintragen von Zahlungen in alle gesamt-offenen unbezahlten Verbindlichkeiten) "
Private Sub ZahlungErledigen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim row As DataRow
Dim belegGUID As Guid
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
'>>> Holen aller GUIDS aller gesamtoffenen Verbindlichkeiten, die einen zu bezahlenden Wert haben, ohne alte Versionen
Dim tmpSQL As String = "SELECT " & TBL.Vorgang.GUID & _
" FROM " & TBL.Vorgang.TBL & _
" WHERE " & TBL.Vorgang.BelegStatusGUID & " = '" & BST.E_VER_GOF_GesamtOffen & "'" & _
" AND " & TBL.Vorgang.VerkaufsWerteBruttoBezahltDBL & "= 0" & _
" AND " & TBL.Vorgang.VerkaufsWerteNettoEffektivDBL & "> 0" & _
" AND " & TBL.Vorgang.HistorieBIT & " = 0"
Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Vorgang.TBL)
'>>> Für jede geholte GUID (Verbindlichkeit): Zahlungen-FEnster öffnen mit speziellen Parametern
For Each row In tmpTable.Rows
belegGUID = C.ToGuidX(row(0))
FktF.StartMenueFunktion(MF.Zahlungen, , TBL.Zahlungen.TBL & "." & TBL.Zahlungen.BelegGUID & " = '" & belegGUID.ToString & "'", , "xxx", belegGUID.ToString, , , "Erledigen")
Next
End Sub
#End Region
Beleg manuell erledigen
Mit dieser Prozedur kann der angegebene Beleg auf manuell erledigt gesetzt werden, es wird die gleiche Aktion durchgeführt wie über den Button 'Manuell erledigen' in der Funktions-Toolbar. Der Beleg wird vorher gesperrt und anschließend wieder freigegeben.
VB.NET SDK-Programmcode
#Region " Private Sub: BelegManuellErledigen () "
Private Sub BelegManuellErledigen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim belegGUID As String = "d457770f-3490-453b-8b21-dca236b15bcd"
'>>> Beleg sperren; Exit, falls nicht möglich
If FktF.GuidSperren(belegGUID) Then Exit Sub
'>>> Manuell erledigen:
Dim tmpVorgang As New Vorgang(New Guid(belegGUID))
tmpVorgang.ManuellErledigen()
FktF.GuidFreigeben(belegGUID)
End Sub
#End Region
Texte bei gesperrten Belegen ändern
Manchmal ist es notwendig, bei gesperrten Rechnungen nochmals einen (für die Fibu nicht relevanten) Text zu ändern. Mit dem nachfolgenden Code kann man die Felder Betreff und Einleitungstext am Beleg sowie Langtext an der Position durch Doppelklick in einem erscheinenden Fenster ändern. Der Text wird auf der Oberfläche gesetzt und gleichzeitig direkt in die Datenbank geschrieben.
VB.NET SDK-Programmcode
#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 = CType(sender, VorgangFRM)
AddHandler vorFRM.TextBoxBetreff.DoubleClick, AddressOf TextNachträglichÄndern
AddHandler vorFRM.TextBoxEinleitungstext.DoubleClick, AddressOf TextNachträglichÄndern
End If
'>>> 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)
AddHandler posFRM.TextBoxBezeichnungLang.DoubleClick, AddressOf TextNachträglichÄndern
End If
End Sub
#End Region
#Region " Private Sub: TextNachträglichÄndern () "
Private Sub TextNachträglichÄndern(ByVal sender As Object, ByVal e As System.EventArgs)
Dim basisFRM As BasisForm
Dim aktuelleTextBox As EwaTextBox
aktuelleTextBox = CType(sender, EwaTextBox)
basisFRM = CType(CType(sender, EwaTextBox).FindForm, BasisForm)
If basisFRM.BearbeitungsModus <> BasisFormModus.Lesen Then
FktF.Meldung("Sie sind nicht im Lesemodus", basisFRM)
Exit Sub
End If
Dim langTextForm As New LangTextForm(basisFRM, aktuelleTextBox)
'>>> Eventuell Größe anpassen:
If aktuelleTextBox.Multiline = False Then
langTextForm.TextBoxEingabeText.Multiline = False
langTextForm.Size = New Size(800, 150)
End If
langTextForm.TextBoxEingabeText.ReadOnly = False
langTextForm.ButtonSpeichern.Visible = True
'>>> Form anzeigen:
Dim dr As DialogResult = langTextForm.ShowDialog()
If dr = DialogResult.OK Then
'>>> UPDATE:
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
tmpDBZ.LöscheFelder()
tmpDBZ.AddFelder(aktuelleTextBox.EwaBindungsSpalte, langTextForm.TextBoxEingabeText.Text, EwaSQL.NVarChar)
tmpDBZ.UpdateDatensatz(aktuelleTextBox.EwaBindungsTabelle, basisFRM.AktuelleGUID)
'>>> Dispose:
langTextForm.Dispose()
End If
End Sub
#End Region
Am Vorgang das Projekt über den Projekt-Matchcode einstellen
Die Original-IntegerBox des Projektes wird mit einer eigenen TextBox überlagert, mit der das Projekt über den Projekt-Matchcode ausgewählt werden kann.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(ByVal sender As Object, ByVal e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Bei Menüfunktion V O R G A N G
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Projekt am Vorgang soll über den Projekt-Matchcode ausgewählt werden können
ProjektMatchcodeAmVorgangLogiken(vorFRM)
'>>> GUID des aktuellen Mandanten
Dim aktuellerMandant As Guid = GV.MandantenGUID
End If
End Sub
#End Region
#Region " TriggerFormFramework_DatenBindung-Ereignis "
Private Sub TriggerFormFramework_DatenBindung(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.DatenBindung
'>>> Bei Menüfunktion V o r g a n g
If TypeOf sender Is VorgangFRM Then
Dim VorFRM As VorgangFRM
VorFRM = CType(sender, VorgangFRM)
Dim tmpTextBox As EwaTextBox
tmpTextBox = CType(VorFRM.GroupBoxProjekt.Controls("TextboxProjektMatchcode"), EwaTextBox)
VorFRM.DatenBindung(tmpTextBox, TBL.Projekte.TBL & "Projekt", TBL.Projekte.MatchCodeVC)
End If
End Sub
#End Region
#Region " Private Sub: ProjektMatchcodeAmVorgangLogiken (Projekt am Vorgang soll über den Projekt-Matchcode ausgewählt werden können) "
Private Sub ProjektMatchcodeAmVorgangLogiken(ByVal VorFRM As VorgangFRM)
Dim textboxProjektMatchcode As New EwaTextBox
textboxProjektMatchcode.Name = "TextboxProjektMatchcode"
textboxProjektMatchcode.Width = VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Width
textboxProjektMatchcode.Left = VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Left
textboxProjektMatchcode.Top = VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Top
VorFRM.TextBoxBezeichnungKurz_ProjekteProjekt.Parent.Controls.Add(textboxProjektMatchcode)
AddHandler textboxProjektMatchcode.EwaControlChanged, AddressOf ProjektEinstellen
Dim TextboxProjektMatchcodeTimer As New Timer
TextboxProjektMatchcodeTimer.Interval = 300
textboxProjektMatchcode.Tag = TextboxProjektMatchcodeTimer
textboxProjektMatchcode.BringToFront()
AddHandler TextboxProjektMatchcodeTimer.Tick, AddressOf ProjektEinstellenTimerBehandlung
AddHandler VorFRM.IntegerBoxProjektNummer_ProjekteProjekt.EwaControlChanged, AddressOf ProjektEinstellenMatchcodeAnpassen
End Sub
#End Region
#Region " Private Sub: ProjektEinstellenMatchcodeAnpassen (Wird das Projekt über das blaue Label ausgewählt, so muss der Matchcode gesetzt werden) "
Private Sub ProjektEinstellenMatchcodeAnpassen(ByVal sender As Object, ByVal e As System.EventArgs)
Dim vorFRM As VorgangFRM
Dim textboxProjektMatchcode As EwaTextBox
Dim matchcode As String
vorFRM = CType(CType(sender, EwaIntegerBox).FindForm, VorgangFRM)
textboxProjektMatchcode = CType(vorFRM.GroupBoxProjekt.Controls("TextboxProjektMatchcode"), EwaTextBox)
'>>> Matchcode-Textbox entsprechend dem neuen Inhalt der Projekt-Nr-IntegerBox füllen
If vorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Text.Trim <> "" Then
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
matchcode = C.ToStringX(tmpDBZ.HoleFeld(TBL.Projekte.MatchCodeVC, TBL.Projekte.TBL, TBL.Projekte.ProjektNummerINT, vorFRM.IntegerBoxProjektNummer_ProjekteProjekt.Text))
Else
matchcode = ""
End If
textboxProjektMatchcode.EwaChangedNichtAusführen = True
textboxProjektMatchcode.Text = matchcode
textboxProjektMatchcode.EwaChangedNichtAusführen = False
End Sub
#End Region
#Region " Private Sub: ProjektEinstellen (Beim eingeben eines Projekt-Matchcodes die Projekt-Nr-IntegerBox entsprechend füllen, damit die restlichen Logiken ablaufen) "
Private Sub ProjektEinstellen(ByVal sender As Object, ByVal e As System.EventArgs)
'>>> Projekt-Nr-IntegerBox wird nicht sofort befüllt, sondern über einen Timer, damit man den Matchcode flüssig tippen kann
Dim textboxProjektMatchcode As EwaTextBox
Dim vorFRM As VorgangFRM
textboxProjektMatchcode = CType(sender, EwaTextBox)
vorFRM = CType(textboxProjektMatchcode.FindForm, VorgangFRM)
Dim TextboxProjektMatchcodeTimer As Timer
TextboxProjektMatchcodeTimer = CType(textboxProjektMatchcode.Tag, Timer)
TextboxProjektMatchcodeTimer.Tag = vorFRM
TextboxProjektMatchcodeTimer.Stop()
TextboxProjektMatchcodeTimer.Start()
End Sub
#End Region
#Region " Private Sub: ProjektEinstellenTimerBehandlung (Timer-Behandlung für ProjektEinstellen) "
Private Sub ProjektEinstellenTimerBehandlung(ByVal sender As Object, ByVal e As System.EventArgs)
Dim neueProjektNr As String = ""
Dim vorFRM As VorgangFRM
Dim textboxProjektMatchcode As EwaTextBox
Dim textboxProjektMatchcodeTimer As Timer
textboxProjektMatchcodeTimer = CType(sender, Timer)
textboxProjektMatchcodeTimer.Stop()
vorFRM = CType(textboxProjektMatchcodeTimer.Tag, VorgangFRM)
textboxProjektMatchcode = CType(vorFRM.GroupBoxProjekt.Controls("TextboxProjektMatchcode"), EwaTextBox)
'>>> Projekt-Nr-IntegerBox entsprechend eingegebenem Matchcode füllen
If textboxProjektMatchcode.Text.Trim <> "" Then
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
neueProjektNr = C.ToStringX(tmpDBZ.HoleFeld(TBL.Projekte.ProjektNummerINT, TBL.Projekte.TBL, TBL.Projekte.MatchCodeVC, textboxProjektMatchcode.Text))
End If
vorFRM.BasisFkt.SetzeControl(vorFRM.IntegerBoxProjektNummer_ProjekteProjekt, neueProjektNr)
End Sub
#End Region
E-Mail-SMTP-Einstellungen pro Anwender
Im Standard werden die SMTP-Einstellungen global in der Mandanten-Konfiguration eingestellt und für alle Anwender werden die Emails über dieses angegebene SMTP-Konto verschickt. Mit der folgenden Programmieung können pro Anwender eigene SMTP-Einstellungen pro Anwender festgelegt werden. Die entsprechenden Individual-Variablen 'SMTP-Benutzername' und 'SMTP-Passwort' müssen an der Menüfunktion 'Anwender' vorhanden sein.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_EwaMenueFormLoadClosing-Ereignis "
Private Sub TriggerFormFramework_EwaMenueFormLoadClosing(sender As Object, e As MenüFormEventArgs) Handles Me.EwaMenueFormLoadClosing
'>>> Beim Starten von easyWinArt die anwenderspezifischen Mail-Anmeldedaten einstellen
If e.LoadJN Then
AnwenderspezifischeMaildatenEinstellen()
End If
End Sub
#End Region
#Region " Private Sub TriggerFormFramework_NachLoad() "
Private Sub TriggerFormFramework_NachLoad(ByVal sender As Object, ByVal e As FormFrameworkEventArgs) Handles Me.NachLoad
'>>> Bei Menüfunktion A N W E N D E R
If TypeOf sender Is AnwenderFRM Then
Dim anwFRM As AnwenderFRM
anwFRM = CType(sender, AnwenderFRM)
'>>> Wird die Eingabe in das Control 'IndVarSMTPPasswort' gestartet, so wird das Fenster zur Passworteingabe angezeigt
For Each ctrl As IEwaControl In anwFRM.PanelIndVar.Controls
If ctrl.EwaBindungsSpalte = "IndVarSMTPPasswort" Then
Dim textBoxPasswort As EwaTextBox = CType(ctrl, EwaTextBox)
textBoxPasswort.PasswordChar = Global.Microsoft.VisualBasic.ChrW(42)
AddHandler textBoxPasswort.Enter, AddressOf PasswortEingabe
End If
Next
End If
End Sub
#End Region
#Region " TriggerFormFramework_NachSpeichern-Ereignis "
Private Sub TriggerFormFramework_NachSpeichern(sender As Object, e As FormFrameworkSpeichernEventArgs) Handles Me.NachSpeichern
'>>> Bei Menüfunktion M A N D A N T E N K O N F I G
If TypeOf sender Is MandantenKonfigurationFRM Then
Dim configFRM As MandantenKonfigurationFRM
configFRM = CType(sender, MandantenKonfigurationFRM)
'>>> Beim Ändern der Mandantenkonfiguration die anwenderspezifischen Mail-Anmeldedaten einstellen
AnwenderspezifischeMaildatenEinstellen()
End If
End Sub
#End Region
#Region " Private Sub: PasswortEingabe () "
Private Sub PasswortEingabe(sender As Object, e As System.EventArgs)
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
'>>> Fenster zur Passwort-Eingabe anzeigen
Dim textBoxPasswort As EwaTextBox = CType(sender, EwaTextBox)
Dim avwFRM As AnwenderFRM = CType(textBoxPasswort.FindForm, AnwenderFRM)
Dim pwHF As New PasswortHF("Bitte das SMTP-Passwort eingeben", "SMTP-Passwort", tmpDBZ, TBL.Anwender.TBL, "IndVarSMTPPasswort", avwFRM.AktuelleGUID)
pwHF.ShowDialog()
avwFRM.TextBoxName.Focus()
End Sub
#End Region
#Region " Private Sub: AnwenderspezifischeMaildatenEinstellen () "
Private Sub AnwenderspezifischeMaildatenEinstellen()
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
'>>> SMTP-Anmeldename überschreiben
GV.Config.MailSmtpServerAnmeldeName = C.ToStringX(tmpDBZ.HoleFeld("IndVarSMTPName", TBL.Anwender.TBL, TBL.Anwender.GUID, GV.User.GUID.ToString))
'>>> SMTP-Passwort überschreiben
Dim passwort As String = C.ToStringX(tmpDBZ.HoleFeld("IndVarSMTPPasswort", TBL.Anwender.TBL, TBL.Anwender.GUID, GV.User.GUID.ToString))
GV.Config.MailSmtpServerAnmeldePasswort = Fkt.SqlPasswortEntschlüsseln(passwort, Fkt.BildeUserPasswort(GV.KennungSQL))
End Sub
#End Region
#Region " Private Sub: AnwenderspezifischeMaildatenEinstellen () "
Private Sub AnwenderspezifischeMaildatenEinstellen()
Dim tmpDBZ As SQLServerZugriff = Datenbank.DatenDB
Dim tmpSQL As String = "SELECT " & "IndVarSMTPBenutzername" & _
", " & "IndVarSMTPPasswort" & _
" FROM " & TBL.Anwender.TBL & _
" WHERE " & TBL.Anwender.GUID & " = '" & GV.User.GUID.ToString & "'"
Dim tmpTable As DataTable = tmpDBZ.BildeDataTableSQL(tmpSQL, TBL.Anwender.TBL)
Dim tmpSmtpUsername As String = C.ToStringX(tmpTable.Rows(0)("IndVarSMTPBenutzername"))
Dim tmpSmtpUerPasswort As String = C.ToStringX(tmpTable.Rows(0)("IndVarSMTPPasswort"))
'>>> Falls individueller Wert vorhanden, SMTP-Anmeldename überschreiben
If tmpSmtpUsername.Trim <> "" Then
GV.Config.MailSmtpServerAnmeldeName = tmpSmtpUsername
End If
If tmpSmtpUerPasswort.Trim <> "" Then
tmpSmtpUerPasswort = Fkt.SqlPasswortEntschlüsseln(tmpSmtpUerPasswort, Fkt.BildeUserPasswort(GV.KennungSQL))
GV.Config.MailSmtpServerAnmeldePasswort = tmpSmtpUerPasswort
End If
End Sub
#End Region
Anhänge im Mail-Fenster automatisch ergänzen
Mit folgendem Code können über das SDK beliebige Datei-Anhänge automatisch im Mail-Fenster ergänzt werden. Hierfür ist eine Abfrage diverser Parameter möglich, z.B. aus welcher Menüfunktion das Mail-Fenster geöffnet wurde und ob dabei ein bestimmter Druck-Report zu Grunde liegt. So können z.B. beim Versand von Belegen automatisch die AGB's als PDF-Datei angehängt werden.
Im folgenden Beispiel wird eine Textdatei angehägt, welche an einer bestimmten Stelle auf der Festplatte liegt, wenn aus den Vorgangs-Belegen heraus bei einem Verkaufs-Angebot der Druck-Report mit dem Anzeige-Namen 'Angebot' per E-Mail verschickt wird.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_EwaModalFormLoadClosing-Ereignis "
Private Sub TriggerFormFramework_EwaModalFormLoadClosing(sender As Object, e As ModalFormEventArgs) Handles Me.EwaModalFormLoadClosing
'>>> Nur beim Öffnen des Mail-Fensters
If TypeOf sender Is MailForm AndAlso e.NachLoadJN Then
Dim mailFRM As MailForm = CType(sender, MailForm)
'>>> Nur beim Mailen aus einem Angebot, nur wenn Mail aufgrund von Report geöffnet
If TypeOf mailFRM.BasisFRM Is VorgangFRM AndAlso mailFRM.EmailFaxDmsOBJ.DruckForm IsNot Nothing Then
Dim vorFRM As VorgangFRM = CType(mailFRM.BasisFRM, VorgangFRM)
If vorFRM.BelegTypGUID = BT.VkAngebot Then
'>>> Nur bei bestimmten Report mit dem Anzeige-Namen 'Angebot'
If mailFRM.EmailFaxDmsOBJ.DruckForm.SelektiertesLLObjekt.AnzeigeDB = "Angebot" Then
'>>> Datei-Anhang ergänzen
Dim dateiPfad As String = "D:test.txt"
mailFRM.SelektierterMailAnhangName = Fkt.DateiNameOhnePfad(dateiPfad)
'>>> Ausgewählte Datei ins DateiAnhang-Verzeichnis kopieren:
Fkt.DateiKopieren(dateiPfad, mailFRM.DateiAnhangPfad & mailFRM.SelektierterMailAnhangName, True)
'>>> Anzeige aller aktuellen Anhänge in der List-Box:
mailFRM.BildeListBoxAnhänge()
'>>> Name des selektierten Mail-Anhangs zurücksetzen:
mailFRM.SelektierterMailAnhangName = ""
End If
End If
End If
End If
End Sub
#End Region
Lagerbuchung unterdrücken
Mit folgendem Code kann eine Lagerbuchung unterdrückt werden. Wird die Variable 'LagerbuchungNichtAusführenSDK' vor der Lagerbuchung im Trigger 'LagerBuchung' gesetzt, so wird keine Lagerbuchung ausgeführt und auch kein Lagerjournal-Eeintrag erzeugt. mit Hilfe der Informationen aus den EventArgs kann das Verhindern auf ganz bestimmte Konstellationen eingeschränkt werden,z.B. nur für Verkaufs-Lieferungen usw.
VB.NET SDK-Programmcode
#Region " TriggerBusinessLayer_LagerBuchung-Ereignis "
Private Sub TriggerBusinessLayer_LagerBuchung(sender As Object, e As LagerbuchungsEventArgs) Handles Me.LagerBuchung
If e.VorLagerbuchung Then
'>>> Lagerbuchung verhindern
e.LagerBuchungsSTR.LagerbuchungNichtAusführenSDK = False
End If
End Sub
#End Region
Toolstrip-Button durch eigenen ersetzen
Mit dieser Funktion wird ein Toolstrip-Button versteckt und ein neuer dafür eingefügt mit einer eigenen Funktion dahinter. Der Original-Button muss versteckt werden und weiterhin existieren, damit die Original-Programmlogiken weiter funktionieren.
VB.NET SDK-Programmcode
#Region " TriggerFormFramework_StartForm-Ereignis "
Private Sub TriggerFormFramework_StartForm(sender As Object, e As FormFrameworkStartFormEventArgs) Handles Me.StartForm
'>>> Menüfunktion V O R G A N G
If TypeOf sender Is VorgangFRM Then
Dim vorFRM As VorgangFRM
vorFRM = CType(sender, VorgangFRM)
'>>> Neuen Toolstrip-Button erzeugen
Dim ToolBarButtonUserVerknüpfung2 As New ToolStripButton
ToolBarButtonUserVerknüpfung2.ImageIndex = 376
'>>> Neuen Button an der Position des alten Buttons einfügen
Dim index As Integer = vorFRM.ToolBarVorgang.Items.IndexOfKey(vorFRM.ToolBarButtonVerknüpfung2.Name)
vorFRM.ToolBarVorgang.Items.Insert(index, ToolBarButtonUserVerknüpfung2)
AddHandler ToolBarButtonUserVerknüpfung2.Click, AddressOf ToolBarButtonUserVerknüpfung2Click
'>>> Original-Toolstrip-Button verstecken
Dim tmpToolbar As New ToolStrip
vorFRM.PanelUnsichtbaresTabControl.Controls.Add(tmpToolbar)
tmpToolbar.Items.Add(vorFRM.ToolBarButtonVerknüpfung2)
End If
End Sub
#End Region
#Region " Private Sub: ToolBarButtonUserVerknüpfung2Click () "
Private Sub ToolBarButtonUserVerknüpfung2Click(sender As Object, e As System.EventArgs)
Dim tmpButton As ToolStripButton = CType(sender, ToolStripButton)
Dim vorFRM As VorgangFRM
vorFRM = CType(tmpButton.Owner.FindForm, VorgangFRM)
'>>> Meldung
FktF.Meldung("Test 123", vorFRM)
End Sub
#End Region