diff --git a/app/TaskFlow/My Project/licenses.licx b/app/TaskFlow/My Project/licenses.licx index 81c59ed..1bfb691 100644 --- a/app/TaskFlow/My Project/licenses.licx +++ b/app/TaskFlow/My Project/licenses.licx @@ -1,15 +1,16 @@ -DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.Repository.RepositoryItemProgressBar, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraVerticalGrid.PropertyGridControl, DevExpress.XtraVerticalGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraEditors.LookUpEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraNavBar.NavBarControl, DevExpress.XtraNavBar.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraDataLayout.DataLayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemComboBox, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraDataLayout.DataLayoutControl, DevExpress.XtraLayout.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraVerticalGrid.PropertyGridControl, DevExpress.XtraVerticalGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraBars.Ribbon.RibbonControl, DevExpress.XtraBars.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraEditors.Repository.RepositoryItemProgressBar, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraCharts.ChartControl, DevExpress.XtraCharts.v21.2.UI, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a +DevExpress.XtraNavBar.NavBarControl, DevExpress.XtraNavBar.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/app/TaskFlow/Translations/frmMain_Strings.Designer.vb b/app/TaskFlow/Translations/frmMain_Strings.Designer.vb index cc4f09d..2958b7e 100644 --- a/app/TaskFlow/Translations/frmMain_Strings.Designer.vb +++ b/app/TaskFlow/Translations/frmMain_Strings.Designer.vb @@ -92,7 +92,7 @@ Namespace My.Resources End Property ''' - ''' Sucht eine lokalisierte Zeichenfolge, die Aktuell keine Workflowdaten vorhanden! {0} ähnelt. + ''' Sucht eine lokalisierte Zeichenfolge, die Aktuell keine Workflowdaten vorhanden - {0} ähnelt. ''' Friend Shared ReadOnly Property Aktuell_keine_Workflowdaten_vorhanden___0_() As String Get diff --git a/app/TaskFlow/Translations/frmMain_Strings.en.resx b/app/TaskFlow/Translations/frmMain_Strings.en.resx index b32a79e..fc6ac88 100644 --- a/app/TaskFlow/Translations/frmMain_Strings.en.resx +++ b/app/TaskFlow/Translations/frmMain_Strings.en.resx @@ -120,36 +120,27 @@ Attention: + + Currently no workflow data available - {0} + + + Current license has expired or is invalid! + Logged in users: {0} Number of licenses: {0} - - Please close the currently open workflow! - - - Bigger - - - Smaller - - - Normal - - - Currently no workflow data available! {0} - - - Current license has expired or is invalid! - Please configure a database connection! Please contact your administrator! + + Please close the currently open workflow! + Please select a profile! @@ -177,9 +168,18 @@ Deactivate ({0}) Ghost Mode + + Bigger + NOTE: Debug mode is switched on! + + IDB Active + + + Smaller + Last synchronization: {0} @@ -189,6 +189,9 @@ Mass completion could not be executed because windream could not be initialised! + + Normal + Next activity check: {0} {1} @@ -213,7 +216,4 @@ {0} Processes - - IDB Active - \ No newline at end of file diff --git a/app/TaskFlow/Translations/frmMain_Strings.fr.resx b/app/TaskFlow/Translations/frmMain_Strings.fr.resx index cf64f82..28a971b 100644 --- a/app/TaskFlow/Translations/frmMain_Strings.fr.resx +++ b/app/TaskFlow/Translations/frmMain_Strings.fr.resx @@ -120,36 +120,27 @@ Attention: + + Actuellement, aucune donnée de workflow n'est disponible - {0} + + + La licence actuelle a expiré ou n'est plus valable ! + Nombre d'utilisateurs connectés: {0} Nombre de licences: {0} - - Veuillez fermer le workflow ouvert ! - - - Plus grand - - - Petit - - - Normal - - - Actuellement, aucune donnée de workflow n'est disponible ! {0} - - - La licence actuelle a expiré ou n'est plus valable ! - Veuillez configurer une connexion à la base de données ! Veuillez contacter votre administrateur ! + + Veuillez fermer le workflow ouvert ! + Veuillez sélectionner un profil ! @@ -177,9 +168,18 @@ Désactiver ({0}) le Mode Fantôme + + Plus grand + REMARQUE : le mode de débogage est activé ! + + IDB Aktif + + + Petit + Dernière synchronisation : {0} @@ -189,6 +189,9 @@ La clôture en masse n'a pas pu être exécutée parce que windream n'a pas pu être initialisé ! + + Normal + Prochaine vérification d'activité : {0} {1} @@ -213,7 +216,4 @@ {0} Opérations - - IDB Aktif - \ No newline at end of file diff --git a/app/TaskFlow/Translations/frmMain_Strings.resx b/app/TaskFlow/Translations/frmMain_Strings.resx index 9b6af05..64fcfbf 100644 --- a/app/TaskFlow/Translations/frmMain_Strings.resx +++ b/app/TaskFlow/Translations/frmMain_Strings.resx @@ -121,7 +121,7 @@ Achtung: - Aktuell keine Workflowdaten vorhanden! {0} + Aktuell keine Workflowdaten vorhanden - {0} Aktuelle Lizenz ist abgelaufen oder ungültig! diff --git a/app/TaskFlow/frmMain.Designer.vb b/app/TaskFlow/frmMain.Designer.vb index b4318a4..495bf4c 100644 --- a/app/TaskFlow/frmMain.Designer.vb +++ b/app/TaskFlow/frmMain.Designer.vb @@ -28,8 +28,7 @@ Partial Class frmMain Me.DD_DMSLiteDataSet = New taskFLOW.DD_DMSLiteDataSet() Me.TableAdapterManager = New taskFLOW.DD_DMSLiteDataSetTableAdapters.TableAdapterManager() Me.Panel1 = New System.Windows.Forms.Panel() - Me.GridControlWorkflows = New DevExpress.XtraGrid.GridControl() - Me.GridViewWorkflows = New DevExpress.XtraGrid.Views.Grid.GridView() + Me.TreeList_Cockpit = New DevExpress.XtraTreeList.TreeList() Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl() Me.bbtniRefresh = New DevExpress.XtraBars.BarButtonItem() Me.bbtniMonitor = New DevExpress.XtraBars.BarButtonItem() @@ -99,6 +98,9 @@ Partial Class frmMain Me.RibbonPageGroup8 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup() Me.RepositoryItemTrackBar1 = New DevExpress.XtraEditors.Repository.RepositoryItemTrackBar() Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar() + Me.ImageCollection1 = New DevExpress.Utils.ImageCollection(Me.components) + Me.GridControlWorkflows = New DevExpress.XtraGrid.GridControl() + Me.GridViewWorkflows = New DevExpress.XtraGrid.Views.Grid.GridView() Me.Panel2 = New System.Windows.Forms.Panel() Me.lblCaptionMainGrid = New System.Windows.Forms.Label() Me.NavBarControl1 = New DevExpress.XtraNavBar.NavBarControl() @@ -196,12 +198,14 @@ Partial Class frmMain Me.BarButtonItem9 = New DevExpress.XtraBars.BarButtonItem() CType(Me.DD_DMSLiteDataSet, System.ComponentModel.ISupportInitialize).BeginInit() Me.Panel1.SuspendLayout() - CType(Me.GridControlWorkflows, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.GridViewWorkflows, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.TreeList_Cockpit, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemProgressBar1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.cmbGridFontSize, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.RepositoryItemTrackBar1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.ImageCollection1, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.GridControlWorkflows, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.GridViewWorkflows, System.ComponentModel.ISupportInitialize).BeginInit() Me.Panel2.SuspendLayout() CType(Me.NavBarControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.cmsNavPane.SuspendLayout() @@ -247,48 +251,36 @@ Partial Class frmMain 'Panel1 ' Me.Panel1.BackColor = System.Drawing.Color.Transparent + Me.Panel1.Controls.Add(Me.TreeList_Cockpit) Me.Panel1.Controls.Add(Me.GridControlWorkflows) Me.Panel1.Controls.Add(Me.Panel2) Me.Panel1.Controls.Add(Me.NavBarControl1) resources.ApplyResources(Me.Panel1, "Panel1") Me.Panel1.Name = "Panel1" ' - 'GridControlWorkflows + 'TreeList_Cockpit ' - resources.ApplyResources(Me.GridControlWorkflows, "GridControlWorkflows") - Me.GridControlWorkflows.MainView = Me.GridViewWorkflows - Me.GridControlWorkflows.MenuManager = Me.RibbonControl1 - Me.GridControlWorkflows.Name = "GridControlWorkflows" - Me.GridControlWorkflows.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewWorkflows}) - ' - 'GridViewWorkflows - ' - Me.GridViewWorkflows.Appearance.EvenRow.BackColor = System.Drawing.Color.Azure - Me.GridViewWorkflows.Appearance.EvenRow.Options.UseBackColor = True - Me.GridViewWorkflows.Appearance.FooterPanel.Font = CType(resources.GetObject("GridViewWorkflows.Appearance.FooterPanel.Font"), System.Drawing.Font) - Me.GridViewWorkflows.Appearance.FooterPanel.Options.UseFont = True - Me.GridViewWorkflows.Appearance.ViewCaption.Font = CType(resources.GetObject("GridViewWorkflows.Appearance.ViewCaption.Font"), System.Drawing.Font) - Me.GridViewWorkflows.Appearance.ViewCaption.ForeColor = System.Drawing.Color.Black - Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseFont = True - Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseForeColor = True - Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseTextOptions = True - Me.GridViewWorkflows.Appearance.ViewCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near - Me.GridViewWorkflows.GridControl = Me.GridControlWorkflows - Me.GridViewWorkflows.Name = "GridViewWorkflows" - Me.GridViewWorkflows.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False] - Me.GridViewWorkflows.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[False] - Me.GridViewWorkflows.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.[True] - Me.GridViewWorkflows.OptionsBehavior.AllowGroupExpandAnimation = DevExpress.Utils.DefaultBoolean.[True] - Me.GridViewWorkflows.OptionsBehavior.Editable = False - Me.GridViewWorkflows.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.[False] - Me.GridViewWorkflows.OptionsSelection.MultiSelect = True - Me.GridViewWorkflows.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CellSelect - Me.GridViewWorkflows.OptionsView.ColumnAutoWidth = False - Me.GridViewWorkflows.OptionsView.EnableAppearanceEvenRow = True - Me.GridViewWorkflows.OptionsView.ShowAutoFilterRow = True - Me.GridViewWorkflows.OptionsView.ShowErrorPanel = DevExpress.Utils.DefaultBoolean.[True] - Me.GridViewWorkflows.OptionsView.ShowHorizontalLines = DevExpress.Utils.DefaultBoolean.[False] - Me.GridViewWorkflows.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.[False] + resources.ApplyResources(Me.TreeList_Cockpit, "TreeList_Cockpit") + Me.TreeList_Cockpit.ImageIndexFieldName = "ICON_INDEX" + Me.TreeList_Cockpit.KeyFieldName = "PK_CFG_COCKPIT_DEFINITION_ID" + Me.TreeList_Cockpit.MenuManager = Me.RibbonControl1 + Me.TreeList_Cockpit.Name = "TreeList_Cockpit" + Me.TreeList_Cockpit.OptionsBehavior.Editable = False + Me.TreeList_Cockpit.OptionsBehavior.PopulateServiceColumns = True + Me.TreeList_Cockpit.OptionsBehavior.ReadOnly = True + Me.TreeList_Cockpit.OptionsLayout.AddNewColumns = False + Me.TreeList_Cockpit.OptionsMenu.ShowExpandCollapseItems = False + Me.TreeList_Cockpit.OptionsSelection.EnableAppearanceFocusedCell = False + Me.TreeList_Cockpit.OptionsView.ShowColumns = False + Me.TreeList_Cockpit.OptionsView.ShowFilterPanelMode = DevExpress.XtraTreeList.ShowFilterPanelMode.Never + Me.TreeList_Cockpit.OptionsView.ShowFirstLines = False + Me.TreeList_Cockpit.OptionsView.ShowHorzLines = False + Me.TreeList_Cockpit.OptionsView.ShowIndentAsRowStyle = True + Me.TreeList_Cockpit.OptionsView.ShowIndicator = False + Me.TreeList_Cockpit.OptionsView.ShowVertLines = False + Me.TreeList_Cockpit.OptionsView.TreeLineStyle = DevExpress.XtraTreeList.LineStyle.Dark + Me.TreeList_Cockpit.ParentFieldName = "Parent_ID" + Me.TreeList_Cockpit.SelectImageList = Me.ImageCollection1 ' 'RibbonControl1 ' @@ -863,6 +855,51 @@ Partial Class frmMain Me.RibbonStatusBar1.Name = "RibbonStatusBar1" Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1 ' + 'ImageCollection1 + ' + 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, "bosaleitem_32x32.png") + Me.ImageCollection1.Images.SetKeyName(2, "bar2_32x32.png") + ' + 'GridControlWorkflows + ' + resources.ApplyResources(Me.GridControlWorkflows, "GridControlWorkflows") + Me.GridControlWorkflows.MainView = Me.GridViewWorkflows + Me.GridControlWorkflows.MenuManager = Me.RibbonControl1 + Me.GridControlWorkflows.Name = "GridControlWorkflows" + Me.GridControlWorkflows.ViewCollection.AddRange(New DevExpress.XtraGrid.Views.Base.BaseView() {Me.GridViewWorkflows}) + ' + 'GridViewWorkflows + ' + Me.GridViewWorkflows.Appearance.EvenRow.BackColor = System.Drawing.Color.Azure + Me.GridViewWorkflows.Appearance.EvenRow.Options.UseBackColor = True + Me.GridViewWorkflows.Appearance.FooterPanel.Font = CType(resources.GetObject("GridViewWorkflows.Appearance.FooterPanel.Font"), System.Drawing.Font) + Me.GridViewWorkflows.Appearance.FooterPanel.Options.UseFont = True + Me.GridViewWorkflows.Appearance.ViewCaption.Font = CType(resources.GetObject("GridViewWorkflows.Appearance.ViewCaption.Font"), System.Drawing.Font) + Me.GridViewWorkflows.Appearance.ViewCaption.ForeColor = System.Drawing.Color.Black + Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseFont = True + Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseForeColor = True + Me.GridViewWorkflows.Appearance.ViewCaption.Options.UseTextOptions = True + Me.GridViewWorkflows.Appearance.ViewCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near + Me.GridViewWorkflows.GridControl = Me.GridControlWorkflows + Me.GridViewWorkflows.Name = "GridViewWorkflows" + Me.GridViewWorkflows.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False] + Me.GridViewWorkflows.OptionsBehavior.AllowDeleteRows = DevExpress.Utils.DefaultBoolean.[False] + Me.GridViewWorkflows.OptionsBehavior.AllowFixedGroups = DevExpress.Utils.DefaultBoolean.[True] + Me.GridViewWorkflows.OptionsBehavior.AllowGroupExpandAnimation = DevExpress.Utils.DefaultBoolean.[True] + Me.GridViewWorkflows.OptionsBehavior.Editable = False + Me.GridViewWorkflows.OptionsClipboard.CopyColumnHeaders = DevExpress.Utils.DefaultBoolean.[False] + Me.GridViewWorkflows.OptionsSelection.MultiSelect = True + Me.GridViewWorkflows.OptionsSelection.MultiSelectMode = DevExpress.XtraGrid.Views.Grid.GridMultiSelectMode.CellSelect + Me.GridViewWorkflows.OptionsView.ColumnAutoWidth = False + Me.GridViewWorkflows.OptionsView.EnableAppearanceEvenRow = True + Me.GridViewWorkflows.OptionsView.ShowAutoFilterRow = True + Me.GridViewWorkflows.OptionsView.ShowErrorPanel = DevExpress.Utils.DefaultBoolean.[True] + Me.GridViewWorkflows.OptionsView.ShowHorizontalLines = DevExpress.Utils.DefaultBoolean.[False] + Me.GridViewWorkflows.OptionsView.ShowVerticalLines = DevExpress.Utils.DefaultBoolean.[False] + ' 'Panel2 ' Me.Panel2.Controls.Add(Me.lblCaptionMainGrid) @@ -878,9 +915,9 @@ Partial Class frmMain ' Me.NavBarControl1.ActiveGroup = Me.NavBarGroupProfiles Me.NavBarControl1.ContextMenuStrip = Me.cmsNavPane - resources.ApplyResources(Me.NavBarControl1, "NavBarControl1") Me.NavBarControl1.Groups.AddRange(New DevExpress.XtraNavBar.NavBarGroup() {Me.NavBarGroupMore, Me.NavBarGroupProfiles}) Me.NavBarControl1.Items.AddRange(New DevExpress.XtraNavBar.NavBarItem() {Me.NavBarItemOverview}) + resources.ApplyResources(Me.NavBarControl1, "NavBarControl1") Me.NavBarControl1.Name = "NavBarControl1" Me.NavBarControl1.OptionsNavPane.ExpandedWidth = CType(resources.GetObject("resource.ExpandedWidth"), Integer) Me.NavBarControl1.PaintStyleKind = DevExpress.XtraNavBar.NavBarViewKind.NavigationPane @@ -911,7 +948,6 @@ Partial Class frmMain 'NavBarGroupMore ' resources.ApplyResources(Me.NavBarGroupMore, "NavBarGroupMore") - Me.NavBarGroupMore.Expanded = True Me.NavBarGroupMore.GroupStyle = DevExpress.XtraNavBar.NavBarGroupStyle.LargeIconsText Me.NavBarGroupMore.ImageOptions.LargeImage = CType(resources.GetObject("NavBarGroupMore.ImageOptions.LargeImage"), System.Drawing.Image) Me.NavBarGroupMore.ItemLinks.AddRange(New DevExpress.XtraNavBar.NavBarItemLink() {New DevExpress.XtraNavBar.NavBarItemLink(Me.NavBarItemOverview)}) @@ -1621,12 +1657,14 @@ Partial Class frmMain Me.StatusBar = Me.RibbonStatusBar1 CType(Me.DD_DMSLiteDataSet, System.ComponentModel.ISupportInitialize).EndInit() Me.Panel1.ResumeLayout(False) - CType(Me.GridControlWorkflows, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.GridViewWorkflows, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.TreeList_Cockpit, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RepositoryItemProgressBar1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.cmbGridFontSize, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.RepositoryItemTrackBar1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.ImageCollection1, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.GridControlWorkflows, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.GridViewWorkflows, System.ComponentModel.ISupportInitialize).EndInit() Me.Panel2.ResumeLayout(False) Me.Panel2.PerformLayout() CType(Me.NavBarControl1, System.ComponentModel.ISupportInitialize).EndInit() @@ -1812,4 +1850,6 @@ Partial Class frmMain Friend WithEvents BSIVERSION1 As DevExpress.XtraBars.BarStaticItem Friend WithEvents barbtnitmsaveLogfiles As DevExpress.XtraBars.BarButtonItem Friend WithEvents bsitmCount As DevExpress.XtraBars.BarStaticItem + Friend WithEvents TreeList_Cockpit As DevExpress.XtraTreeList.TreeList + Friend WithEvents ImageCollection1 As DevExpress.Utils.ImageCollection End Class diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx index f2b33a3..a2cb716 100644 --- a/app/TaskFlow/frmMain.resx +++ b/app/TaskFlow/frmMain.resx @@ -125,7 +125,7 @@ AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw - CAAAAk1TRnQBSQFMAgEBAgEAAQgBDAEIAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo + CAAAAk1TRnQBSQFMAgEBAgEAASABDAEgAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA @@ -172,19 +172,12 @@ 179, 17 - - - Fill - - - 233, 24 + + Tahoma, 9.75pt - - Microsoft Sans Serif, 8.25pt - - - Segoe UI, 12pt + + 3, 6 Aktualisieren @@ -1538,8 +1531,128 @@ 4 + + 760, 54 + + + 24, 24 + + + + AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMS4yLCBWZXJzaW9uPTIxLjIu + NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT + eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv + a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0 + cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P// + /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAABgAAAAYAAAACQUAAAAP + BQAAAPQRAAACCgYAAIlQTkcNChoKAAAADUlIRFIAAAAYAAAAGAgGAAAA4Hc9+AAAAAFzUkdCAK7OHOkA + AAAEZ0FNQQAAsY8L/GEFAAAACXBIWXMAAA7DAAAOwwHHb6hkAAAFn0lEQVRIS72WaVBTVxiGL1W7bzPd + pHamta1VK+NoW2stY611bIutS1vqgqxGkEFgAIkbAuKCYgTZVYoLqyJJMAoIRVHZAgGCiODKlrCDQBay + kOXtnJsbCLSd6a/emXeSSSbP8+U73zn3UtT/dFlRFPWMRaZMytR/yTSLPDsp5HeES1mFpt6xCbv08Mz+ + rCZuaFYTN+RCI3dfZiM3KLORuye9kbs77R6Xfb6exz5Xzws4U0fHL1nM802q4fmcruF5nxLxvRIr+Z4J + lXyPhEq+e7yQ73rshgMjoaxCMxo2NkkVMF9GJgYj0CSVw2A00u/1RiP0BlNG9UYIqjroV63OCI3OAM2o + ESqdAX0yDVgx5Xzmn1BWQWn1mxqlinEwCMwEzBf3QEeADFSrN0DDAI/xm6AaNUA1qseIxgCFRg+5Wg9J + vwpuUWU5FEU9TwTP7EkRO9yTKmgwqZRUbBIAebU9NFxLw5lKdQaoRw2I4DVBpTVgRGuAUqMfE7T3j8Al + suTymGDn2WoHrrALiQUtSCxoRfy1FsTlNyM27wlY6V5Y9cdC2J1egB9OzsfKBBusiJuH5TFzsezEHCyN + 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 + + + + 227, 352 + + + 11 + + + TreeList_Cockpit + + + DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + Panel1 + + + 0 + + + 398, 24 + + + Microsoft Sans Serif, 8.25pt + + + Segoe UI, 12pt + - 1240, 656 + 1075, 656 10 @@ -1554,7 +1667,7 @@ Panel1 - 0 + 1 lblCaptionMainGrid @@ -1568,9 +1681,6 @@ 0 - - Top - 233, 0 @@ -1590,7 +1700,7 @@ Panel1 - 1 + 2 weitere Profile @@ -1656,9 +1766,6 @@ System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - Left - Hauptansicht @@ -1776,13 +1883,13 @@ - 0, 0 + 12, 375 - 233 + 196 - 233, 680 + 196, 245 5 @@ -1800,8 +1907,9 @@ Panel1 - 2 + 3 + Fill @@ -2309,12 +2417,6 @@ taskFLOW.DD_DMSLiteDataSetTableAdapters.TableAdapterManager, DD_DMSLiteDataSet.Designer.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null - - GridViewWorkflows - - - DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a - bbtniRefresh @@ -2717,6 +2819,18 @@ DevExpress.XtraEditors.Repository.RepositoryItemTrackBar, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + ImageCollection1 + + + DevExpress.Utils.ImageCollection, DevExpress.Utils.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + + + GridViewWorkflows + + + DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a + NavBarGroupProfiles diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb index 6dd7227..0c7c182 100644 --- a/app/TaskFlow/frmMain.vb +++ b/app/TaskFlow/frmMain.vb @@ -41,7 +41,7 @@ Public Class frmMain Private GridCursorLocation As System.Drawing.Point Private GRID_LOAD_TYPE As String = "OVERVIEW" Private GRID_INV_COL_REMOVED As Boolean = False - Private NO_WORKFLOWITEMS As Boolean = False + Private NO_WORKFLOW_ITEMS As Boolean = False Private InResetlayout As Boolean = False Private RefreshHelper As RefreshHelper Private _FormValidator As frmValidator @@ -72,6 +72,9 @@ Public Class frmMain Private Const FA_NONE = "NONE" Public Const NAVBAR_CLICKED = "NAVBAR LINK CLICKED" + Private CUSTOM_OVERVIEW_SQL As String = String.Empty + Private COCKPIT_CONFIG_ID As Integer = 0 + Private Class S Inherits My.Resources.frmMain_Strings @@ -399,6 +402,10 @@ Public Class frmMain LOGGER.Error(ex) MsgBox("Unexpected Error in LoadForm - Step 4: " & vbNewLine & ex.Message, MsgBoxStyle.Critical, "Attention:") End Try + + Load_Treeview() + + LoadNavBar() AddHandler NavBarControl1.LinkClicked, AddressOf navBar_LinkClicked If Not IsNothing(CURR_DT_VWPM_PROFILE_AH_WORKFLOW) Then @@ -542,6 +549,124 @@ Public Class frmMain FormOpenClose = False End Sub + Private Sub Load_Treeview() + Try + Dim oSQL = $"SELECT * FROM [dbo].[FNTF_GET_COCKPIT_DEFINITION] ({USER_ID},'{USER_LANGUAGE}')" + Dim oDT_STRUCTURE_NODES As DataTable = DatabaseFallback.GetDatatableECM(oSQL) + If Not IsNothing(oDT_STRUCTURE_NODES) Then + If oDT_STRUCTURE_NODES.Rows.Count > 0 Then + TreeList_Cockpit.BeginUpdate() + Try + TreeList_Cockpit.DataSource = oDT_STRUCTURE_NODES + TreeList_Cockpit.KeyFieldName = "PK_CFG_COCKPIT_DEFINITION_ID" + TreeList_Cockpit.ParentFieldName = "PARENT_ID" + TreeList_Cockpit.Columns("PK_RESULT_ID").SortOrder = SortOrder.Ascending + + + ' ===== MODERNES DESIGN ===== + ' Schriftgröße und -art + TreeList_Cockpit.Appearance.Row.Font = New Font("Segoe UI", 12, FontStyle.Regular) + TreeList_Cockpit.Appearance.FocusedRow.Font = New Font("Segoe UI", 12, FontStyle.Bold) + TreeList_Cockpit.Appearance.HideSelectionRow.Font = New Font("Segoe UI", 12, FontStyle.Regular) + + ' Modernes Farbschema (passend zum Office2019-Skin) + TreeList_Cockpit.Appearance.Row.BackColor = Color.White + TreeList_Cockpit.Appearance.Row.ForeColor = Color.FromArgb(50, 50, 50) + TreeList_Cockpit.Appearance.FocusedRow.BackColor = Color.FromArgb(210, 230, 255) + TreeList_Cockpit.Appearance.FocusedRow.ForeColor = Color.FromArgb(20, 20, 20) + TreeList_Cockpit.Appearance.HideSelectionRow.BackColor = Color.FromArgb(225, 235, 250) + TreeList_Cockpit.Appearance.HideSelectionRow.ForeColor = Color.FromArgb(50, 50, 50) + + ' Zeilenhöhe erhöhen für bessere Lesbarkeit + TreeList_Cockpit.RowHeight = 28 + + + Dim oVisibleColumns As New System.Collections.Generic.HashSet(Of String)(StringComparer.OrdinalIgnoreCase) From {"NAME"} + For Each oColumn As DevExpress.XtraTreeList.Columns.TreeListColumn In TreeList_Cockpit.Columns + oColumn.Visible = oVisibleColumns.Contains(oColumn.FieldName) + Next + Finally + TreeList_Cockpit.EndUpdate() + End Try + ' AddHandler TreeList1.GetSelectImage, AddressOf TreeList1_GetSelectImage + TreeList_Cockpit.Refresh() ' ✅ Erzwingt sofortiges Neuzeichnen der Icons + + + ' ===== ANZAHL ASYNCHRON NACHLADEN ===== + If oDT_STRUCTURE_NODES.Columns.Contains("SQL_QUERY_COUNT") Then + AppendCountsToTreeAsync() + End If + End If + End If + Catch ex As Exception + LOGGER.Error(ex) + End Try + End Sub + + Private Async Sub AppendCountsToTreeAsync() + Try + LOGGER.Debug("AppendCountsToTreeAsync: Starting background count queries...") + + ' Alle Knoten mit ihren SQL-Befehlen im UI-Thread über NodesIterator einsammeln + Dim oWorkItems As New List(Of (Node As DevExpress.XtraTreeList.Nodes.TreeListNode, SQL As String, OriginalName As String)) + + TreeList_Cockpit.NodesIterator.DoOperation( + Sub(oNode As DevExpress.XtraTreeList.Nodes.TreeListNode) + Dim oSqlCount As Object = oNode.GetValue("SQL_QUERY_COUNT") + If oSqlCount IsNot Nothing AndAlso Not IsDBNull(oSqlCount) AndAlso Not String.IsNullOrWhiteSpace(oSqlCount.ToString()) Then + Dim oPreparedSQL As String = PrepareSQLWithReplacements(oSqlCount.ToString()) + Dim oName As String = oNode.GetValue("NAME")?.ToString() + If Not String.IsNullOrWhiteSpace(oName) Then + oWorkItems.Add((oNode, oPreparedSQL, oName)) + End If + Else + LOGGER.Debug($"AppendCountsToTreeAsync: Node [{oNode.GetValue("NAME")}] has no valid SQL_QUERY_COUNT, skipping.") + End If + End Sub) + + If oWorkItems.Count = 0 Then + Exit Sub + End If + + LOGGER.Debug($"AppendCountsToTreeAsync: {oWorkItems.Count} node(s) with SQL_QUERY_COUNT found") + + ' DB-Abfragen parallel im Hintergrund ausführen + Dim oResults As New List(Of (Node As DevExpress.XtraTreeList.Nodes.TreeListNode, OriginalName As String, Count As String)) + + Await Task.Run(Sub() + For Each oItem In oWorkItems + Try + Dim oResult As Object = DatabaseFallback.GetScalarValueECM(oItem.SQL) + If oResult IsNot Nothing AndAlso Not IsDBNull(oResult) Then + SyncLock oResults + oResults.Add((oItem.Node, oItem.OriginalName, oResult.ToString())) + End SyncLock + End If + Catch ex As Exception + LOGGER.Warn($"AppendCountsToTreeAsync: Count query failed for node [{oItem.OriginalName}] - {ex.Message}") + End Try + Next + End Sub) + + ' Ergebnisse zurück im UI-Thread auf die Knoten schreiben + TreeList_Cockpit.BeginUpdate() + Try + For Each oResult In oResults + oResult.Node.SetValue("NAME", $"{oResult.OriginalName} ({oResult.Count})") + LOGGER.Debug($"AppendCountsToTreeAsync: Node [{oResult.OriginalName}] → [{oResult.OriginalName} ({oResult.Count})]") + Next + Finally + TreeList_Cockpit.EndUpdate() + End Try + + TreeList_Cockpit.Refresh() + LOGGER.Debug("AppendCountsToTreeAsync: Finished") + + Catch ex As Exception + LOGGER.Error(ex) + End Try + End Sub + Private Function IsPositionVisible(position As System.Drawing.Point) As Boolean For Each scr As Screen In Screen.AllScreens If scr.WorkingArea.Contains(position) Then @@ -686,14 +811,21 @@ Public Class frmMain End Function Private Function GetLayoutName_GridMain() - Dim Filename As String = String.Format("DevExpressGridViewOverview_UserLayout_{0}_{1}.xml", GRID_LOAD_TYPE, USER_LANGUAGE) + Dim oLoadTypeSuffix As String = GRID_LOAD_TYPE + + ' Bei mehreren Gesamtübersichten die COCKPIT_CONFIG_ID als Suffix anhängen + If GRID_LOAD_TYPE = "OVERVIEW" AndAlso COCKPIT_CONFIG_ID > 0 Then + oLoadTypeSuffix = $"OVERVIEW_{COCKPIT_CONFIG_ID}" + End If + + Dim Filename As String = String.Format("DevExpressGridViewOverview_UserLayout_{0}_{1}.xml", oLoadTypeSuffix, USER_LANGUAGE) LOGGER.Debug($"LayoutFilename is: {Filename}") Return System.IO.Path.Combine(USER_CONFIG_DIRECTORY, Filename) End Function Private Sub SaveGridLayout() Timer_Inactivity_Reset_Disable("SaveGridLayout") - If NO_WORKFLOWITEMS = True Then + If NO_WORKFLOW_ITEMS = True Then Exit Sub End If @@ -708,7 +840,7 @@ Public Class frmMain End Sub Private Sub RestoreLayout() - If NO_WORKFLOWITEMS = True Then + If NO_WORKFLOW_ITEMS = True Then Exit Sub End If @@ -1090,13 +1222,13 @@ Public Class frmMain Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count ' Workflowitems-Status setzen - NO_WORKFLOWITEMS = (oCOUNT = 0) + NO_WORKFLOW_ITEMS = (oCOUNT = 0) ' Caption IMMER aktualisieren (vor Hash-Prüfung!) UpdateGridCaption() ' Datenquelle bei leeren Items zurücksetzen - If NO_WORKFLOWITEMS Then + If NO_WORKFLOW_ITEMS Then GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing @@ -1463,12 +1595,13 @@ Public Class frmMain End If If Not loadSuccess Then - LOGGER.Warn("Daten konnten nicht geladen werden") + LOGGER.Warn($"LoadProfileData for Profile-ID [{CURRENT_CLICKED_PROFILE_ID}] - Title [{CURRENT_CLICKED_PROFILE_TITLE}] failed or has no Data - exiting Decide_Load") Exit Function End If ' ========== NACHBEARBEITUNG ========== ApplyPostLoadSettings() + GridIsLoaded = True ' ========== CAPTION FINAL SICHERSTELLEN ========== ' ApplyPostLoadSettings kann durch Spalten-Events den Caption überschreiben, @@ -1514,6 +1647,7 @@ Public Class frmMain End If Try + GridControlWorkflows_Visible() ' ========== GRID UPDATES VORBEREITEN ========== If GridControlWorkflows.Visible Then GridControlWorkflows.BeginUpdate() @@ -1525,7 +1659,7 @@ Public Class frmMain ' ========== PROFILE VALIDIEREN ========== If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False) - NO_WORKFLOWITEMS = True + NO_WORKFLOW_ITEMS = True bsiMessage.Caption = "NO PROFILES FOR USER" bsiMessage.ItemAppearance.Normal.BackColor = Color.Red bsiMessage.ItemAppearance.Normal.ForeColor = Color.Black @@ -1550,10 +1684,18 @@ Public Class frmMain End If ' ========== SQL VORBEREITEN ========== - Dim oSQLOverview = BASEDATA_DT_CONFIG.Rows(0).Item("SQL_PROFILE_MAIN_VIEW") + Dim oSQLOverview As String + If Not String.IsNullOrWhiteSpace(CUSTOM_OVERVIEW_SQL) Then + LOGGER.Debug($"[LoadOverviewData] Using CUSTOM_OVERVIEW_SQL from TreeList node") + oSQLOverview = CUSTOM_OVERVIEW_SQL + CUSTOM_OVERVIEW_SQL = String.Empty + 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 - NO_WORKFLOWITEMS = True + LOGGER.Warn("Overview SQL is Null or not properly configured (missing or GROUP_TEXT column) - cannot load overview data") + NO_WORKFLOW_ITEMS = True GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing @@ -1583,7 +1725,7 @@ Public Class frmMain End If If IsNothing(DT_CURR_WF_ITEMS) Then - NO_WORKFLOWITEMS = True + NO_WORKFLOW_ITEMS = True GridControlWorkflows.Visible = False Return False End If @@ -1591,10 +1733,10 @@ Public Class frmMain LOGGER.Debug($"Datatable CURR_DT_OVERVIEW loaded: {DT_CURR_WF_ITEMS.Rows.Count} rows") ' ========== DATEN VERARBEITEN ========== - NO_WORKFLOWITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0) + NO_WORKFLOW_ITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0) UpdateGridCaption() - If NO_WORKFLOWITEMS Then + If NO_WORKFLOW_ITEMS Then GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing @@ -1687,14 +1829,13 @@ Public Class frmMain Load_Profiles_for_User() Dim expression As String = "GUID = " & CURRENT_CLICKED_PROFILE_ID - Dim foundRow As DataRow = CURR_DT_VWPM_PROFILE_ACTIVE.Select(expression).FirstOrDefault() + + Dim foundRow As DataRow = CURRENT_DT_PROFILES.Select(expression).FirstOrDefault() If foundRow Is Nothing Then + LOGGER.Warn($"LoadProfileData for Profile-ID [{CURRENT_CLICKED_PROFILE_ID}] - Title [{CURRENT_CLICKED_PROFILE_TITLE}] not found - exiting Decide_Load") Return False End If - ' === FIX: Grid sichtbar machen bevor BeginUpdate === - GridControlWorkflows_Visible() - If GridControlWorkflows.Visible Then GridControlWorkflows.BeginUpdate() gridUpdateStarted = True @@ -1709,22 +1850,22 @@ Public Class frmMain DT_CURR_WF_ITEMS = Await DatabaseFallback.GetDatatableECMAsync(oSQL) If IsNothing(DT_CURR_WF_ITEMS) Then - LOGGER.Warn("Daten konnten nicht geladen werden für Profil: " & CURRENT_CLICKED_PROFILE_TITLE) + LOGGER.Warn($"LoadProfileData for Profile-ID [{CURRENT_CLICKED_PROFILE_ID}] - Title [{CURRENT_CLICKED_PROFILE_TITLE}] failed - exiting Decide_Load") Return False End If ' ========== DATEN VERARBEITEN ========== - NO_WORKFLOWITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0) + NO_WORKFLOW_ITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0) UpdateGridCaption() - If NO_WORKFLOWITEMS Then + If NO_WORKFLOW_ITEMS Then GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing LOGGER.Info("Keine Workflow-Items für Profil: " & CURRENT_CLICKED_PROFILE_TITLE) Return False End If - + GridControlWorkflows_Visible() ' ========== BASIC VIEW ERSTELLEN ========== Await CreateBasicViewForProfile() LOGGER.Debug("Basic View für Profil erstellt: " & CURRENT_CLICKED_PROFILE_TITLE) @@ -2602,7 +2743,7 @@ Public Class frmMain ' ========== DATEN VALIDIEREN ========== If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False) - NO_WORKFLOWITEMS = True + NO_WORKFLOW_ITEMS = True bsiMessage.Caption = "NO PROFILES FOR USER" bsiMessage.ItemAppearance.Normal.BackColor = Color.Red bsiMessage.ItemAppearance.Normal.ForeColor = Color.Black @@ -2637,7 +2778,7 @@ Public Class frmMain If oSQLOverview.ToString.Contains("GROUP_TEXT") = False Then LOGGER.Info($"SQL SO FAR: {oSQLOverview} ") FormHelper.ShowInfoMessage("Incomplete Overview-Source (No Group-Columns). Column", omsgTitleWarning) - NO_WORKFLOWITEMS = True + NO_WORKFLOW_ITEMS = True GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing @@ -2667,8 +2808,8 @@ Public Class frmMain If LOG_HOTSPOTS Then Dim elapsed = (DateTime.Now - perfStep).TotalMilliseconds Dim rowCount = If(DT_CURR_WF_ITEMS IsNot Nothing, DT_CURR_WF_ITEMS.Rows.Count, 0) - If elapsed > 4000 Then - LOGGER.Warn($"[PERF LGO] ⚠️ Datenbank-Abfrage Overview LANGSAM: {elapsed}ms ({rowCount} Zeilen) (Schwellwert: 4000ms) - SQL prüfen!") + If elapsed > 4500 Then + LOGGER.Warn($"[PERF LGO] ⚠️ Datenbank-Abfrage Overview LANGSAM: {elapsed}ms ({rowCount} Zeilen) (Schwellwert: 4500ms) - SQL prüfen!") Else LOGGER.Info($"[PERF LGO] Datenbank-Abfrage Overview: {elapsed}ms ({rowCount} Zeilen)") End If @@ -2676,7 +2817,7 @@ Public Class frmMain End If If IsNothing(DT_CURR_WF_ITEMS) Then - NO_WORKFLOWITEMS = True + NO_WORKFLOW_ITEMS = True GridControlWorkflows.Visible = False GridControlWorkflows.DataSource = Nothing Try @@ -2694,10 +2835,10 @@ Public Class frmMain Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS) Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count - NO_WORKFLOWITEMS = (oCOUNT = 0) + NO_WORKFLOW_ITEMS = (oCOUNT = 0) UpdateGridCaption() - If NO_WORKFLOWITEMS Then + If NO_WORKFLOW_ITEMS Then GridControlWorkflows.Visible = False bindsourcegrid.DataSource = Nothing GridControlWorkflows.DataSource = Nothing @@ -3287,8 +3428,19 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G CurrNavBarGroup = NavBarControl1.Groups(1) FormShown = True Timer_Inactivity_Reset_Disable("Decide_Load") - LOGGER.Debug("FormShown..Now Decide_Load...") - Await Decide_Load(True) + + ' ===== ERSTEN KNOTEN AUSWÄHLEN (löst FocusedNodeChanged → Decide_Load aus) ===== + Dim oFirstNode As DevExpress.XtraTreeList.Nodes.TreeListNode = TreeList_Cockpit.Nodes.FirstOrDefault() + If oFirstNode IsNot Nothing Then + LOGGER.Debug($"Selecting first TreeList node: [{oFirstNode.GetValue("NAME")}]") + TreeList_Cockpit.FocusedNode = oFirstNode + ' FocusedNodeChanged nicht zuverlässig bei programmatischer Zuweisung → direkt aufrufen + Await ProcessTreeListNodeAsync(oFirstNode) + Else + LOGGER.Debug("No TreeList nodes found - falling back to Decide_Load") + Await Decide_Load(True) + End If + If GridViewWorkflows.GroupCount = 0 And Not IsNothing(GridViewWorkflows.Columns("GROUP_TEXT")) Then LOGGER.Info("NO GROUPS AFTER SHOWN_Decide Load...") Create_GroupBy_Parts() @@ -3698,7 +3850,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G End Sub Private Sub UpdateGridCaption() Try - LOGGER.Debug($"UpdateGridCaption called - GRID_LOAD_TYPE: [{GRID_LOAD_TYPE}], CURRENT_CLICKED_PROFILE_TITLE: [{CURRENT_CLICKED_PROFILE_TITLE}], NO_WORKFLOWITEMS: [{NO_WORKFLOWITEMS}]") + LOGGER.Debug($"UpdateGridCaption called - GRID_LOAD_TYPE: [{GRID_LOAD_TYPE}], CURRENT_CLICKED_PROFILE_TITLE: [{CURRENT_CLICKED_PROFILE_TITLE}], NO_WORKFLOWITEMS: [{NO_WORKFLOW_ITEMS}]") If GRID_LOAD_TYPE = "OVERVIEW" Then ' Übersicht-Caption lblCaptionMainGrid.Text = S.Gesamtübersicht @@ -3711,7 +3863,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G ElseIf GRID_LOAD_TYPE.StartsWith("PROFILE#") Then ' Profil-Caption If Not String.IsNullOrEmpty(CURRENT_CLICKED_PROFILE_TITLE) Then - If NO_WORKFLOWITEMS Then + If NO_WORKFLOW_ITEMS Then lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, CURRENT_CLICKED_PROFILE_TITLE) Else lblCaptionMainGrid.Text = CURRENT_CLICKED_PROFILE_TITLE @@ -4192,4 +4344,170 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G Private Sub barbtnitmsaveLogfiles_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles barbtnitmsaveLogfiles.ItemClick ClassAllgemeineFunktionen.Save_Logfiles() End Sub + + Private Async Function ProcessTreeListNodeAsync(oNode As DevExpress.XtraTreeList.Nodes.TreeListNode) As Task + Try + Dim oTypeId As Object = oNode.GetValue("TYPE_ID") + Dim oCockpitConfigID As Object = oNode.GetValue("PK_CFG_COCKPIT_DEFINITION_ID") + Dim oFkProfileId As Object = oNode.GetValue("FK_PROFILE_ID") + Dim oSqlQuery As Object = oNode.GetValue("SQL_QUERY") + Dim oProfileTitle As Object = oNode.GetValue("NAME") + + LOGGER.Debug($"TreeList1 Node selected - PK_CFG_COCKPIT_DEFINITION_ID:[{oCockpitConfigID}] NAME:[{oProfileTitle}] TYPE_ID:[{oTypeId}] FK_PROFILE_ID:[{oFkProfileId}]") + + If oTypeId Is Nothing OrElse IsDBNull(oTypeId) Then + LOGGER.Debug("ProcessTreeListNodeAsync: TYPE_ID is Nothing/DBNull - Folder node, skipping") + Exit Function + End If + + If Application.OpenForms().OfType(Of frmValidator).Any Then + FormHelper.ShowInfoMessage(S.Bitte_schließen_Sie_den_offenen_Workflow_, omsgTitleWarning) + Exit Function + End If + + FRONTEND_ACTION = NAVBAR_CLICKED + Timer_Inactivity_Reset_Disable("TreeList1_FocusedNodeChanged") + COCKPIT_CONFIG_ID = oCockpitConfigID + + Dim oTypeIdInt As Integer = CInt(oTypeId) + + Select Case oTypeIdInt + + Case 0 + LOGGER.Debug("TreeList1: Loading overview") + OverviewOrDEtail = "OVERVIEW" + GRID_LOAD_TYPE = "OVERVIEW" + + Dim oForce As Boolean = False + If DetailLinkActive = True Then + oForce = True + DetailLinkActive = False + OVERVIEW_ADDED_WHEN = "" + End If + If IsDBNull(oSqlQuery) OrElse String.IsNullOrWhiteSpace(oSqlQuery?.ToString()) Then + LOGGER.Warn($"TreeList1: SQL_QUERY for ProfileID {oFkProfileId} is DBNull or empty for overview node - this should not happen, check data integrity of TreeList's DataSource") + Exit Function + End If + CURRENT_CLICKED_PROFILE_ID = 0 + CUSTOM_OVERVIEW_SQL = oSqlQuery.ToString() + + If GridControlWorkflows.Visible = True And FormOpenClose = False Then + RefreshHelper.SaveViewInfo() + End If + + Me.Cursor = Cursors.WaitCursor + Try + Await Decide_Load(False, oForce) + Finally + Me.Cursor = Cursors.Default + End Try + + If GridControlWorkflows.Visible = True And FormOpenClose = False Then + RefreshHelper.LoadViewInfo() + End If + + If GridViewWorkflows.GroupCount = 0 AndAlso Not IsNothing(GridViewWorkflows.Columns("GROUP_TEXT")) Then + LOGGER.Info("TreeList1: NO GROUPS AFTER CLICK OVERVIEW - creating groups...") + Await Decide_Load(False, True) + If GridControlWorkflows.Visible = True And FormOpenClose = False Then + RefreshHelper.LoadViewInfo() + End If + End If + + Case 1 + If oFkProfileId Is Nothing OrElse IsDBNull(oFkProfileId) Then + LOGGER.Warn("TreeList1: TYPE_ID=1 but FK_PROFILE_ID is Nothing/DBNull") + Exit Function + End If + + Dim oProfileId As Integer = CInt(oFkProfileId) + LOGGER.Debug($"TreeList1: Profile node clicked - FK_PROFILE_ID:[{oProfileId}]") + + + + + If CURRENT_CLICKED_PROFILE_ID = oProfileId Then + LOGGER.Debug($"TreeList1: Profile [{oProfileId}] is already active - ignoring click") + Exit Function + End If + + LOGGER.Debug($"TreeList1: Loading profile with ID [{oProfileId}]...") + + ' ===== ANZAHL-SUFFIX ENTFERNEN (von AppendCountsToTreeAsync angehängt: "Titel (42)" → "Titel") ===== + 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() + LOGGER.Debug($"TreeList1: Stripped count suffix from title [{oProfileTitle}] → [{oCleanProfileTitle}]") + End If + + OverviewOrDEtail = "DETAIL" + CURRENT_CLICKED_PROFILE_ID = oProfileId + CURRENT_CLICKED_PROFILE_TITLE = oCleanProfileTitle + GRID_LOAD_TYPE = $"PROFILE#{oProfileId}" + DetailLinkActive = True + + If GridControlWorkflows.Visible = True And FormOpenClose = False Then + RefreshHelper.SaveViewInfo() + End If + + Me.Cursor = Cursors.WaitCursor + Try + Await Decide_Load(False, True) + Finally + Me.Cursor = Cursors.Default + End Try + + Case 2 + If oSqlQuery Is Nothing OrElse IsDBNull(oSqlQuery) Then + Exit Function + End If + + Dim oSQL As String = oSqlQuery.ToString() + If String.IsNullOrWhiteSpace(oSQL) Then + Exit Function + End If + + LOGGER.Debug($"TreeList1: Executing custom SQL query from node") + oSQL = PrepareSQLWithReplacements(oSQL) + + Dim oDT As DataTable = DatabaseFallback.GetDatatableECM(oSQL) + If oDT IsNot Nothing Then + LOGGER.Debug($"TreeList1 SQL result: {oDT.Rows.Count} rows") + DT_CURR_WF_ITEMS = oDT + NO_WORKFLOW_ITEMS = (oDT.Rows.Count = 0) + bindsourcegrid.DataSource = DT_CURR_WF_ITEMS + GridControlWorkflows.DataSource = bindsourcegrid + GridControlWorkflows.Visible = Not NO_WORKFLOW_ITEMS + UpdateGridCaption() + End If + + Case Else + LOGGER.Debug($"ProcessTreeListNodeAsync: Unhandled TYPE_ID [{oTypeIdInt}]") + + End Select + + Catch ex As Exception + LOGGER.Error(ex) + Finally + FRONTEND_ACTION = FA_NONE + End Try + End Function + Private Async Sub TreeList1_FocusedNodeChanged(sender As Object, e As DevExpress.XtraTreeList.FocusedNodeChangedEventArgs) Handles TreeList_Cockpit.FocusedNodeChanged + Try + If e.Node Is Nothing Then + LOGGER.Debug("TreeList1_FocusedNodeChanged: Node is Nothing - skipping") + Exit Sub + End If + + If FormShown = False Then + Exit Sub + End If + + Await ProcessTreeListNodeAsync(e.Node) + + Catch ex As Exception + LOGGER.Error(ex) + End Try + End Sub End Class \ No newline at end of file