From bca424f50fc4fe8c198c61a14e31fbeb43da71e4 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Fri, 30 Jan 2026 14:40:02 +0100 Subject: [PATCH] Optimierungen --- app/TaskFlow/ClassControlCreator.vb | 2 +- app/TaskFlow/ModuleRuntimeVariables.vb | 2 +- app/TaskFlow/My Project/AssemblyInfo.vb | 2 +- app/TaskFlow/frmMain.resx | 2 +- app/TaskFlow/frmMain.vb | 44 ++++++++++++-- app/TaskFlow/frmValidator.vb | 76 +++++++++++++++++-------- 6 files changed, 96 insertions(+), 32 deletions(-) diff --git a/app/TaskFlow/ClassControlCreator.vb b/app/TaskFlow/ClassControlCreator.vb index 4506b94..900a027 100644 --- a/app/TaskFlow/ClassControlCreator.vb +++ b/app/TaskFlow/ClassControlCreator.vb @@ -332,7 +332,7 @@ Public Class ClassControlCreator End If If Not designMode Then - 'oControl.ReadOnly = oReadOnly + oControl.ReadOnly = oReadOnly oControl.TabStop = Not oReadOnly oControl.BackColor = IIf(oReadOnly, Color.LightGray, Color.White) diff --git a/app/TaskFlow/ModuleRuntimeVariables.vb b/app/TaskFlow/ModuleRuntimeVariables.vb index 1609192..3e75b92 100644 --- a/app/TaskFlow/ModuleRuntimeVariables.vb +++ b/app/TaskFlow/ModuleRuntimeVariables.vb @@ -34,7 +34,7 @@ Module ModuleRuntimeVariables Public Property BASEDATA_TBDD_COLUMNS_FORMAT As DataTable - + Public Property BASEDATA_TBPM_PROFILE_CONTROLS As DataTable Public Property CURRENT_ProfilGUID As Integer Public Property CURRENT_ProfilName As String diff --git a/app/TaskFlow/My Project/AssemblyInfo.vb b/app/TaskFlow/My Project/AssemblyInfo.vb index 3de242c..24e3408 100644 --- a/app/TaskFlow/My Project/AssemblyInfo.vb +++ b/app/TaskFlow/My Project/AssemblyInfo.vb @@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx index e7fc7d3..366b12d 100644 --- a/app/TaskFlow/frmMain.resx +++ b/app/TaskFlow/frmMain.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw - CAAAAk1TRnQBSQFMAgEBAgEAAYgBCwGIAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAZABCwGQAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index 48a9e68..4c58127 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -1289,6 +1289,8 @@ Public Class frmMain Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Dim refreshWasEnabled As Boolean = False Dim showLoadingPanel As Boolean = False + Dim useWaitCursorApplied As Boolean = False + Dim previousMessage As String = bsiMessage.Caption Try LOGGER.Debug($"Decide_Load: pIsFormLoad [{pIsFormLoad}] - ForceReload [{ForceReload}] - GRID_LOAD_TYPE [{GRID_LOAD_TYPE}] ") @@ -1308,11 +1310,15 @@ Public Class frmMain TimerRefresh.Enabled = False End If - If GridControlWorkflows.Visible Then - GridViewWorkflows.ShowLoadingPanel() - showLoadingPanel = True + If Me.UseWaitCursor = False Then + Me.UseWaitCursor = True + useWaitCursorApplied = True End If + bsiMessage.Caption = "Daten werden geladen..." + GridViewWorkflows.ShowLoadingPanel() + showLoadingPanel = True + TimerRefresh.Stop() FRONTEND_ACTION = "DECIDE_LOAD" @@ -1350,6 +1356,10 @@ Public Class frmMain If showLoadingPanel Then GridViewWorkflows.HideLoadingPanel() End If + If useWaitCursorApplied Then + Me.UseWaitCursor = False + End If + bsiMessage.Caption = previousMessage If refreshWasEnabled Then TimerRefresh.Enabled = True End If @@ -1880,13 +1890,26 @@ Public Class frmMain Dim viewUpdateStarted As Boolean = False Dim layoutRestored As Boolean = False Dim resetLayoutTriggered As Boolean = False + Dim showLoadingPanel As Boolean = False + Dim useWaitCursorApplied As Boolean = False + Dim previousMessage As String = bsiMessage.Caption + Dim loadingMessageApplied As Boolean = False GridControlWorkflows_Visible() GRID_LOAD_TYPE = "OVERVIEW" CURRENT_CLICKED_PROFILE_ID = 0 Try - bsiMessage.Caption = "" + If Me.UseWaitCursor = False Then + Me.UseWaitCursor = True + useWaitCursorApplied = True + End If + + bsiMessage.Caption = "Daten werden geladen..." + loadingMessageApplied = True + + GridViewWorkflows.ShowLoadingPanel() + showLoadingPanel = True If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False) @@ -2098,6 +2121,15 @@ Public Class frmMain If gridUpdateStarted Then GridControlWorkflows.EndUpdate() End If + If showLoadingPanel Then + GridViewWorkflows.HideLoadingPanel() + End If + If useWaitCursorApplied Then + Me.UseWaitCursor = False + End If + If loadingMessageApplied AndAlso bsiMessage.Caption = "Daten werden geladen..." Then + bsiMessage.Caption = previousMessage + End If oStopWatch.Done() End Try End Function @@ -2397,6 +2429,10 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G .FilterExpression = "TYPE = 'SQL'", .SortByColumn = "PROFILE_ID,TAB_INDEX" }) + oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS", {USER_LANGUAGE}) + BASEDATA_TBPM_PROFILE_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { + .FilterExpression = String.Format("LANGUAGE = '{0}'", {USER_LANGUAGE}) + }) If pMode = "Load" Then BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Clone() End If diff --git a/app/TaskFlow/frmValidator.vb b/app/TaskFlow/frmValidator.vb index c620dba..4b743d5 100644 --- a/app/TaskFlow/frmValidator.vb +++ b/app/TaskFlow/frmValidator.vb @@ -1006,6 +1006,7 @@ Public Class frmValidator AddHandler txt.GotFocus, AddressOf OnTextBoxFocus AddHandler txt.LostFocus, AddressOf OnTextBoxLostFocus AddHandler txt.KeyUp, AddressOf OnTextBoxKeyUp + AddHandler txt.KeyDown, AddressOf OnTextBoxKeyDown AddHandler txt.EditValueChanged, AddressOf OnTextBoxEditValueChanged oMyControl = txt @@ -1382,7 +1383,17 @@ Public Class frmValidator oMeta.IsDirty = True MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty") End Sub + Private Sub OnTextBoxKeyDown(sender As Object, e As KeyEventArgs) + Dim oTextBox As BaseEdit = TryCast(sender, BaseEdit) + If oTextBox Is Nothing Then + Exit Sub + End If + If oTextBox.ReadOnly AndAlso e.Control AndAlso e.KeyCode = Keys.X Then + e.Handled = True + e.SuppressKeyPress = True + End If + End Sub Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs) If _ControlHandleStarted = True Then _ControlHandleStarted = False @@ -1394,11 +1405,9 @@ Public Class frmValidator If (e.KeyCode = Keys.Return) Or (e.KeyCode = Keys.Tab) Or (e.KeyCode = Keys.Enter) Then Try - Dim CONTROL_ID = DirectCast(oTextBox.Tag, ClassControlCreator.ControlMetadata).Guid - Dim oSql = String.Format("SELECT NAME, CONNECTION_ID, SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} AND SQL_UEBERPRUEFUNG LIKE '%{1}%'", CURRENT_ProfilGUID, oTextBox.Name) Dim oFilter = $"PROFIL_ID = {CURRENT_ProfilGUID} AND SQL_UEBERPRUEFUNG LIKE '%{oTextBox.Name}%'" - Dim DTCONTROLS_UEBP As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS_SQL_UEP", oSql, oFilter) + Dim DTCONTROLS_UEBP As DataTable = GetControlMetaBySql(oFilter) If Not IsNothing(DTCONTROLS_UEBP) AndAlso DTCONTROLS_UEBP.Rows.Count > 0 Then For Each oRow As DataRow In DTCONTROLS_UEBP.Rows @@ -1597,14 +1606,12 @@ Public Class frmValidator Public Sub onDGVRowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs) Dim dgv As DataGridView = sender Try - Dim CONTROL_ID = DirectCast(dgv.Tag, ClassControlCreator.ControlMetadata).Guid - Dim sql = String.Format("select NAME,CONNECTION_ID,SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name) - Dim oFilter = String.Format("CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name) + Dim oFilter = String.Format("PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name) - Dim DT As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS", sql, oFilter) + Dim DTFilteredRows As DataTable = GetControlMetaBySql(oFilter) - If Not IsNothing(DT) And DT.Rows.Count > 0 Then - For Each ROW As DataRow In DT.Rows + If Not IsNothing(DTFilteredRows) And DTFilteredRows.Rows.Count > 0 Then + For Each ROW As DataRow In DTFilteredRows.Rows Try Dim displayboxname = ROW.Item("NAME").ToString If Not IsDBNull(ROW.Item("CONNECTION_ID")) And Not IsDBNull(ROW.Item("SQL_UEBERPRUEFUNG")) Then @@ -1612,9 +1619,6 @@ Public Class frmValidator Dim cellvalue = dgv.Rows(dgv.Rows.Count - 2).Cells(0).Value.ToString() sql_Statement = sql_Statement.ToString.Replace(dgv.Name, cellvalue) - 'Dim resultDT As DataTable = DatabaseFallback.GetDatatable(New GetDatatableOptions(sql_Statement, DatabaseType.ECM) With { - ' .ConnectionId = ROW.Item("CONNECTION_ID") - '}) Dim resultDT As DataTable = GetCachedDatatable(sql_Statement, ROW.Item("CONNECTION_ID")) If resultDT.Rows.Count >= 1 Then @@ -2354,11 +2358,9 @@ Public Class frmValidator 'Abschluss() Else Try - Dim CONTROL_ID = DirectCast(oCombobox.Tag, ClassControlCreator.ControlMetadata).Guid - Dim sql = String.Format("select NAME,CONNECTION_ID,SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} AND SQL_UEBERPRUEFUNG LIKE '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name) - Dim oFilter = String.Format("CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name) + Dim oFilter = String.Format("PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name) - Dim DT As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS", sql, oFilter) + Dim DT As DataTable = GetControlMetaBySql(oFilter) If Not IsNothing(DT) And DT.Rows.Count > 0 Then If _DependingControl_In_Action = True Then @@ -2608,17 +2610,43 @@ Public Class frmValidator End If End If End Sub - Private Function GetControlMetaBySql(tableName As String, sql As String, filter As String) As DataTable + Private Function GetControlMetaBySql(filter As String) As DataTable Dim dt As DataTable = Nothing - Dim cacheKey = $"META|{tableName}|{sql}|{filter}" + Dim cacheKey = $"META|{filter}" + + If _SqlDataCache.TryGetValue(cacheKey, dt) Then + Return dt + End If + + If BASEDATA_TBPM_PROFILE_CONTROLS IsNot Nothing Then + Try + If String.IsNullOrWhiteSpace(filter) Then + dt = BASEDATA_TBPM_PROFILE_CONTROLS.Copy() + Else + Dim rows = BASEDATA_TBPM_PROFILE_CONTROLS.Select(filter) + dt = BASEDATA_TBPM_PROFILE_CONTROLS.Clone() + If rows.Length > 0 Then + dt = rows.CopyToDataTable() + End If + End If - If Not _SqlDataCache.TryGetValue(cacheKey, dt) Then - dt = DatabaseFallback.GetDatatable(tableName, New GetDatatableOptions(sql, DatabaseType.ECM) With { - .FilterExpression = filter - }) - If dt IsNot Nothing Then _SqlDataCache(cacheKey) = dt - End If + Return dt + Catch ex As Exception + MyValidationLogger.Warn($"GetControlMetaBySql cache filter failed, fallback to DB: {ex.Message}") + End Try + End If + + Dim query As String + If String.IsNullOrWhiteSpace(filter) Then + query = "SELECT * FROM TBPM_PROFILE_CONTROLS" + Else + query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE {filter}" + End If + + dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM)) + If dt IsNot Nothing Then + _SqlDataCache(cacheKey) = dt End If Return dt