Optimierung der CONTROL_ACTIVE-Logik und SQL-Abfragen

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.
This commit is contained in:
Developer01
2026-08-10 10:19:54 +02:00
parent bbef9ee886
commit 5b71a9b9c2
3 changed files with 18 additions and 12 deletions

View File

@@ -906,7 +906,8 @@ Public Class frmFormDesigner
UpdateSingleValue("REGEX_MESSAGE_DE", newValue) UpdateSingleValue("REGEX_MESSAGE_DE", newValue)
Case "Active" 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" Case "CtrlImage"
Dim myPath As ImageValue = newValue Dim myPath As ImageValue = newValue
@@ -972,10 +973,17 @@ Public Class frmFormDesigner
escapedValue = $"'{v.Value.Replace("'", "''")}'" escapedValue = $"'{v.Value.Replace("'", "''")}'"
'UpdateSingleValue("CONNECTION_ID", v.ConnectionId) 'UpdateSingleValue("CONNECTION_ID", v.ConnectionId)
ElseIf TypeOf value Is Boolean Then
If escapedValue = False Then
escapedValue = 0
Else
escapedValue = 1
End If
End If End If
Try 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.Visibility = DevExpress.XtraBars.BarItemVisibility.Always
tslblAenderungen.Caption = "Änderungen gespeichert - " & Now tslblAenderungen.Caption = "Änderungen gespeichert - " & Now
If columnName.ToUpper = "CTRL_TEXT" Then If columnName.ToUpper = "CTRL_TEXT" Then
@@ -984,6 +992,8 @@ Public Class frmFormDesigner
End If End If
CHANGES_FORM_DESIGN = True CHANGES_FORM_DESIGN = True
Return True Return True
Else
LOGGER.Info($"UpdateSingleValue - Fehler beim Speichern von Control (Id: {guid}, column: {columnName}): {vbCrLf}{upd}")
End If End If
Return False Return False

View File

@@ -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)) 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 { BASEDATA_TBPM_PROFILE_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = String.Format("LANGUAGE = '{0}'", {USER_LANGUAGE}) .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 If pMode = "Load" Then
DTVWCONTROL_INDEX = DTVWCONTROLS_INDEX.Clone() DTVWCONTROL_INDEX = DTVWCONTROLS_INDEX.Clone()
End If 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)) DTCONTROLS_WITH_SQL = DatabaseFallback.GetDatatable("DTCONTROLS_WITH_SQL", New GetDatatableOptions(oSQL, DatabaseType.ECM))
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(85) If pMode = "bwBasicData" Then bwBasicData.ReportProgress(85)

View File

@@ -1401,7 +1401,6 @@ Public Class frmValidator
Dim oSQL As String Dim oSQL As String
Dim oFilter As String = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}" Dim oFilter As String = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}"
DT_CONTROLS = GetControlMetaBySql(oFilter, "Y_LOC, X_LOC") DT_CONTROLS = GetControlMetaBySql(oFilter, "Y_LOC, X_LOC")
' ========== NEU: Einmalige Gruppierung für SetControlValues_FromControl ========== ' ========== NEU: Einmalige Gruppierung für SetControlValues_FromControl ==========
If DT_CONTROLS IsNot Nothing AndAlso DT_CONTROLS.Rows.Count > 0 Then If DT_CONTROLS IsNot Nothing AndAlso DT_CONTROLS.Rows.Count > 0 Then
_CachedControlsBySetControlData = New Dictionary(Of Integer, DataRow)() _CachedControlsBySetControlData = New Dictionary(Of Integer, DataRow)()
@@ -1414,13 +1413,12 @@ Public Class frmValidator
' ========== ENDE ========== ' ========== 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 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 { DT_COLUMNS_GRID = DatabaseFallback.GetDatatable("TBPM_CONTROL_TABLE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID} AND LANG_CODE = '{USER_LANGUAGE}' ", .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID} AND LANG_CODE = '{USER_LANGUAGE}' ",
.SortByColumn = "SEQUENCE" .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 = 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 { DT_COLUMNS_GRID_WITH_SQL = DatabaseFallback.GetDatatable("DTGRID_SQL_DEFINITION", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}", .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}",
@@ -1446,7 +1444,6 @@ Public Class frmValidator
LEN(T.SQL_COMMAND) > 0 AND LEN(T.SQL_COMMAND) > 0 AND
T.SQL_COMMAND LIKE '%{#CTRL%' T.SQL_COMMAND LIKE '%{#CTRL%'
ORDER BY T.SEQUENCE" 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 = 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 { DT_COLUMNS_GRID_WITH_SQL_WITH_CTRL_PLACEHOLDER = DatabaseFallback.GetDatatable("DTGRID_SQL_DEFINITION", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}", .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}",
@@ -3695,15 +3692,14 @@ Public Class frmValidator
' Fallback zu SQL ' Fallback zu SQL
Dim query As String Dim query As String
If String.IsNullOrWhiteSpace(filter) Then If String.IsNullOrWhiteSpace(filter) Then
query = "SELECT * FROM TBPM_PROFILE_CONTROLS" query = "SELECT * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1"
Else Else
query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE {filter}" query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND {filter}"
End If End If
If Not String.IsNullOrWhiteSpace(SortBy) Then If Not String.IsNullOrWhiteSpace(SortBy) Then
query &= $" ORDER BY {SortBy}" query &= $" ORDER BY {SortBy}"
End If End If
dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM)) dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM))
If dt IsNot Nothing Then If dt IsNot Nothing Then
_CachedSqlDataCache(cacheKey) = dt _CachedSqlDataCache(cacheKey) = dt