Speed Otimizing Lookp etc

This commit is contained in:
Developer01
2026-01-30 12:53:01 +01:00
parent a53bfee8d5
commit 0f936c71e6

View File

@@ -127,6 +127,7 @@ Public Class frmValidator
Private ReadOnly _SqlDataCache As New Dictionary(Of String, DataTable)(StringComparer.OrdinalIgnoreCase) Private ReadOnly _SqlDataCache As New Dictionary(Of String, DataTable)(StringComparer.OrdinalIgnoreCase)
Private ReadOnly _SqlScalarCache As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase) Private ReadOnly _SqlScalarCache As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase)
Private _SqlControlsByGuid As Dictionary(Of Integer, List(Of DataRow)) Private _SqlControlsByGuid As Dictionary(Of Integer, List(Of DataRow))
Private _LookupControlsByRepository As Dictionary(Of RepositoryItemLookupControl3, LookupControl3)
Private Class Translation_Strings Private Class Translation_Strings
Inherits My.Resources.frmValidator_Strings Inherits My.Resources.frmValidator_Strings
End Class End Class
@@ -934,6 +935,7 @@ Public Class frmValidator
Try Try
PanelValidatorControl.Controls.Clear() PanelValidatorControl.Controls.Clear()
_LookupControlsByRepository = New Dictionary(Of RepositoryItemLookupControl3, LookupControl3)()
Dim oSQL = $"SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{USER_LANGUAGE}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY Y_LOC, X_LOC" Dim oSQL = $"SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{USER_LANGUAGE}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY Y_LOC, X_LOC"
DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}", .FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}",
@@ -1136,21 +1138,57 @@ Public Class frmValidator
'MyLookupControl.Properties.AllowAddNewValues = oControlRow.Item("VKT_ADD_ITEM") 'MyLookupControl.Properties.AllowAddNewValues = oControlRow.Item("VKT_ADD_ITEM")
MyLookupControl.Properties.MultiSelect = oMultiselect MyLookupControl.Properties.MultiSelect = oMultiselect
Dim oCONID As Integer
Try
oCONID = PreventNulletc(oControlRow.Item("CONNECTION_ID"), "Integer")
Catch ex As Exception
oCONID = 0
End Try
If oCONID > 0 Then
Dim oCommandSQL_UBPF
Try
oCommandSQL_UBPF = oControlRow.Item("SQL_UEBERPRUEFUNG")
oCommandSQL_UBPF = oControlRow.Item("SQL_UEBERPRUEFUNG")
Catch ex As Exception
oCommandSQL_UBPF = ""
End Try
If oCommandSQL_UBPF <> String.Empty Then
Try
oSQL = PreventNulletc(oControlRow.Item("SQL_UEBERPRUEFUNG"), "String")
If clsPatterns.HasOnlySimplePatterns(oSQL) Then
oSQL = clsPatterns.ReplaceInternalValues(oSQL)
oSQL = clsPatterns.ReplaceControlValues(oSQL, PanelValidatorControl, True)
Dim oDT As DataTable = GetCachedDatatable(oSQL, oCONID)
MyLookupControl.Properties.DataSource = Nothing
If Not IsNothing(oDT) AndAlso oDT.Rows.Count > 0 Then
MyLookupControl.Properties.DataSource = oDT
MyLookupControl.Properties.ValueMember = oDT.Columns.Item(0).ColumnName
MyLookupControl.Properties.DisplayMember = oDT.Columns.Item(0).ColumnName
End If
End If
Catch ex As Exception
MyValidationLogger.Warn($"Unexpected error in LOOKUP GetValues SQL - Error: {ex.Message}")
End Try
End If
End If
If ObjectEx.NotNull(oControlRow.Item("DEFAULT_VALUE"), "") <> "" Then If ObjectEx.NotNull(oControlRow.Item("DEFAULT_VALUE"), "") <> "" Then
MyLookupControl.Properties.SelectedValues = New List(Of String) From {oControlRow.Item("DEFAULT_VALUE")} MyLookupControl.Properties.SelectedValues = New List(Of String) From {oControlRow.Item("DEFAULT_VALUE")}
End If End If
oMyControl = MyLookupControl oMyControl = MyLookupControl
_LookupControlsByRepository(MyLookupControl.Properties) = MyLookupControl
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf LookupListChanged AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf LookupListChanged
'Wenn Multiselect false dann prüfen ob abhängiges Control
' If oMultiselect = False Then
Dim oFilteredData As DataTable = DT_CONTROLS.Clone() Dim oFilteredData As DataTable = DT_CONTROLS.Clone()
Dim oExpression = $"SQL_UEBERPRUEFUNG like '%#CTRL#{oMyControl.Name}%'" Dim oExpression = $"SQL_UEBERPRUEFUNG like '%#CTRL#{oMyControl.Name}%'"
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count >= 1 Then If oFilteredData.Rows.Count >= 1 Then
MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which are depending on {oMyControl.Name}") MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which are depending on {oMyControl.Name}")
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue
End If End If
@@ -1158,22 +1196,17 @@ Public Class frmValidator
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count >= 1 Then If oFilteredData.Rows.Count >= 1 Then
MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which' enable state is depending on {oMyControl.Name}") MyValidationLogger.Debug($"createControlsLU - Found {oFilteredData.Rows.Count} Controls which' enable state is depending on {oMyControl.Name}")
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue
End If End If
oFilteredData = DT_CONTROLS.Clone() oFilteredData = DT_CONTROLS.Clone()
oExpression = $"GUID = {oControlRow.Item("GUID")} and Len(SET_CONTROL_DATA) > 0" oExpression = $"GUID = {oControlRow.Item("GUID")} and Len(SET_CONTROL_DATA) > 0"
DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges)
If oFilteredData.Rows.Count = 1 Then If oFilteredData.Rows.Count = 1 Then
'AddHandler lookup.EditValueChanged, AddressOf onLookUp1
AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue_Control2Set AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue_Control2Set
End If End If
oFilteredData = DT_CONTROLS.Clone() oFilteredData = DT_CONTROLS.Clone()
' End If
AddHandler MyLookupControl.GotFocus, Sub(sender As Control, e As EventArgs) AddHandler MyLookupControl.GotFocus, Sub(sender As Control, e As EventArgs)
If DirectCast(MyLookupControl.Tag, ClassControlCreator.ControlMetadata).ReadOnly = False Then If DirectCast(MyLookupControl.Tag, ClassControlCreator.ControlMetadata).ReadOnly = False Then
MyLookupControl.BackColor = Color.LightSteelBlue MyLookupControl.BackColor = Color.LightSteelBlue
@@ -1186,11 +1219,6 @@ Public Class frmValidator
End Sub End Sub
End If End If
'Return filteredData
'AddHandler lookup.Leave, AddressOf onLookUp0
Case "CHK" Case "CHK"
oControlInfo = "CHK#" & oControlInfo oControlInfo = "CHK#" & oControlInfo
oMyControl = ControlCreator.CreateExisingCheckbox(oControlRow, False) oMyControl = ControlCreator.CreateExisingCheckbox(oControlRow, False)
@@ -1341,13 +1369,18 @@ Public Class frmValidator
Exit Sub Exit Sub
End If End If
Dim oTextbox As BaseEdit = sender Dim oTextbox As BaseEdit = TryCast(sender, BaseEdit)
Dim oMeta As ClassControlCreator.ControlMetadata = oTextbox.Tag If oTextbox Is Nothing Then
Exit Sub
End If
Dim oMeta As ClassControlCreator.ControlMetadata = TryCast(oTextbox.Tag, ClassControlCreator.ControlMetadata)
If oMeta Is Nothing OrElse oMeta.IsDirty Then
Exit Sub
End If
If Not oMeta.IsDirty Then
oMeta.IsDirty = True oMeta.IsDirty = True
MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty") MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty")
End If
End Sub End Sub
Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs) Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs)
@@ -1618,22 +1651,32 @@ Public Class frmValidator
If _FormLoaded = False Then If _FormLoaded = False Then
Exit Sub Exit Sub
End If End If
Dim oRepositoryItem As RepositoryItemLookupControl3 = sender
Dim oLookup As LookupControl3 = oRepositoryItem.OwnerEdit
Try If SelectedValues Is Nothing OrElse SelectedValues.Count < 1 Then
If Not IsNothing(SelectedValues) Then MyValidationLogger.Debug("Attention: onLookUpselectedValue: SelectedValues.Count <> 1 ")
If SelectedValues.Count >= 1 Then Exit Sub
End If
Dim oRepositoryItem As RepositoryItemLookupControl3 = sender
Dim oLookup As LookupControl3 = Nothing
If _LookupControlsByRepository IsNot Nothing Then
_LookupControlsByRepository.TryGetValue(oRepositoryItem, oLookup)
End If
If oLookup Is Nothing Then
oLookup = TryCast(oRepositoryItem.OwnerEdit, LookupControl3)
End If
If oLookup Is Nothing Then
MyValidationLogger.Warn("onLookUpselectedValue: LookupControl not found for RepositoryItem")
Exit Sub
End If
LookupControl_DependingControls(oLookup, SelectedValues) LookupControl_DependingControls(oLookup, SelectedValues)
LookupControl_EnablingControls(oLookup, SelectedValues) LookupControl_EnablingControls(oLookup, SelectedValues)
LookupControl_DependingColumn(oLookup, SelectedValues) LookupControl_DependingColumn(oLookup, SelectedValues)
Else
MyValidationLogger.Debug("Attention: onLookUpselectedValue: SelectedValues.Count <> 1 ")
End If
End If
Catch ex As Exception
MyValidationLogger.Error(ex)
End Try
Catch ex As Exception Catch ex As Exception
MyValidationLogger.Warn("Unexpected error in onLookUpselectedValue - " + ex.Message) MyValidationLogger.Warn("Unexpected error in onLookUpselectedValue - " + ex.Message)
MyValidationLogger.Error(ex) MyValidationLogger.Error(ex)
@@ -1647,22 +1690,35 @@ Public Class frmValidator
Try Try
Dim oLookup As RepositoryItemLookupControl3 = sender Dim oLookup As RepositoryItemLookupControl3 = sender
' NEU: Dirty-Flag setzen - Suche den zugehörigen LookupControl Dim oLookupControl As LookupControl3 = Nothing
If _LookupControlsByRepository IsNot Nothing Then
_LookupControlsByRepository.TryGetValue(oLookup, oLookupControl)
End If
If oLookupControl Is Nothing Then
For Each oControl In PanelValidatorControl.Controls For Each oControl In PanelValidatorControl.Controls
If TypeOf oControl Is LookupControl3 Then If TypeOf oControl Is LookupControl3 Then
Dim oLookupControl As LookupControl3 = DirectCast(oControl, LookupControl3) Dim tmp As LookupControl3 = DirectCast(oControl, LookupControl3)
If oLookupControl.Properties Is oLookup Then If tmp.Properties Is oLookup Then
Dim oMeta As ClassControlCreator.ControlMetadata = oLookupControl.Tag oLookupControl = tmp
oMeta.IsDirty = True
MyValidationLogger.Debug($"LookupControl [{oMeta.Name}] marked as dirty")
Exit For Exit For
End If End If
End If End If
Next Next
End If
If oLookupControl IsNot Nothing Then
Dim oMeta As ClassControlCreator.ControlMetadata = oLookupControl.Tag
oMeta.IsDirty = True
MyValidationLogger.Debug($"LookupControl [{oMeta.Name}] marked as dirty")
listChangedLookup.Add(oLookupControl.Name)
Else
listChangedLookup.Add(oLookup.Name) listChangedLookup.Add(oLookup.Name)
End If
ControlCreator.GridTables_HandleControlValueChange(PanelValidatorControl, DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER) ControlCreator.GridTables_HandleControlValueChange(PanelValidatorControl, DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER)
'Verschiebt den Fokus auf das nächste Control
Dim oFound As Boolean = False Dim oFound As Boolean = False
For Each oString As String In listofControls For Each oString As String In listofControls
If oString = oLookup.Name And oFound = False Then If oString = oLookup.Name And oFound = False Then