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