Cockpit-Navigation: DevExpress TreeList integriert

Das Hauptfenster nutzt nun eine moderne, hierarchische Cockpit-Navigation auf Basis der DevExpress TreeList. Die TreeList ersetzt die bisherige alleinige Navigation über die NavBar und lädt ihre Struktur dynamisch aus der Datenbank. Knoten können asynchron Zähler nachladen und verschiedene Typen (Übersicht, Profil, SQL) abbilden. Die Datenlade-Logik wurde für die TreeList angepasst und erweitert. UI und Ressourcen wurden modernisiert, die TreeList ist für zukünftige Erweiterungen vorbereitet. Die NavBar bleibt erhalten, ist aber nicht mehr Hauptnavigation.
This commit is contained in:
Developer01
2026-05-13 09:52:20 +02:00
parent a3fb1cbafc
commit d74beddb35
8 changed files with 635 additions and 162 deletions

View File

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

View File

@@ -92,7 +92,7 @@ Namespace My.Resources
End Property
'''<summary>
''' Sucht eine lokalisierte Zeichenfolge, die Aktuell keine Workflowdaten vorhanden! {0} ähnelt.
''' Sucht eine lokalisierte Zeichenfolge, die Aktuell keine Workflowdaten vorhanden - {0} ähnelt.
'''</summary>
Friend Shared ReadOnly Property Aktuell_keine_Workflowdaten_vorhanden___0_() As String
Get

View File

@@ -120,36 +120,27 @@
<data name="Achtung:" xml:space="preserve">
<value>Attention:</value>
</data>
<data name="Aktuell keine Workflowdaten vorhanden! {0}" xml:space="preserve">
<value>Currently no workflow data available - {0}</value>
</data>
<data name="Aktuelle Lizenz ist abgelaufen oder ungültig!" xml:space="preserve">
<value>Current license has expired or is invalid!</value>
</data>
<data name="Anzahl angemeldete Benutzer: {0}" xml:space="preserve">
<value>Logged in users: {0}</value>
</data>
<data name="Anzahl Lizenzen: {0}" xml:space="preserve">
<value>Number of licenses: {0}</value>
</data>
<data name="Bitte schließen Sie den offenen Workflow!" xml:space="preserve">
<value>Please close the currently open workflow!</value>
</data>
<data name="Größer" xml:space="preserve">
<value>Bigger</value>
</data>
<data name="Kleiner" xml:space="preserve">
<value>Smaller</value>
</data>
<data name="Normal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="Aktuell keine Workflowdaten vorhanden! {0}" xml:space="preserve">
<value>Currently no workflow data available! {0}</value>
</data>
<data name="Aktuelle Lizenz ist abgelaufen oder ungültig!" xml:space="preserve">
<value>Current license has expired or is invalid!</value>
</data>
<data name="Bitte konfigurieren Sie eine Datenbankverbindung!" xml:space="preserve">
<value>Please configure a database connection!</value>
</data>
<data name="Bitte kontaktieren Sie Ihren Administrator!" xml:space="preserve">
<value>Please contact your administrator!</value>
</data>
<data name="Bitte schließen Sie den offenen Workflow!" xml:space="preserve">
<value>Please close the currently open workflow!</value>
</data>
<data name="Bitte wählen Sie ein Profil aus!" xml:space="preserve">
<value>Please select a profile!</value>
</data>
@@ -177,9 +168,18 @@
<data name="Ghost Modus ({0}) deaktivieren" xml:space="preserve">
<value>Deactivate ({0}) Ghost Mode</value>
</data>
<data name="Größer" xml:space="preserve">
<value>Bigger</value>
</data>
<data name="HINWEIS: Debug Modus ist eingeschaltet!" xml:space="preserve">
<value>NOTE: Debug mode is switched on!</value>
</data>
<data name="IDB Aktiv" xml:space="preserve">
<value>IDB Active</value>
</data>
<data name="Kleiner" xml:space="preserve">
<value>Smaller</value>
</data>
<data name="Letzte Synchronisation: {0}" xml:space="preserve">
<value>Last synchronization: {0}</value>
</data>
@@ -189,6 +189,9 @@
<data name="Massenabschluss konnte nicht ausgeführt werden, weil windream nicht initialisiert werden konnte!" xml:space="preserve">
<value>Mass completion could not be executed because windream could not be initialised!</value>
</data>
<data name="Normal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="Nächste Aktivitätsüberprüfung: {0} {1}" xml:space="preserve">
<value>Next activity check: {0} {1}</value>
</data>
@@ -213,7 +216,4 @@
<data name="{0} Vorgänge" xml:space="preserve">
<value>{0} Processes</value>
</data>
<data name="IDB Aktiv" xml:space="preserve">
<value>IDB Active</value>
</data>
</root>

View File

