Verbesserungen an SQL-Handling und UI-Logik

- 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.
This commit is contained in:
Developer01
2026-06-02 13:03:15 +02:00
parent 6261ad5996
commit 3c3f883b66
5 changed files with 145 additions and 115 deletions

View File

@@ -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

View File

@@ -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
'

View File

@@ -1518,91 +1518,55 @@
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
</value>
</data>
<data name="TreeList_Cockpit.Size" type="System.Drawing.Size, System.Drawing">
@@ -1715,7 +1679,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw
CAAAAk1TRnQBSQFMAgEBAgEAAWgBDAFoAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAAXABDAFwAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View File

@@ -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}]")

View File

@@ -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