From f837c8bf7d36f03bdba1014176b005f3efadab77 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Wed, 1 Jul 2026 14:58:05 +0200 Subject: [PATCH] =?UTF-8?q?Wix=20Optimierung,=20Cockpit=20Monitoring=20?= =?UTF-8?q?=C3=B6ffnen=20und=20Doppelklick=20TreeView?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/SetupVS19/Product.wxs | 576 ++++++++++++++++++++------------------ app/TaskFlow/frmMain.resx | 99 ++++--- app/TaskFlow/frmMain.vb | 165 ++++++++++- 3 files changed, 508 insertions(+), 332 deletions(-) diff --git a/app/SetupVS19/Product.wxs b/app/SetupVS19/Product.wxs index 7deea1d..d3b1f8c 100644 --- a/app/SetupVS19/Product.wxs +++ b/app/SetupVS19/Product.wxs @@ -6,8 +6,8 @@ - - + - - - + + + - - + + - + + - - - - + + + + - - - - + + + + + + - - - - - - + + + - - - + + - - - - - - + + - - - - + + + + - - - + + - - - - + + + + - + - - - - - + - - - - - - - + + + + + + - - - + + + - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + @@ -140,183 +133,226 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - + - - DISABLE_DESKTOP_ICON - - + + DISABLE_DESKTOP_ICON + + - - DISABLE_STARTMENU_ICON - - + + DISABLE_STARTMENU_ICON + + @@ -339,39 +375,39 @@ - - - + + + - - - - - + + + + 1 - 1 - 1 - 1 - 1 - - + + \ No newline at end of file diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx index 6e32506..b548838 100644 --- a/app/TaskFlow/frmMain.resx +++ b/app/TaskFlow/frmMain.resx @@ -1518,55 +1518,54 @@ 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 @@ -1679,7 +1678,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw - CAAAAk1TRnQBSQFMAgEBAgEAAXABDAFwAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAAXgBDAF4AQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index e06129c..9e7d109 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -4585,6 +4585,8 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G Exit Function End If + RibbonPageGroup7.Visible = False + FRONTEND_ACTION = NAVBAR_CLICKED Timer_Inactivity_Reset_Disable("TreeList1_FocusedNodeChanged") COCKPIT_CONFIG_ID = oCockpitConfigID @@ -4638,7 +4640,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G RefreshHelper.LoadViewInfo() End If End If - + RibbonPageGroup7.Visible = True Case 1 If oFkProfileId Is Nothing OrElse IsDBNull(oFkProfileId) Then LOGGER.Warn("TreeList_Cockpit: TYPE_ID=1 but FK_PROFILE_ID is Nothing/DBNull") @@ -4707,23 +4709,17 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G COCKPIT_MONITOR_ID = oMonitorIdInt COCKPIT_MONITOR_CAPTION = oNode.GetValue("NAME") - Dim oHandleMonitor As Object = Nothing - Dim overlayMonitor As Boolean = False - If Not _overlayActive Then - oHandleMonitor = SplashScreenManager.ShowOverlayForm(Me) - _overlayActive = True - overlayMonitor = True - End If + ' ✅ KEIN Overlay bei Monitor-Öffnung + ' Overlay nur bei Datenlade-Operationen (Case 0, 1) + Me.Cursor = Cursors.WaitCursor Try Dim newMonitor As New frmMonitor(oMonitorIdInt) newMonitor.Show() + newMonitor.Activate() + newMonitor.BringToFront() Finally Me.Cursor = Cursors.Default - If overlayMonitor Then - _overlayActive = False - SplashScreenManager.CloseOverlayForm(oHandleMonitor) - End If End Try Case 3 Dim oCHART_ID As Object = oNode.GetValue("FK_CHART_ID") @@ -4834,4 +4830,149 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G LOGGER.Error(ex) End Try End Sub + + Private Async Sub TreeList_Cockpit_DoubleClick(sender As Object, e As EventArgs) Handles TreeList_Cockpit.DoubleClick + Try + Dim oFocusedNode As DevExpress.XtraTreeList.Nodes.TreeListNode = TreeList_Cockpit.FocusedNode + If oFocusedNode Is Nothing Then + LOGGER.Debug("TreeList_Cockpit_DoubleClick: No focused node") + Exit Sub + End If + + Dim oTypeId As Object = oFocusedNode.GetValue("TYPE_ID") + If oTypeId Is Nothing OrElse IsDBNull(oTypeId) Then + LOGGER.Debug("TreeList_Cockpit_DoubleClick: TYPE_ID is Nothing/DBNull - skipping") + Exit Sub + End If + + Dim oTypeIdInt As Integer = CInt(oTypeId) + + ' Nur bei Profil-Knoten (TYPE_ID = 1) Validator öffnen + If oTypeIdInt = 1 Then + Dim oFkProfileId As Object = oFocusedNode.GetValue("FK_PROFILE_ID") + If oFkProfileId Is Nothing OrElse IsDBNull(oFkProfileId) Then + LOGGER.Warn("TreeList_Cockpit_DoubleClick: TYPE_ID=1 but FK_PROFILE_ID is Nothing/DBNull") + Exit Sub + End If + + Dim oProfileId As Integer = CInt(oFkProfileId) + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: Opening validator for profile ID [{oProfileId}]") + + ' ===== PROFIL-DATEN INS GRID LADEN (FALLS NOCH NICHT GELADEN) ===== + ' Wenn das Grid aktuell leer ist oder ein anderes Profil zeigt, müssen wir erst laden + If GRID_LOAD_TYPE <> $"PROFILE#{oProfileId}" OrElse DT_CURR_WF_ITEMS Is Nothing OrElse DT_CURR_WF_ITEMS.Rows.Count = 0 Then + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: Grid does not show profile [{oProfileId}] - loading it first") + + CURRENT_CLICKED_PROFILE_ID = oProfileId + + ' Profil-Titel setzen (ohne Count-Suffix) + Dim oProfileTitle As Object = oFocusedNode.GetValue("NAME") + Dim oCleanProfileTitle As String = oProfileTitle?.ToString() + Dim oSuffixMatch = System.Text.RegularExpressions.Regex.Match(oCleanProfileTitle, "^(.*)\s+\(\d+\)$") + If oSuffixMatch.Success Then + oCleanProfileTitle = oSuffixMatch.Groups(1).Value.Trim() + End If + CURRENT_CLICKED_PROFILE_TITLE = oCleanProfileTitle + + GRID_LOAD_TYPE = $"PROFILE#{oProfileId}" + + ' Profil-Daten laden + Await Decide_Load(False, True) + + ' Warten bis DT_CURR_WF_ITEMS gefüllt ist + If DT_CURR_WF_ITEMS Is Nothing OrElse DT_CURR_WF_ITEMS.Rows.Count = 0 Then + LOGGER.Warn($"TreeList_Cockpit_DoubleClick: No workflow items found for profile [{oProfileId}]") + Dim omsg = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, oCleanProfileTitle) + FormHelper.ShowInfoMessage(omsg, omsgTitleAttention) + Exit Sub + End If + End If + + ' ===== DOCIDS AUS DT_CURR_WF_ITEMS SAMMELN ===== + Dim oIds As New List(Of Integer) + + If DT_CURR_WF_ITEMS IsNot Nothing AndAlso DT_CURR_WF_ITEMS.Columns.Contains("DocID") Then + For Each oRow As DataRow In DT_CURR_WF_ITEMS.Rows + Dim oDocId As Object = oRow("DocID") + If oDocId IsNot Nothing AndAlso IsNumeric(oDocId) Then + oIds.Add(CInt(oDocId)) + End If + Next + + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: Collected [{oIds.Count}] DocIDs from DT_CURR_WF_ITEMS") + Else + LOGGER.Warn("TreeList_Cockpit_DoubleClick: DT_CURR_WF_ITEMS is Nothing or has no DocID column") + Exit Sub + End If + + ' ===== VALIDIERUNG: MINDESTENS 1 WORKFLOW ===== + If oIds.Count = 0 Then + Dim omsg = String.Format(S.System_konnte_die_Profilworkflows_nicht_auswerten_, vbNewLine) + FormHelper.ShowInfoMessage(omsg, omsgTitleAttention) + Exit Sub + End If + + ' ===== VALIDIERUNG: MAXIMUM 1000 WORKFLOWS ===== + If oIds.Count > 1000 Then + Dim omsg = "You chose more than 1000 Workflows. Please select fewer items." + FormHelper.ShowInfoMessage(omsg, omsgTitleAttention) + Exit Sub + End If + + ' ===== DB-OPERATIONEN: TABELLE LEEREN UND NEU BEFÜLLEN ===== + LOGGER.Debug("TreeList_Cockpit_DoubleClick: Cleaning up queued DocIds...") + Dim oDelete = $"DELETE FROM TBPM_VALIDATION_PROFILE_GROUP_USER WHERE UserID = {USER_ID}" + + If DatabaseFallback.ExecuteNonQueryECM(oDelete) = True Then + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: Adding [{oIds.Count}] queued DocIds...") + + Dim oInsertBatch As New System.Text.StringBuilder() + oInsertBatch.AppendLine("INSERT INTO TBPM_VALIDATION_PROFILE_GROUP_USER ([PROFIL_ID],[DocID],[UserID],[ADDED_WHO]) VALUES") + + For i As Integer = 0 To oIds.Count - 1 + If i > 0 Then oInsertBatch.Append(",") + oInsertBatch.AppendLine($"({oProfileId},{oIds(i)},{USER_ID},'{USER_USERNAME}')") + Next + + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: Batch-Insert SQL: {oInsertBatch.ToString()}") + DatabaseFallback.ExecuteNonQueryECM(oInsertBatch.ToString()) + End If + + ' ===== VALIDATOR IM GRUPPEN-MODUS ÖFFNEN ===== + CURRENT_ProfilGUID = oProfileId + CURRENT_CLICKED_PROFILE_ID = oProfileId + + ' Profil-Titel setzen (ohne Count-Suffix) + Dim oProfileTitle2 As Object = oFocusedNode.GetValue("NAME") + Dim oCleanProfileTitle2 As String = oProfileTitle2?.ToString() + Dim oSuffixMatch2 = System.Text.RegularExpressions.Regex.Match(oCleanProfileTitle2, "^(.*)\s+\(\d+\)$") + If oSuffixMatch2.Success Then + oCleanProfileTitle2 = oSuffixMatch2.Groups(1).Value.Trim() + End If + CURRENT_CLICKED_PROFILE_TITLE = oCleanProfileTitle2 + + ' ===== WICHTIG: KEIN spezifisches Dokument laden (wie bei CMGROUP) ===== + CURRENT_JUMP_DOC_GUID = 0 + CURRENT_DOC_GUID = 0 + + ' Cursor setzen + Me.Cursor = Cursors.WaitCursor + Try + ' ===== DIREKTER AUFRUF OHNE GRID-KONTEXT ===== + ' Load_Profil_from_Grid öffnet den Validator im Gruppen-Modus + Load_Profil_from_Grid(oProfileId) + Finally + Me.Cursor = Cursors.Default + End Try + Else + LOGGER.Debug($"TreeList_Cockpit_DoubleClick: TYPE_ID=[{oTypeIdInt}] - no action for double-click") + End If + + Catch ex As Exception + LOGGER.Error(ex) + Me.Cursor = Cursors.Default + End Try + End Sub + + End Class \ No newline at end of file