From 0f936c71e6f11ac502d5f10d7d2b5fd0efda3563 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 30 Jan 2026 12:53:01 +0100 Subject: [PATCH] Speed Otimizing Lookp etc --- app/TaskFlow/frmValidator.vb | 146 ++++++++++++++++++++++++----------- 1 file changed, 101 insertions(+), 45 deletions(-) diff --git a/app/TaskFlow/frmValidator.vb b/app/TaskFlow/frmValidator.vb index 3385134..c620dba 100644 --- a/app/TaskFlow/frmValidator.vb +++ b/app/TaskFlow/frmValidator.vb @@ -127,6 +127,7 @@ Public Class frmValidator Private ReadOnly _SqlDataCache As New Dictionary(Of String, DataTable)(StringComparer.OrdinalIgnoreCase) Private ReadOnly _SqlScalarCache As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase) Private _SqlControlsByGuid As Dictionary(Of Integer, List(Of DataRow)) + Private _LookupControlsByRepository As Dictionary(Of RepositoryItemLookupControl3, LookupControl3) Private Class Translation_Strings Inherits My.Resources.frmValidator_Strings End Class @@ -934,6 +935,7 @@ Public Class frmValidator Try 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" DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { .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.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 MyLookupControl.Properties.SelectedValues = New List(Of String) From {oControlRow.Item("DEFAULT_VALUE")} End If oMyControl = MyLookupControl + _LookupControlsByRepository(MyLookupControl.Properties) = MyLookupControl 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 oExpression = $"SQL_UEBERPRUEFUNG like '%#CTRL#{oMyControl.Name}%'" DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) If oFilteredData.Rows.Count >= 1 Then 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 End If @@ -1158,22 +1196,17 @@ Public Class frmValidator DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) If oFilteredData.Rows.Count >= 1 Then 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 End If - oFilteredData = DT_CONTROLS.Clone() oExpression = $"GUID = {oControlRow.Item("GUID")} and Len(SET_CONTROL_DATA) > 0" DT_CONTROLS.Select(oExpression).CopyToDataTable(oFilteredData, LoadOption.PreserveChanges) If oFilteredData.Rows.Count = 1 Then - 'AddHandler lookup.EditValueChanged, AddressOf onLookUp1 AddHandler MyLookupControl.Properties.SelectedValuesChanged, AddressOf onLookUpselectedValue_Control2Set End If oFilteredData = DT_CONTROLS.Clone() - ' End If - AddHandler MyLookupControl.GotFocus, Sub(sender As Control, e As EventArgs) If DirectCast(MyLookupControl.Tag, ClassControlCreator.ControlMetadata).ReadOnly = False Then MyLookupControl.BackColor = Color.LightSteelBlue @@ -1186,11 +1219,6 @@ Public Class frmValidator End Sub End If - - - 'Return filteredData - 'AddHandler lookup.Leave, AddressOf onLookUp0 - Case "CHK" oControlInfo = "CHK#" & oControlInfo oMyControl = ControlCreator.CreateExisingCheckbox(oControlRow, False) @@ -1341,13 +1369,18 @@ Public Class frmValidator Exit Sub End If - Dim oTextbox As BaseEdit = sender - Dim oMeta As ClassControlCreator.ControlMetadata = oTextbox.Tag + Dim oTextbox As BaseEdit = TryCast(sender, BaseEdit) + If oTextbox Is Nothing Then + Exit Sub + End If - If Not oMeta.IsDirty Then - oMeta.IsDirty = True - MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty") + Dim oMeta As ClassControlCreator.ControlMetadata = TryCast(oTextbox.Tag, ClassControlCreator.ControlMetadata) + If oMeta Is Nothing OrElse oMeta.IsDirty Then + Exit Sub End If + + oMeta.IsDirty = True + MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty") End Sub Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs) @@ -1618,22 +1651,32 @@ Public Class frmValidator If _FormLoaded = False Then Exit Sub End If + + If SelectedValues Is Nothing OrElse SelectedValues.Count < 1 Then + MyValidationLogger.Debug("Attention: onLookUpselectedValue: SelectedValues.Count <> 1 ") + Exit Sub + End If + Dim oRepositoryItem As RepositoryItemLookupControl3 = sender - Dim oLookup As LookupControl3 = oRepositoryItem.OwnerEdit + 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_EnablingControls(oLookup, SelectedValues) + LookupControl_DependingColumn(oLookup, SelectedValues) - Try - If Not IsNothing(SelectedValues) Then - If SelectedValues.Count >= 1 Then - LookupControl_DependingControls(oLookup, SelectedValues) - LookupControl_EnablingControls(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 MyValidationLogger.Warn("Unexpected error in onLookUpselectedValue - " + ex.Message) MyValidationLogger.Error(ex) @@ -1647,22 +1690,35 @@ Public Class frmValidator Try Dim oLookup As RepositoryItemLookupControl3 = sender - ' NEU: Dirty-Flag setzen - Suche den zugehörigen LookupControl - For Each oControl In PanelValidatorControl.Controls - If TypeOf oControl Is LookupControl3 Then - Dim oLookupControl As LookupControl3 = DirectCast(oControl, LookupControl3) - If oLookupControl.Properties Is oLookup Then - Dim oMeta As ClassControlCreator.ControlMetadata = oLookupControl.Tag - oMeta.IsDirty = True - MyValidationLogger.Debug($"LookupControl [{oMeta.Name}] marked as dirty") - Exit For + 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 + If TypeOf oControl Is LookupControl3 Then + Dim tmp As LookupControl3 = DirectCast(oControl, LookupControl3) + If tmp.Properties Is oLookup Then + oLookupControl = tmp + Exit For + End If End If - End If - Next - listChangedLookup.Add(oLookup.Name) + 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) + End If 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 For Each oString As String In listofControls If oString = oLookup.Name And oFound = False Then