@@ -120,36 +120,27 @@
<data name="Achtung:" xml:space="preserve">
<value>Attention:</value>
</data>
<data name="Aktuell keine Workflowdaten vorhanden! {0}" xml:space="preserve">
<value>Actuellement, aucune donnée de workflow n'est disponible - {0}</value>
</data>
<data name="Aktuelle Lizenz ist abgelaufen oder ungültig!" xml:space="preserve">
<value>La licence actuelle a expiré ou n'est plus valable !</value>
</data>
<data name="Anzahl angemeldete Benutzer: {0}" xml:space="preserve">
<value>Nombre d'utilisateurs connectés: {0}</value>
</data>
<data name="Anzahl Lizenzen: {0}" xml:space="preserve">
<value>Nombre de licences: {0}</value>
</data>
<data name="Bitte schließen Sie den offenen Workflow!" xml:space="preserve">
<value>Veuillez fermer le workflow ouvert !</value>
</data>
<data name="Größer" xml:space="preserve">
<value>Plus grand</value>
</data>
<data name="Kleiner" xml:space="preserve">
<value>Petit</value>
</data>
<data name="Normal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="Aktuell keine Workflowdaten vorhanden! {0}" xml:space="preserve">
<value>Actuellement, aucune donnée de workflow n'est disponible ! {0}</value>
</data>
<data name="Aktuelle Lizenz ist abgelaufen oder ungültig!" xml:space="preserve">
<value>La licence actuelle a expiré ou n'est plus valable !</value>
</data>
<data name="Bitte konfigurieren Sie eine Datenbankverbindung!" xml:space="preserve">
<value>Veuillez configurer une connexion à la base de données !</value>
</data>
<data name="Bitte kontaktieren Sie Ihren Administrator!" xml:space="preserve">
<value>Veuillez contacter votre administrateur !</value>
</data>
<data name="Bitte schließen Sie den offenen Workflow!" xml:space="preserve">
<value>Veuillez fermer le workflow ouvert !</value>
</data>
<data name="Bitte wählen Sie ein Profil aus!" xml:space="preserve">
<value>Veuillez sélectionner un profil !</value>
</data>
@@ -177,9 +168,18 @@
<data name="Ghost Modus ({0}) deaktivieren" xml:space="preserve">
<value>Désactiver ({0}) le Mode Fantôme</value>
</data>
<data name="Größer" xml:space="preserve">
<value>Plus grand</value>
</data>
<data name="HINWEIS: Debug Modus ist eingeschaltet!" xml:space="preserve">
<value>REMARQUE : le mode de débogage est activé !</value>
</data>
<data name="IDB Aktiv" xml:space="preserve">
<value>IDB Aktif</value>
</data>
<data name="Kleiner" xml:space="preserve">
<value>Petit</value>
</data>
<data name="Letzte Synchronisation: {0}" xml:space="preserve">
<value>Dernière synchronisation : {0}</value>
</data>
@@ -189,6 +189,9 @@
<data name="Massenabschluss konnte nicht ausgeführt werden, weil windream nicht initialisiert werden konnte!" xml:space="preserve">
<value>La clôture en masse n'a pas pu être exécutée parce que windream n'a pas pu être initialisé !</value>
</data>
<data name="Normal" xml:space="preserve">
<value>Normal</value>
</data>
<data name="Nächste Aktivitätsüberprüfung: {0} {1}" xml:space="preserve">
<value>Prochaine vérification d'activité : {0} {1}</value>
</data>
@@ -213,7 +216,4 @@
<data name="{0} Vorgänge" xml:space="preserve">
<value>{0} Opérations</value>
</data>
<data name="IDB Aktiv" xml:space="preserve">
<value>IDB Aktif</value>
</data>
</root>

View File

@@ -121,7 +121,7 @@
<value>Achtung:</value>
</data>
<data name="Aktuell keine Workflowdaten vorhanden! {0}" xml:space="preserve">
<value>Aktuell keine Workflowdaten vorhanden! {0}</value>
<value>Aktuell keine Workflowdaten vorhanden - {0}</value>
</data>
<data name="Aktuelle Lizenz ist abgelaufen oder ungültig!" xml:space="preserve">
<value>Aktuelle Lizenz ist abgelaufen oder ungültig!</value>

View File

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

View File

