From 3c3f883b66b728a02dc8a88651b6715eb0c0aa1c Mon Sep 17 00:00:00 2001 From: Developer01 Date: Tue, 2 Jun 2026 13:03:15 +0200 Subject: [PATCH] Verbesserungen an SQL-Handling und UI-Logik MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Neue Methode `frmInvDashboard_Shown` und `frmMonitor_Shown`, um sicherzustellen, dass die Formulare nach dem Anzeigen in den Vordergrund gebracht werden. - Aktualisierung der Bildressourcen in `frmMain.Designer.vb` und `frmMain.resx`. - Verbesserte SQL-Fehlerbehandlung in `LoadOverviewData` und Einführung der Variablen `isCustomSQL`. - Zusätzliche Platzhalterformate für `USER_ID` in `PrepareSQLWithReplacements`. - Gruppierungen in Profilansichten werden entfernt, und Gruppierungen werden nur für `OVERVIEW`-Ansichten erstellt. - Verbesserte Logik für das Öffnen von `frmMonitor` und `frmInvDashboard`, einschließlich Overlay-Anzeige und Fokus-Restore. --- app/TaskFlow/frmInvDashboard.vb | 4 + app/TaskFlow/frmMain.Designer.vb | 8 +- app/TaskFlow/frmMain.resx | 136 ++++++++++++------------------- app/TaskFlow/frmMain.vb | 111 +++++++++++++++++++------ app/TaskFlow/frmMonitor.vb | 1 + 5 files changed, 145 insertions(+), 115 deletions(-) diff --git a/app/TaskFlow/frmInvDashboard.vb b/app/TaskFlow/frmInvDashboard.vb index dbbffcc..618d4b7 100644 --- a/app/TaskFlow/frmInvDashboard.vb +++ b/app/TaskFlow/frmInvDashboard.vb @@ -424,4 +424,8 @@ Partial Public Class frmInvDashboard BarButtonItemTKredExcel.Enabled = True BarButtonItemTKredPdf.Enabled = True End Sub + + Private Sub frmInvDashboard_Shown(sender As Object, e As EventArgs) Handles Me.Shown + Me.BringToFront() + End Sub End Class \ No newline at end of file diff --git a/app/TaskFlow/frmMain.Designer.vb b/app/TaskFlow/frmMain.Designer.vb index 395ca02..2d4de9c 100644 --- a/app/TaskFlow/frmMain.Designer.vb +++ b/app/TaskFlow/frmMain.Designer.vb @@ -809,10 +809,10 @@ Partial Class frmMain ' resources.ApplyResources(Me.ImageCollection1, "ImageCollection1") Me.ImageCollection1.ImageStream = CType(resources.GetObject("ImageCollection1.ImageStream"), DevExpress.Utils.ImageCollectionStreamer) - Me.ImageCollection1.Images.SetKeyName(0, "splittablecells_32x32.png") - Me.ImageCollection1.Images.SetKeyName(1, "icons8-microsoft-to-do-app-50.png") - Me.ImageCollection1.Images.SetKeyName(2, "bar2_32x32.png") - Me.ImageCollection1.Images.SetKeyName(3, "gaugestylefullcircular_32x32.png") + Me.ImageCollection1.Images.SetKeyName(0, "Overview_small_001.png") + Me.ImageCollection1.Images.SetKeyName(1, "Profile_small_001.png") + Me.ImageCollection1.Images.SetKeyName(2, "Monitor_small_001.png") + Me.ImageCollection1.Images.SetKeyName(3, "Dashboard_small_001.png") ' 'GridControlWorkflows ' diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx index 4dff710..6e32506 100644 --- a/app/TaskFlow/frmMain.resx +++ b/app/TaskFlow/frmMain.resx @@ -1518,91 +1518,55 @@ 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 @@ -1715,7 +1679,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw - CAAAAk1TRnQBSQFMAgEBAgEAAWgBDAFoAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAXABDAFwAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index d48a380..972dca9 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -1792,28 +1792,32 @@ Public Class frmMain ' ========== SQL VORBEREITEN ========== Dim oSQLOverview As String + Dim isCustomSQL As Boolean = False If Not String.IsNullOrWhiteSpace(CUSTOM_OVERVIEW_SQL) Then - LOGGER.Debug($"[LoadOverviewData] Using CUSTOM_OVERVIEW_SQL from TreeList node") + LOGGER.Debug($"[LoadOverviewData] Using CUSTOM_OVERVIEW_SQL from TreeList node [{CUSTOM_OVERVIEW_SQL}]") oSQLOverview = CUSTOM_OVERVIEW_SQL + isCustomSQL = True ElseIf Not String.IsNullOrWhiteSpace(_lastUsedOverviewSQL) Then LOGGER.Debug($"[LoadOverviewData] CUSTOM_OVERVIEW_SQL is empty - using _lastUsedOverviewSQL (e.g. after ValidatorClosed)") oSQLOverview = _lastUsedOverviewSQL + isCustomSQL = True Else oSQLOverview = BASEDATA_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") End If - If IsDBNull(oSQLOverview) OrElse Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then - If IsDBNull(oSQLOverview) Then - LOGGER.Warn("Overview SQL is Null - cannot load overview data") - ElseIf Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then - LOGGER.Warn("Overview SQL is not properly configured - missing GROUP_TEXT column - cannot load overview data") - LOGGER.Warn($"Overview SQL so far: {oSQLOverview}") - Else - LOGGER.Warn("Overview SQL is not properly configured (missing, empty or GROUP_TEXT column not included) - cannot load overview data") - LOGGER.Warn($"Overview SQL so far: {oSQLOverview}") - End If - + If IsDBNull(oSQLOverview) Then + LOGGER.Warn("Overview SQL is Null - cannot load overview data") + NO_WORKFLOW_ITEMS = True + GridControlWorkflows.Visible = False + bindsourcegrid.DataSource = Nothing + GridControlWorkflows.DataSource = Nothing + Return False + End If + ' GROUP_TEXT-Prüfung nur für Standard-SQL (nicht für Custom/TreeList-SQL) + If Not isCustomSQL AndAlso Not oSQLOverview.ToString.Contains("GROUP_TEXT") Then + LOGGER.Warn("Overview SQL is not properly configured - missing GROUP_TEXT column - might not load overview data") + LOGGER.Warn($"Overview SQL so far: {oSQLOverview}") NO_WORKFLOW_ITEMS = True GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing @@ -2011,10 +2015,15 @@ Public Class frmMain Private Function PrepareSQLWithReplacements(oSQL As String, oProfileID As Integer) As String oSQL = clsPatterns.ReplaceInternalValues(oSQL) oSQL = clsPatterns.ReplaceUserValues(oSQL) - oSQL = oSQL.Replace("@USER_ID", USER_ID) + LOGGER.Debug("PrepareSQLWithReplacements - Original SQL: " & oSQL) oSQL = oSQL.Replace("@USERNAME", USER_USERNAME) oSQL = oSQL.Replace("@MACHINE_NAME", System.Environment.MachineName) oSQL = oSQL.Replace("@DATE", Now.ToShortDateString) + ' ===== ZUSÄTZLICHE PLATZHALTER-FORMATE FÜR USER_ID ===== + oSQL = oSQL.Replace("{#USER#USER_ID}", USER_ID) + oSQL = oSQL.Replace("#USER#USER_ID", USER_ID) + oSQL = oSQL.Replace("@USER_ID", USER_ID) + LOGGER.Debug("PrepareSQLWithReplacements - SQL after replacements: " & oSQL) If oProfileID = 0 Then If GRID_LOAD_TYPE = "OVERVIEW" Then LOGGER.Debug("PrepareSQLWithReplacements called with oProfileID = 0 in OVERVIEW context") @@ -2147,6 +2156,13 @@ Public Class frmMain RestoreLayout() COLUMNS_INVISIBLE() + ' ===== GRUPPIERUNG FÜR PROFIL-ANSICHT ENTFERNEN ===== + ' Profil-Ansichten dürfen nicht gruppiert sein - Gruppierung ggf. aus gespeichertem Layout entfernen + If GridViewWorkflows.GroupCount > 0 Then + LOGGER.Debug($"CreateBasicViewForProfile: Clearing [{GridViewWorkflows.GroupCount}] group(s) from restored layout for profile view") + GridViewWorkflows.ClearGrouping() + End If + ' Icon-Spalte konfigurieren If TL_ICON = True Then Try @@ -3172,6 +3188,7 @@ Public Class frmMain Private Async Function GridLayout_Reset(Also_decideload As Boolean) As Tasks.Task + FRONTEND_ACTION = "RESET_LAYOUT" Await Reset_GridLayout(False) If Also_decideload Then @@ -3180,10 +3197,18 @@ Public Class frmMain GridViewWorkflows.OptionsView.ShowViewCaption = False SaveGridLayout() - If GridViewWorkflows.GroupCount = 0 And Not IsNothing(GridViewWorkflows.Columns("GROUP_TEXT")) Then - LOGGER.Info("NO GROUPS AFTER GridLayout_Reset Load...") - Create_GroupBy_Parts() + + ' ===== GRUPPIERUNG NUR FÜR OVERVIEW ERSTELLEN ===== + ' Bei Profil-Ansichten (GRID_LOAD_TYPE = PROFILE#xxx) darf nicht gruppiert werden + If GRID_LOAD_TYPE = "OVERVIEW" Then + If GridViewWorkflows.GroupCount = 0 AndAlso Not IsNothing(GridViewWorkflows.Columns("GROUP_TEXT")) Then + LOGGER.Info("NO GROUPS AFTER GridLayout_Reset Load...") + Create_GroupBy_Parts() + End If + Else + LOGGER.Debug($"GridLayout_Reset: Skipping Create_GroupBy_Parts for non-OVERVIEW mode [{GRID_LOAD_TYPE}]") End If + GridBuilder.WithFontSizeDelta(CONFIG.Config.GridFontSizeDelta) If GridControlWorkflows.Visible = True And FormOpenClose = False Then RefreshHelper.LoadViewInfo() FRONTEND_ACTION = FA_NONE @@ -4611,23 +4636,59 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G Exit Function End If COCKPIT_MONITOR_ID = oMONITOR_ID - If Not Application.OpenForms().OfType(Of frmMonitor).Any Then - frmMonitor.Show() - Else - MsgBox("Monitor is already open!", MsgBoxStyle.Information, "Information") + + Dim oHandleMonitor As Object = Nothing + Dim overlayMonitor As Boolean = False + If Not _overlayActive Then + oHandleMonitor = SplashScreenManager.ShowOverlayForm(Me) + _overlayActive = True + overlayMonitor = True End If + Me.Cursor = Cursors.WaitCursor + Try + If Not Application.OpenForms().OfType(Of frmMonitor).Any Then + frmMonitor.Show() + End If + Finally + Me.Cursor = Cursors.Default + If overlayMonitor Then + _overlayActive = False + SplashScreenManager.CloseOverlayForm(oHandleMonitor) + End If + End Try + ' ✅ BeginInvoke stellt Activate() ans Ende der Message-Queue – + ' nach DevExpress' internem Fokus-Restore + Me.BeginInvoke(Sub() frmMonitor.Activate()) Case 3 Dim oCHART_ID As Object = oNode.GetValue("FK_CHART_ID") If oCHART_ID Is Nothing OrElse IsDBNull(oCHART_ID) Then - LOGGER.Warn($"TreeList_Cockpit: TYPE_ID=2 but FK_CHART_ID is Nothing/DBNull - PK_CFG_COCKPIT_DEFINITION_ID:[{oCockpitConfigID}]") + LOGGER.Warn($"TreeList_Cockpit: TYPE_ID=3 but FK_CHART_ID is Nothing/DBNull - PK_CFG_COCKPIT_DEFINITION_ID:[{oCockpitConfigID}]") Exit Function End If COCKPIT_CHART_ID = oCHART_ID - If Not Application.OpenForms().OfType(Of frmInvDashboard).Any Then - frmInvDashboard.Show() - Else - MsgBox("Dashboard is already open!", MsgBoxStyle.Information, "Information") + + Dim oHandleChart As Object = Nothing + Dim overlayChart As Boolean = False + If Not _overlayActive Then + oHandleChart = SplashScreenManager.ShowOverlayForm(Me) + _overlayActive = True + overlayChart = True End If + Me.Cursor = Cursors.WaitCursor + Try + If Not Application.OpenForms().OfType(Of frmInvDashboard).Any Then + frmInvDashboard.Show() + End If + Finally + Me.Cursor = Cursors.Default + If overlayChart Then + _overlayActive = False + SplashScreenManager.CloseOverlayForm(oHandleChart) + End If + End Try + ' ✅ BeginInvoke stellt Activate() ans Ende der Message-Queue – + ' nach DevExpress' internem Fokus-Restore + Me.BeginInvoke(Sub() frmInvDashboard.Activate()) Case Else LOGGER.Warn($"ProcessTreeListNodeAsync: Unhandled TYPE_ID [{oTypeIdInt}] - PK_CFG_COCKPIT_DEFINITION_ID:[{oCockpitConfigID}]") diff --git a/app/TaskFlow/frmMonitor.vb b/app/TaskFlow/frmMonitor.vb index b2affd6..88712a7 100644 --- a/app/TaskFlow/frmMonitor.vb +++ b/app/TaskFlow/frmMonitor.vb @@ -393,6 +393,7 @@ Public Class frmMonitor Private Sub frmMonitor_Shown(sender As Object, e As EventArgs) Handles Me.Shown FormShown = True Load_Detail() + Me.BringToFront() End Sub Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick