From 5b71a9b9c2dd0adea13039f1ee4692f1878f2db3 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Mon, 10 Aug 2026 10:19:54 +0200 Subject: [PATCH] Optimierung der CONTROL_ACTIVE-Logik und SQL-Abfragen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Logik für `CONTROL_ACTIVE` wurde in allen relevanten Klassen (`frmFormDesigner`, `frmMain`, `frmValidator`) vereinheitlicht. SQL-Abfragen wurden angepasst, um nur aktive Steuerelemente (`CONTROL_ACTIVE = 1`) zu berücksichtigen. - Refactoring der `UpdateSingleValue`-Methode zur besseren Lesbarkeit und Wartbarkeit. - Erweiterung der Datentypunterstützung für `Boolean` in `UpdateSingleValue`. - Verbesserung der Fehlerbehandlung bei SQL-Updates durch Logging und Variablen für komplexe SQL-Befehle. - Entfernung redundanter Kommentare und Optimierung der Abfragen für Effizienz und Konsistenz. - Allgemeine Verbesserungen der Codequalität. --- app/TaskFlow/frmFormDesigner.vb | 14 ++++++++++++-- app/TaskFlow/frmMain.vb | 4 ++-- app/TaskFlow/frmValidator.vb | 12 ++++-------- 3 files changed, 18 insertions(+), 12 deletions(-) diff --git a/app/TaskFlow/frmFormDesigner.vb b/app/TaskFlow/frmFormDesigner.vb index 14a91a7..4477283 100644 --- a/app/TaskFlow/frmFormDesigner.vb +++ b/app/TaskFlow/frmFormDesigner.vb @@ -906,7 +906,8 @@ Public Class frmFormDesigner UpdateSingleValue("REGEX_MESSAGE_DE", newValue) Case "Active" - UpdateSingleValue("CONTROL_ACTIVE", IIf(newValue = True, 1, 0)) + Dim oActive As Boolean = IIf(newValue = True, 1, 0) + UpdateSingleValue("CONTROL_ACTIVE", oActive) Case "CtrlImage" Dim myPath As ImageValue = newValue @@ -972,10 +973,17 @@ Public Class frmFormDesigner escapedValue = $"'{v.Value.Replace("'", "''")}'" 'UpdateSingleValue("CONNECTION_ID", v.ConnectionId) + ElseIf TypeOf value Is Boolean Then + If escapedValue = False Then + escapedValue = 0 + Else + escapedValue = 1 + End If End If Try - If DatabaseFallback.ExecuteNonQueryECM($"UPDATE TBPM_PROFILE_CONTROLS SET {columnName} = {escapedValue}, CHANGED_WHO = '{USER_USERNAME}' WHERE GUID = {guid}") = True Then + Dim upd = $"UPDATE TBPM_PROFILE_CONTROLS SET {columnName} = {escapedValue}, CHANGED_WHO = '{USER_USERNAME}' WHERE GUID = {guid}" + If DatabaseFallback.ExecuteNonQueryECM(upd) = True Then tslblAenderungen.Visibility = DevExpress.XtraBars.BarItemVisibility.Always tslblAenderungen.Caption = "Änderungen gespeichert - " & Now If columnName.ToUpper = "CTRL_TEXT" Then @@ -984,6 +992,8 @@ Public Class frmFormDesigner End If CHANGES_FORM_DESIGN = True Return True + Else + LOGGER.Info($"UpdateSingleValue - Fehler beim Speichern von Control (Id: {guid}, column: {columnName}): {vbCrLf}{upd}") End If Return False diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index 50f0d59..298b76a 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -3571,7 +3571,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G }) EnsureProfileSearchType(BASEDATA_DT_PROFILES_SEARCHES_DATA, "SQL", NameOf(BASEDATA_DT_PROFILES_SEARCHES_DATA)) - oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, '{0}' as LANGUAGE, * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK)", {USER_LANGUAGE}) + oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, '{0}' as LANGUAGE, * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK) WHERE CONTROL_ACTIVE = 1", {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}) }) @@ -3584,7 +3584,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G If pMode = "Load" Then DTVWCONTROL_INDEX = DTVWCONTROLS_INDEX.Clone() End If - oSQL = $"SELECT * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK) WHERE LEN(ISNULL(SQL_UEBERPRUEFUNG,'')) > 0 AND CTRL_TYPE <> 'BUTTON'" + oSQL = $"SELECT * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK) WHERE CONTROL_ACTIVE = 1 AND LEN(ISNULL(SQL_UEBERPRUEFUNG,'')) > 0 AND CTRL_TYPE <> 'BUTTON'" DTCONTROLS_WITH_SQL = DatabaseFallback.GetDatatable("DTCONTROLS_WITH_SQL", New GetDatatableOptions(oSQL, DatabaseType.ECM)) If pMode = "bwBasicData" Then bwBasicData.ReportProgress(85) diff --git a/app/TaskFlow/frmValidator.vb b/app/TaskFlow/frmValidator.vb index 8372ad6..66a676f 100644 --- a/app/TaskFlow/frmValidator.vb +++ b/app/TaskFlow/frmValidator.vb @@ -1401,7 +1401,6 @@ Public Class frmValidator Dim oSQL As String Dim oFilter As String = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}" DT_CONTROLS = GetControlMetaBySql(oFilter, "Y_LOC, X_LOC") - ' ========== NEU: Einmalige Gruppierung für SetControlValues_FromControl ========== If DT_CONTROLS IsNot Nothing AndAlso DT_CONTROLS.Rows.Count > 0 Then _CachedControlsBySetControlData = New Dictionary(Of Integer, DataRow)() @@ -1414,13 +1413,12 @@ Public Class frmValidator ' ========== ENDE ========== oSQL = $"SELECT IIF(LANG.CAPTION IS NULL,T.SPALTEN_HEADER,LANG.CAPTION) SPALTEN_HEADER_LANG, T.* from TBPM_CONTROL_TABLE T WITH (NOLOCK) INNER JOIN TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) ON T.CONTROL_ID = T1.GUID - LEFT JOIN (SELECT * FROM TBPM_CONTOL_TABLE_LANG WHERE LANG_CODE = '{USER_LANGUAGE}') LANG ON T.GUID = LANG.COL_ID WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY T.SEQUENCE" + LEFT JOIN (SELECT * FROM TBPM_CONTOL_TABLE_LANG WHERE LANG_CODE = '{USER_LANGUAGE}') LANG ON T.GUID = LANG.COL_ID WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY T.SEQUENCE" DT_COLUMNS_GRID = DatabaseFallback.GetDatatable("TBPM_CONTROL_TABLE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID} AND LANG_CODE = '{USER_LANGUAGE}' ", .SortByColumn = "SEQUENCE" }) - - oSQL = "SELECT T1.GUID As CONTROL_ID, T1.PROFIL_ID, T.CONNECTION_ID, T.SQL_COMMAND, T.SPALTENNAME,T.FORMATTYPE,T.FORMATSTRING, T.ADVANCED_LOOKUP from TBPM_CONTROL_TABLE T WITH (NOLOCK), TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = " & CURRENT_ProfilGUID & " AND LEN(T.SQL_COMMAND) > 0 ORDER BY T.SEQUENCE" + oSQL = "SELECT T1.GUID As CONTROL_ID, T1.PROFIL_ID, T.CONNECTION_ID, T.SQL_COMMAND, T.SPALTENNAME,T.FORMATTYPE,T.FORMATSTRING, T.ADVANCED_LOOKUP from TBPM_CONTROL_TABLE T WITH (NOLOCK), TBPM_PROFILE_CONTROLS T1 WITH (NOLOCK) WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = " & CURRENT_ProfilGUID & " AND LEN(T.SQL_COMMAND) > 0 ORDER BY T.SEQUENCE" 'DT_COLUMNS_GRID_WITH_SQL = DataASorDB.GetDatatable("DD_ECM", oSQL, "DTGRID_SQL_DEFINITION", $"PROFIL_ID = {CURRENT_ProfilGUID}", "SEQUENCE") DT_COLUMNS_GRID_WITH_SQL = DatabaseFallback.GetDatatable("DTGRID_SQL_DEFINITION", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}", @@ -1446,7 +1444,6 @@ Public Class frmValidator LEN(T.SQL_COMMAND) > 0 AND T.SQL_COMMAND LIKE '%{#CTRL%' ORDER BY T.SEQUENCE" - 'DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER = DataASorDB.GetDatatable("DD_ECM", oSQL, "DTGRID_SQL_DEFINITION", $"PROFIL_ID = {CURRENT_ProfilGUID}", "SEQUENCE") DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER = DatabaseFallback.GetDatatable("DTGRID_SQL_DEFINITION", New GetDatatableOptions(oSQL, DatabaseType.ECM) With { .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}", @@ -3695,15 +3692,14 @@ Public Class frmValidator ' Fallback zu SQL Dim query As String If String.IsNullOrWhiteSpace(filter) Then - query = "SELECT * FROM TBPM_PROFILE_CONTROLS" + query = "SELECT * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1" Else - query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE {filter}" + query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND {filter}" End If If Not String.IsNullOrWhiteSpace(SortBy) Then query &= $" ORDER BY {SortBy}" End If - dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM)) If dt IsNot Nothing Then _CachedSqlDataCache(cacheKey) = dt