@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw
CAAAAk1TRnQBSQFMAgEBAgEAAQgBDAEIAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
CAAAAk1TRnQBSQFMAgEBAgEAASABDAEgAQwBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -172,19 +172,12 @@
<metadata name="TableAdapterManager.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>179, 17</value>
</metadata>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="GridControlWorkflows.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="GridControlWorkflows.Location" type="System.Drawing.Point, System.Drawing">
<value>233, 24</value>
<data name="TreeList_Cockpit.Font" type="System.Drawing.Font, System.Drawing">
<value>Tahoma, 9.75pt</value>
</data>
<data name="GridViewWorkflows.Appearance.FooterPanel.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 8.25pt</value>
</data>
<data name="GridViewWorkflows.Appearance.ViewCaption.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 12pt</value>
<data name="TreeList_Cockpit.Location" type="System.Drawing.Point, System.Drawing">
<value>3, 6</value>
</data>
<data name="bbtniRefresh.Caption" xml:space="preserve">
<value>Aktualisieren</value>
@@ -1538,8 +1531,128 @@
<data name="&gt;&gt;RibbonControl1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<metadata name="ImageCollection1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>760, 54</value>
</metadata>
<data name="ImageCollection1.ImageSize" type="System.Drawing.Size, System.Drawing">
<value>24, 24</value>
</data>
<data name="ImageCollection1.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v21.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
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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
</value>
</data>
<data name="TreeList_Cockpit.Size" type="System.Drawing.Size, System.Drawing">
<value>227, 352</value>
</data>
<data name="TreeList_Cockpit.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="&gt;&gt;TreeList_Cockpit.Name" xml:space="preserve">
<value>TreeList_Cockpit</value>
</data>
<data name="&gt;&gt;TreeList_Cockpit.Type" xml:space="preserve">
<value>DevExpress.XtraTreeList.TreeList, DevExpress.XtraTreeList.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;TreeList_Cockpit.Parent" xml:space="preserve">
<value>Panel1</value>
</data>
<data name="&gt;&gt;TreeList_Cockpit.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="GridControlWorkflows.Location" type="System.Drawing.Point, System.Drawing">
<value>398, 24</value>
</data>
<data name="GridViewWorkflows.Appearance.FooterPanel.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 8.25pt</value>
</data>
<data name="GridViewWorkflows.Appearance.ViewCaption.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 12pt</value>
</data>
<data name="GridControlWorkflows.Size" type="System.Drawing.Size, System.Drawing">
<value>1240, 656</value>
<value>1075, 656</value>
</data>
<data name="GridControlWorkflows.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
@@ -1554,7 +1667,7 @@
<value>Panel1</value>
</data>
<data name="&gt;&gt;GridControlWorkflows.ZOrder" xml:space="preserve">
<value>0</value>
<value>1</value>
</data>
<data name="&gt;&gt;lblCaptionMainGrid.Name" xml:space="preserve">
<value>lblCaptionMainGrid</value>
@@ -1568,9 +1681,6 @@
<data name="&gt;&gt;lblCaptionMainGrid.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="Panel2.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="Panel2.Location" type="System.Drawing.Point, System.Drawing">
<value>233, 0</value>
</data>
@@ -1590,7 +1700,7 @@
<value>Panel1</value>
</data>
<data name="&gt;&gt;Panel2.ZOrder" xml:space="preserve">
<value>1</value>
<value>2</value>
</data>
<data name="NavBarGroupProfiles.Caption" xml:space="preserve">
<value>weitere Profile</value>
@@ -1656,9 +1766,6 @@
<data name="&gt;&gt;cmsNavPane.Type" xml:space="preserve">
<value>System.Windows.Forms.ContextMenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="NavBarControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Left</value>
</data>
<data name="NavBarGroupMore.Caption" xml:space="preserve">
<value>Hauptansicht</value>
</data>
@@ -1776,13 +1883,13 @@
</value>
</data>
<data name="NavBarControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
<value>12, 375</value>
</data>
<data name="resource.ExpandedWidth" type="System.Int32, mscorlib">
<value>233</value>
<value>196</value>
</data>
<data name="NavBarControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>233, 680</value>
<value>196, 245</value>
</data>
<data name="NavBarControl1.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
@@ -1800,8 +1907,9 @@
<value>Panel1</value>
</data>
<data name="&gt;&gt;NavBarControl1.ZOrder" xml:space="preserve">
<value>2</value>
<value>3</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Panel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
@@ -2309,12 +2417,6 @@
<data name="&gt;&gt;TableAdapterManager.Type" xml:space="preserve">
<value>taskFLOW.DD_DMSLiteDataSetTableAdapters.TableAdapterManager, DD_DMSLiteDataSet.Designer.vb.dll, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</value>
</data>
<data name="&gt;&gt;GridViewWorkflows.Name" xml:space="preserve">
<value>GridViewWorkflows</value>
</data>
<data name="&gt;&gt;GridViewWorkflows.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;bbtniRefresh.Name" xml:space="preserve">
<value>bbtniRefresh</value>
</data>
@@ -2717,6 +2819,18 @@
<data name="&gt;&gt;RepositoryItemTrackBar1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.Repository.RepositoryItemTrackBar, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;ImageCollection1.Name" xml:space="preserve">
<value>ImageCollection1</value>
</data>
<data name="&gt;&gt;ImageCollection1.Type" xml:space="preserve">
<value>DevExpress.Utils.ImageCollection, DevExpress.Utils.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;GridViewWorkflows.Name" xml:space="preserve">
<value>GridViewWorkflows</value>
</data>
<data name="&gt;&gt;GridViewWorkflows.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;NavBarGroupProfiles.Name" xml:space="preserve">
<value>NavBarGroupProfiles</value>
</data>

View File

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