TriggerDatenLayer
DeleteDatensatz
Dieser Trigger wird in der Klasse 'SQLServerZugriff' bei jedem Löschen eines Datensatzes zweimal ausgelöst, zunächst einmal vor dem eigentlichen Löschen und anschließend danach erneut. Über das EventArg 'e.VorAusführung' kann dieser Umstand ausgelesen werden. Die weiteren EventArgs sind TabellenName, DatensatzGUID und DatenbankZeit, der Sender ist der aktuelle SQLServerZugriff.
InsertDatensatz
Dieser Trigger wird in der Klasse 'SQLServerZugriff' bei jedem Einfügen eines neuen Datensatzes zweimal ausgelöst, zunächst einmal vor dem eigentlichen Einfügen und anschließend danach erneut. Über das EventArg 'e.VorAusführung' kann dieser Umstand ausgelesen werden. Die weiteren EventArgs sind TabellenName, DatensatzGUID, DatenbankZeit und ParameterListe, der Sender ist der aktuelle SQLServerZugriff.
Im unteren Beispiel werden bestimmte Werte, in diesem Fall Individual-Variablen, immer dann gezielt eingestellt, wenn ein Auftrag neu erstellt wird. Dies wird immer ausgeführt, unabhängig davon, durch welche Aktion der Auftrag entsteht, da diese Codestelle bei jedem Einfügen einer neuen Datenzeile in die Vorgangs-Tabelle durchlafuen wird.
VB.NET SDK-Programmcode
#Region " TriggerDatenLayer_InsertDatensatz-Ereignis "
Private Sub TriggerDatenLayer_InsertDatensatz(ByVal sender As Object, ByVal e As DatenLayerEventArgs) Handles Me.InsertDatensatz
'>>> Nur vor dem Anlegen des Datensatzes und nur bei Tabelle 'Vorgang'
If e.VorAusführung AndAlso e.TabellenName = TBL.Vorgang.TBL Then
Dim istAuftragJN = False
Dim istBelegVersion0JN As Boolean = False
Dim parameter As IteParameter
'>>> Alle Spalten-Werte durchlaufen, die gleich in der Datenbank angelegt werden sollen
For Each parameter In e.ParameterListe
'>>> Nach Spalte 'BelegTyp' suchen und auf 'Auftrag' prüfen
If parameter.ParameterName = "@" & TBL.Vorgang.BelegTypGUID AndAlso C.ToStringX(parameter.ParameterWert) <> "" Then
If C.ToStringX(parameter.ParameterWert) = BT.VkAuftrag Then
istAuftragJN = True
End If
End If
'>>> Nach Spalte 'ÄnderungsIndex' suchen und auf 0 prüfen
If parameter.ParameterName = "@" & TBL.Vorgang.ÄnderungsIndexINT Then
If C.ToIntegerX(parameter.ParameterWert) = 0 Then
istBelegVersion0JN = True
End If
End If
Next
'>>> Beenden, wenn Beleg nicht der richtige ist
If Not istAuftragJN OrElse Not istBelegVersion0JN Then
'>>> E X I T
Exit Sub
End If
'>>> Erneuter Durchlauf, wenn passender Beleg, jetzt Werte anpassen
'>>> Achtung: Integer, BigInt und Bit bitte nie auf NULL setzen
For Each parameter In e.ParameterListe
If parameter.ParameterName = "@" & "IndVarMeineTextSpalte" Then
'>>> Neuen Wert bestimmen
parameter.ParameterWert = "xxx"
End If
If parameter.ParameterName = "@" & "IndVarMeineTextSpalte2" Then
'>>> Neuen Wert ist NULL
parameter.ParameterWert = DBNull.Value
End If
If parameter.ParameterName = "@" & "IndVarMeineIntegerSpalte" Then
'>>> Neuen Wert ist 0
parameter.ParameterWert = 0
End If
Next
End If
End Sub
#End Region
UpdateDatensatz
Dieser Trigger wird in der Klasse 'SQLServerZugriff' bei jedem Ändern eines Datensatzes zweimal ausgelöst, zunächst einmal vor dem eigentlichen Ändern und anschließend danach erneut. Über das EventArg 'e.VorAusführung' kann dieser Umstand ausgelesen werden. Die weiteren EventArgs sind TabellenName, DatensatzGUID, DatenbankZeit und ParameterListe, der Sender ist der aktuelle SQLServerZugriff.
Im unteren Beispiel wird eine Individual-Variable am Artikel mit dem aktuellen Zeitpunkt (Datum und Uhrzeit) gefüllt, wenn der neutrale VK-Preis auf beliebige Art und Weise geändert wird.
VB.NET SDK-Programmcode
#Region " TriggerDatenLayer_UpdateDatensatz-Ereignis "
Private Sub TriggerDatenLayer_UpdateDatensatz(sender As Object, e As DatenLayerEventArgs) Handles Me.UpdateDatensatz
If e.VorAusführung AndAlso e.TabellenName = TBL.Artikel.TBL Then
'>>> Prüfen, ob der Preis enthalten ist, also verändert wurde
Dim parameter As IteParameter
Dim preisVKgefunden As Boolean
For Each parameter In e.ParameterListe
If parameter.ParameterName = "@" & TBL.Artikel.PreisVKDBL Then
preisVKgefunden = True
End If
Next
'>>> Wenn Preis gefunden wurde, dann Geändert-Datum setzen
If preisVKgefunden Then
'>>> sender in SQL-Server-Zugriff umwandeln
Dim tmpDBZ As SQLServerZugriff = CType(sender, SQLServerZugriff)
'>>> Prüfen, ob das Datums-Feld schon drin ist, ansonsten hinzufügen
For Each parameter In e.ParameterListe
If parameter.ParameterName = "@IndVarPreisGeändert" Then
parameter.ParameterWert = SqlZeit.Now
Exit Sub
End If
Next
'>>> zu speicherndes Feld ergänzen
tmpDBZ.AddFelder("IndVarPreisGeändert", C.ToDateTimeX(SqlZeit.Now), EwaSQL.DateTime)
End If
End If
End Sub
#End Region