diff --git a/app/TaskFlow/ModuleRuntimeVariables.vb b/app/TaskFlow/ModuleRuntimeVariables.vb
index 3e75b92..596a671 100644
--- a/app/TaskFlow/ModuleRuntimeVariables.vb
+++ b/app/TaskFlow/ModuleRuntimeVariables.vb
@@ -150,7 +150,7 @@ Module ModuleRuntimeVariables
Public Property DTVWCONTROL_INDEX As DataTable
Public Property DTCONTROLS_WITH_SQL As DataTable
-
+ Public Property DTTBPM_PROFILE_FINAL_INDEXING As DataTable
Public Property CURRENT_CONTROL_ID As Integer
Public Property errormessage As String
diff --git a/app/TaskFlow/frmMain.Designer.vb b/app/TaskFlow/frmMain.Designer.vb
index 75ea101..4de6182 100644
--- a/app/TaskFlow/frmMain.Designer.vb
+++ b/app/TaskFlow/frmMain.Designer.vb
@@ -246,6 +246,7 @@ Partial Class frmMain
'
'Panel1
'
+ Me.Panel1.BackColor = System.Drawing.Color.WhiteSmoke
Me.Panel1.Controls.Add(Me.GridControlWorkflows)
Me.Panel1.Controls.Add(Me.Panel2)
Me.Panel1.Controls.Add(Me.NavBarControl1)
@@ -255,7 +256,6 @@ Partial Class frmMain
'GridControlWorkflows
'
resources.ApplyResources(Me.GridControlWorkflows, "GridControlWorkflows")
- Me.GridControlWorkflows.EmbeddedNavigator.Margin = CType(resources.GetObject("GridControlWorkflows.EmbeddedNavigator.Margin"), System.Windows.Forms.Padding)
Me.GridControlWorkflows.MainView = Me.GridViewWorkflows
Me.GridControlWorkflows.MenuManager = Me.RibbonControl1
Me.GridControlWorkflows.Name = "GridControlWorkflows"
@@ -273,7 +273,6 @@ Partial Class frmMain
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.DetailHeight = 442
Me.GridViewWorkflows.GridControl = Me.GridControlWorkflows
Me.GridViewWorkflows.Name = "GridViewWorkflows"
Me.GridViewWorkflows.OptionsBehavior.AllowAddRows = DevExpress.Utils.DefaultBoolean.[False]
@@ -293,13 +292,11 @@ Partial Class frmMain
'
'RibbonControl1
'
- Me.RibbonControl1.EmptyAreaImageOptions.ImagePadding = New System.Windows.Forms.Padding(37, 38, 37, 38)
Me.RibbonControl1.ExpandCollapseItem.Id = 0
Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.bbtniRefresh, Me.bbtniMonitor, Me.bbiProfilverwaltung, Me.bbiKonfiguration, Me.bbtniGrundeinstellung, Me.bbtnitemInfo, Me.BarButtonItem1, Me.bsiUser, Me.bsiLicenses, Me.bsiUserLoggedIn, Me.bsiVersion, Me.bsilastsync, Me.bsiDebug, Me.bsiMessage, Me.bbtniMetadataFile, Me.BarEditItem1, Me.bbtnitDashboardInv, Me.bsiGeneralInfo, Me.bbtnitmGhostMode, Me.bsi_GhostMode, Me.BarButtonItemGhostMode, Me.SearchItem1, Me.SearchItem2, Me.BarStaticItemAppServer, Me.bbtniCW, Me.bsiInactivityCheck, Me.BarButtonItem2, Me.BarCheckItemAutofilter, Me.BarCheckItem2, Me.BarButtonItemResetLayout, Me.BarButtonItem4, Me.BarButtonItemExportExcel, Me.BarButtonItem6, Me.BarButtonItem7, Me.BarButtonItemWFSingle, Me.BarButtonItemWFGroup, Me.BarButtonItemFileLink, Me.BarButtonItemMassValidation, Me.BarCheckItemShowSearch, Me.barItemGridFontSize, Me.BarButtonItem8, Me.BbtnitmAHWF1, Me.BbtnitmAHWF2, Me.BbtnitmAHWF3, Me.BbtnitmAHWF4, Me.bbtnitmLanguage_Change, Me.BarButtonItem10, Me.BBtnItmNotfications, Me.BSIVERSION1, Me.barbtnitmsaveLogfiles, Me.bsitmCount})
resources.ApplyResources(Me.RibbonControl1, "RibbonControl1")
Me.RibbonControl1.MaxItemId = 57
Me.RibbonControl1.Name = "RibbonControl1"
- Me.RibbonControl1.OptionsMenuMinWidth = 403
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPageStart, Me.RibbonPageTabelle, Me.RibbonPageAktionen})
Me.RibbonControl1.RepositoryItems.AddRange(New DevExpress.XtraEditors.Repository.RepositoryItem() {Me.RepositoryItemProgressBar1, Me.RepositoryItemTrackBar1, Me.cmbGridFontSize})
Me.RibbonControl1.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonControlStyle.Office2013
diff --git a/app/TaskFlow/frmMain.resx b/app/TaskFlow/frmMain.resx
index 366b12d..8df7c95 100644
--- a/app/TaskFlow/frmMain.resx
+++ b/app/TaskFlow/frmMain.resx
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw
- CAAAAk1TRnQBSQFMAgEBAgEAAZABCwGQAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ CAAAAk1TRnQBSQFMAgEBAgEAAaABCwGgAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -176,12 +176,9 @@
Fill
-
- 4, 4, 4, 4
-
- 285, 30
+ 233, 24
Microsoft Sans Serif, 8.25pt
@@ -189,9 +186,6 @@
Segoe UI, 12pt
-
- 4, 4, 4, 4
-
Aktualisieren
@@ -1502,39 +1496,9 @@
0, 0
-
- 4, 4, 4, 4
-
-
- Allgemein
-
-
- Auswertungen
-
-
- Verwaltung
-
-
- Grundeinstellungen
-
-
- Workflow
-
-
- Funktionen/App Start
-
-
- Ad Hoc Workflows
-
Start
-
- Funktionen
-
-
- Workflow Tabelle
-
Tabelle
@@ -1542,16 +1506,13 @@
Aktionen
- 1440, 194
+ 1178, 158
- 0, 841
-
-
- 4, 4, 4, 4
+ 0, 666
- 1440, 28
+ 1178, 22
RibbonStatusBar1
@@ -1578,7 +1539,7 @@
4
- 1155, 617
+ 945, 484
10
@@ -1595,27 +1556,6 @@
0
-
- True
-
-
- Tahoma, 9.75pt, style=Bold
-
-
- 4, 4
-
-
- 4, 0, 4, 0
-
-
- 169, 21
-
-
- 0
-
-
- Choose a profile ...
-
lblCaptionMainGrid
@@ -1632,13 +1572,10 @@
Top
- 285, 0
-
-
- 4, 4, 4, 4
+ 233, 0
- 1155, 30
+ 945, 24
9
@@ -1710,14 +1647,8 @@
863, 17
-
- 261, 26
-
-
- Starte Validierung für Profil
-
- 262, 30
+ 220, 30
cmsNavPane
@@ -1847,14 +1778,11 @@
0, 0
-
- 4, 4, 4, 4
-
- 285
+ 233
- 285, 647
+ 233, 508
5
@@ -1881,13 +1809,10 @@
Tahoma, 9pt
- 0, 194
-
-
- 4, 4, 4, 4
+ 0, 158
- 1440, 647
+ 1178, 508
4
@@ -1904,38 +1829,80 @@
2
+
+ Allgemein
+
+
+ Auswertungen
+
+
+ Verwaltung
+
+
+ Grundeinstellungen
+
+
+ Workflow
+
+
+ Funktionen/App Start
+
+
+ Ad Hoc Workflows
+
+
+ Funktionen
+
+
+ Workflow Tabelle
+
+
+ True
+
+
+ Tahoma, 9.75pt, style=Bold
+
+
+ 3, 3
+
+
+ 127, 16
+
+
+ 0
+
+
+ Choose a profile ...
+
+
+ lblCaptionMainGrid
+
+
+ System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ Panel2
+
+
+ 0
+
+
+ 219, 26
+
+
+ Starte Validierung für Profil
+
- 17, 56
+ 986, 17
490, 17
- 250, 56
+ 1220, 17
-
- 348, 30
-
-
- Popup Erinnerung deaktivieren
-
-
- 345, 6
-
-
- 348, 30
-
-
- In den Vordergrund
-
-
- 348, 30
-
-
- Out of Range - Fenster wiederherstellen
-
- 349, 100
+ 291, 100
ContextMenuNotifyIcon
@@ -2029,6 +1996,27 @@
True
+
+ 290, 30
+
+
+ Popup Erinnerung deaktivieren
+
+
+ 287, 6
+
+
+ 290, 30
+
+
+ In den Vordergrund
+
+
+ 290, 30
+
+
+ Out of Range - Fenster wiederherstellen
+
605, 17
@@ -2036,10 +2024,10 @@
728, 17
- 525, 95
+ 643, 54
- 151, 56
+ 1120, 17
Top
@@ -2048,19 +2036,16 @@
0, 0
- 17, 95
+ 138, 54
Bottom
- 0, 869
-
-
- 4, 4, 4, 4
+ 0, 688
- 1440, 0
+ 1178, 0
barDockControlBottom
@@ -2080,11 +2065,8 @@
0, 0
-
- 4, 4, 4, 4
-
- 0, 869
+ 0, 688
barDockControlLeft
@@ -2102,13 +2084,10 @@
Right
- 1440, 0
-
-
- 4, 4, 4, 4
+ 1178, 0
- 0, 869
+ 0, 688
barDockControlRight
@@ -2129,10 +2108,10 @@
147
- 11, 24
+ 9, 19
- 1440, 869
+ 1178, 688
Tahoma, 12pt
@@ -2304,7 +2283,7 @@
- 5, 6, 5, 6
+ 4, 5, 4, 5
Manual
@@ -3465,6 +3444,9 @@
&Ansicht
+
+ &Hintergrund
+
&Seiten Layout
@@ -3477,9 +3459,6 @@
Bars
-
- &Hintergrund
-
PDF Dokument
@@ -3594,11 +3573,8 @@
Graphisches Dokument
-
- 4, 4, 4, 4
-
- 1440, 0
+ 1178, 0
barDockControlTop
@@ -3616,25 +3592,25 @@
RibbonPage2
- 432, 56
+ 1402, 17
- 584, 56
+ 1554, 17
- 677, 56
+ 1649, 17
PDF Dateien (*.pdf*)|*.pdf
- 814, 56
+ 17, 54
- 235, 95
+ 353, 54
- 394, 95
+ 510, 54
BarButtonItem5
diff --git a/app/TaskFlow/frmMain.vb b/app/TaskFlow/frmMain.vb
index 4c58127..f3ba934 100644
--- a/app/TaskFlow/frmMain.vb
+++ b/app/TaskFlow/frmMain.vb
@@ -2,6 +2,7 @@
Imports System.Globalization
Imports System.IO
Imports System.Threading
+Imports System.Threading.Tasks
Imports DevExpress.LookAndFeel
Imports DevExpress.Utils
Imports DevExpress.XtraBars.Ribbon
@@ -482,6 +483,8 @@ Public Class frmMain
Else
bbtnitmLanguage_Change.Visibility = DevExpress.XtraBars.BarItemVisibility.Never
End If
+ LoadCURRENT_DT_PROFILES()
+ LoadVWPM_CONTROL_INDEX()
LOGGER.Debug("MainForm initialized!")
@@ -676,28 +679,38 @@ Public Class frmMain
If GridViewWorkflows.Columns.Count = 0 Then
Exit Sub
End If
- GridViewWorkflows.Columns.Item("PROFILE_ID").Visible = False
- GridViewWorkflows.Columns.Item("GUID").Visible = False
- Try
- GridViewWorkflows.Columns.Item(FullFilepatColName).Visible = False
- Catch ex As Exception
- End Try
- Try
- 'GridViewWorkflows.Columns.Item("DocID").Visible = False
- GridViewWorkflows.Columns.Item("TL_STATE").Visible = False
- Catch ex As Exception
+ ' Sichere Prüfung für jede Spalte
+ If GridViewWorkflows.Columns.ColumnByFieldName("PROFILE_ID") IsNot Nothing Then
+ GridViewWorkflows.Columns.Item("PROFILE_ID").Visible = False
+ End If
+
+ If GridViewWorkflows.Columns.ColumnByFieldName("GUID") IsNot Nothing Then
+ GridViewWorkflows.Columns.Item("GUID").Visible = False
+ End If
- End Try
Try
- If Not IsNothing(GridViewWorkflows.Columns("CONV_YN")) Then
+ If GridViewWorkflows.Columns.ColumnByFieldName(FullFilepatColName) IsNot Nothing Then
+ GridViewWorkflows.Columns.Item(FullFilepatColName).Visible = False
+ End If
+ Catch ex As Exception
+ End Try
+
+ Try
+ If GridViewWorkflows.Columns.ColumnByFieldName("TL_STATE") IsNot Nothing Then
+ GridViewWorkflows.Columns.Item("TL_STATE").Visible = False
+ End If
+ Catch ex As Exception
+ End Try
+
+ Try
+ If GridViewWorkflows.Columns.ColumnByFieldName("CONV_YN") IsNot Nothing Then
GridViewWorkflows.Columns.Item("CONV_YN").Visible = False
End If
Catch ex As Exception
-
End Try
Catch ex As Exception
-
+ LOGGER.Warn($"Error in COLUMNS_INVISIBLE: {ex.Message}")
End Try
End Sub
Private Sub ResetLayout()
@@ -875,7 +888,6 @@ Public Class frmMain
Private Async Sub navBar_LinkClicked(ByVal sender As Object, ByVal e As NavBarLinkEventArgs)
If Not Application.OpenForms().OfType(Of frmValidator).Any Then
Else
- 'FormHelper.ShowInfoMessage(omsgOpenWorkflow, omsgTitleWarning)
FormHelper.ShowInfoMessage(S.Bitte_schließen_Sie_den_offenen_Workflow_, omsgTitleWarning)
Exit Sub
End If
@@ -896,12 +908,13 @@ Public Class frmMain
CURRENT_CLICKED_PROFILE_TITLE = e.Link.Item.Caption
End If
-
GRID_LOAD_TYPE = "PROFILE#" & _tag.ToString
TimerRefresh.Stop()
GridViewWorkflows.ShowLoadingPanel()
+ Await Task.Delay(10)
DetailLinkActive = True
Await Load_single_Profile(True)
+ ' Caption wird in Load_single_Profile aktualisiert
GridViewWorkflows.HideLoadingPanel()
TimerRefresh.Start()
Else
@@ -913,6 +926,7 @@ Public Class frmMain
OverviewOrDEtail = "OVERVIEW"
GRID_LOAD_TYPE = "OVERVIEW"
GridViewWorkflows.ShowLoadingPanel()
+ Await Task.Delay(10)
TimerRefresh.Stop()
Dim oForce As Boolean = False
If DetailLinkActive = True Then
@@ -921,6 +935,7 @@ Public Class frmMain
OVERVIEW_ADDED_WHEN = ""
End If
Await Load_Grid_Overview(False, True, True)
+ ' Caption wird in Load_Grid_Overview aktualisiert
GridViewWorkflows.HideLoadingPanel()
TimerRefresh.Start()
RefreshHelper.LoadViewInfo()
@@ -1002,26 +1017,30 @@ Public Class frmMain
Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS)
Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count
- If ForceReload = False Then
- If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And OVERVIEW_COUNT = oCOUNT Then
- Exit Function
- End If
- OVERVIEW_ADDED_WHEN = oADDED
- OVERVIEW_CHANGED_WHEN = oChanged
- OVERVIEW_COUNT = oCOUNT
- End If
+ ' Workflowitems-Status setzen
+ NO_WORKFLOWITEMS = (oCOUNT = 0)
- If DT_CURR_WF_ITEMS.Rows.Count = 0 Then
- NO_WORKFLOWITEMS = True
- lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, CURRENT_CLICKED_PROFILE_TITLE)
+ ' Caption IMMER aktualisieren (vor Hash-Prüfung!)
+ UpdateGridCaption()
+
+ ' Datenquelle bei leeren Items zurücksetzen
+ If NO_WORKFLOWITEMS Then
GridControlWorkflows.Visible = False
bindsourcegrid.DataSource = Nothing
GridControlWorkflows.DataSource = Nothing
Exit Function
End If
- NO_WORKFLOWITEMS = False
- lblCaptionMainGrid.Text = CURRENT_CLICKED_PROFILE_TITLE
+ ' Hash-Prüfung für Performance-Optimierung
+ If ForceReload = False Then
+ If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And OVERVIEW_COUNT = oCOUNT Then
+ LOGGER.Debug("No data changes - skipping grid reload")
+ Exit Function
+ End If
+ OVERVIEW_ADDED_WHEN = oADDED
+ OVERVIEW_CHANGED_WHEN = oChanged
+ OVERVIEW_COUNT = oCOUNT
+ End If
Create_Basic_View()
RestoreLayout()
@@ -1061,33 +1080,48 @@ Public Class frmMain
LOGGER.Warn("Could not clear GridViewWorkflows.Columns")
End Try
- If TL_ICON = True AndAlso DT_CURR_WF_ITEMS IsNot Nothing AndAlso DT_CURR_WF_ITEMS.Columns.Contains("ICON") = False Then
+ ' Prüfen, ob TL_STATE-Spalte vorhanden ist
+ Dim hasTLStateColumn As Boolean = False
+ If DT_CURR_WF_ITEMS IsNot Nothing Then
+ hasTLStateColumn = DT_CURR_WF_ITEMS.Columns.Contains("TL_STATE")
+ End If
+
+ ' ICON-Spalte nur hinzufügen, wenn TL_ICON aktiv UND TL_STATE verfügbar ist
+ If TL_ICON = True AndAlso hasTLStateColumn AndAlso DT_CURR_WF_ITEMS IsNot Nothing AndAlso DT_CURR_WF_ITEMS.Columns.Contains("ICON") = False Then
Dim columnStateIcon As New DataColumn() With {
- .DataType = GetType(Image),
- .ColumnName = "ICON",
- .Caption = ""
- }
+ .DataType = GetType(Image),
+ .ColumnName = "ICON",
+ .Caption = ""
+ }
DT_CURR_WF_ITEMS.Columns.Add(columnStateIcon)
End If
RedDocuments = 0
YellowDocuments = 0
GreenDocuments = 0
- If TL_ICON = True AndAlso DT_CURR_WF_ITEMS IsNot Nothing Then
- For Each row As DataRow In DT_CURR_WF_ITEMS.Rows
- Dim State As Integer = row.Item("TL_STATE")
- Select Case State
- Case 1
- RedDocuments += 1
- row.Item("ICON") = My.Resources.bullet_red
- Case 2
- YellowDocuments += 1
- row.Item("ICON") = My.Resources.bullet_orange
- Case 3
- GreenDocuments += 1
- row.Item("ICON") = My.Resources.bullet_green
- End Select
- Next
+
+ ' Icons nur setzen, wenn TL_STATE-Spalte vorhanden ist
+ If TL_ICON = True AndAlso hasTLStateColumn AndAlso DT_CURR_WF_ITEMS IsNot Nothing Then
+ Try
+ For Each row As DataRow In DT_CURR_WF_ITEMS.Rows
+ Dim State As Integer = CInt(row.Item("TL_STATE"))
+ Select Case State
+ Case 1
+ RedDocuments += 1
+ row.Item("ICON") = My.Resources.bullet_red
+ Case 2
+ YellowDocuments += 1
+ row.Item("ICON") = My.Resources.bullet_orange
+ Case 3
+ GreenDocuments += 1
+ row.Item("ICON") = My.Resources.bullet_green
+ End Select
+ Next
+ Catch ex As Exception
+ LOGGER.Warn($"Could not set ICON values: {ex.Message}")
+ End Try
+ ElseIf TL_ICON = True AndAlso Not hasTLStateColumn Then
+ LOGGER.Warn("TL_ICON is enabled but TL_STATE column is missing in dataset")
End If
bindsourcegrid.DataSource = DT_CURR_WF_ITEMS
@@ -1097,13 +1131,14 @@ Public Class frmMain
COLUMNS_INVISIBLE()
Try
- If TL_ICON = True AndAlso GridViewWorkflows.Columns.Count > 0 Then
+ If TL_ICON = True AndAlso GridViewWorkflows.Columns.Count > 0 AndAlso GridViewWorkflows.Columns.ColumnByFieldName("ICON") IsNot Nothing Then
GridViewWorkflows.Columns.Item("ICON").MaxWidth = 24
GridViewWorkflows.Columns.Item("ICON").MinWidth = 24
GridViewWorkflows.Columns.Item("ICON").AppearanceCell.BackColor = Color.White
GridViewWorkflows.Columns.Item("ICON").Fixed = FixedStyle.Left
End If
Catch ex As Exception
+ LOGGER.Warn($"Could not configure ICON column: {ex.Message}")
End Try
Try
@@ -1116,8 +1151,12 @@ Public Class frmMain
End Try
Try
- GridViewWorkflows.Columns.Item("GROUP_TEXT").Visible = False
- GridViewWorkflows.Columns.Item("GROUP_COLOR").Visible = False
+ If GridViewWorkflows.Columns.ColumnByFieldName("GROUP_TEXT") IsNot Nothing Then
+ GridViewWorkflows.Columns.Item("GROUP_TEXT").Visible = False
+ End If
+ If GridViewWorkflows.Columns.ColumnByFieldName("GROUP_COLOR") IsNot Nothing Then
+ GridViewWorkflows.Columns.Item("GROUP_COLOR").Visible = False
+ End If
Catch ex As Exception
If OverviewOrDEtail = "OVERVIEW" Then
LOGGER.Warn("ATTENTION: GROUP COLUMNS NOT PART OF GRID")
@@ -1315,8 +1354,9 @@ Public Class frmMain
useWaitCursorApplied = True
End If
- bsiMessage.Caption = "Daten werden geladen..."
+ bsiMessage.Caption = "Data loading..."
GridViewWorkflows.ShowLoadingPanel()
+ Await Task.Delay(10)
showLoadingPanel = True
TimerRefresh.Stop()
@@ -1905,12 +1945,21 @@ Public Class frmMain
useWaitCursorApplied = True
End If
- bsiMessage.Caption = "Daten werden geladen..."
+ bsiMessage.Caption = "Overviewdata loading..."
loadingMessageApplied = True
GridViewWorkflows.ShowLoadingPanel()
+ Await Task.Delay(10)
showLoadingPanel = True
+
+ If GridControlWorkflows.Visible Then
+ GridControlWorkflows.BeginUpdate()
+ gridUpdateStarted = True
+ GridViewWorkflows.BeginUpdate()
+ viewUpdateStarted = True
+ End If
+
If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then
LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False)
NO_WORKFLOWITEMS = True
@@ -1921,12 +1970,7 @@ Public Class frmMain
Exit Function
End If
- If GridControlWorkflows.Visible Then
- GridControlWorkflows.BeginUpdate()
- gridUpdateStarted = True
- GridViewWorkflows.BeginUpdate()
- viewUpdateStarted = True
- End If
+
Dim oStopWatch1 As New RefreshHelper.SW("LGO#Load_Profiles_for_User")
Load_Profiles_for_User()
@@ -1982,20 +2026,14 @@ Public Class frmMain
Dim oADDED = GET_LAST_ADDED(DT_CURR_WF_ITEMS)
Dim oChanged = GET_LAST_CHANGED(DT_CURR_WF_ITEMS)
Dim oCOUNT = DT_CURR_WF_ITEMS.Rows.Count
- If pForceReload = False Then
- If oADDED = OVERVIEW_ADDED_WHEN And oChanged = OVERVIEW_CHANGED_WHEN And oCOUNT = OVERVIEW_COUNT Then
- LOGGER.Debug("No changes on OverviewHash - so exit Load_Grid_overview")
- Exit Function
- Else
- OVERVIEW_ADDED_WHEN = oADDED
- OVERVIEW_CHANGED_WHEN = oChanged
- OVERVIEW_COUNT = oCOUNT
- End If
- End If
- NO_WORKFLOWITEMS = (DT_CURR_WF_ITEMS.Rows.Count = 0)
+ ' Workflowitems-Status setzen
+ NO_WORKFLOWITEMS = (oCOUNT = 0)
+
+ ' Caption IMMER aktualisieren
+ UpdateGridCaption()
+
If NO_WORKFLOWITEMS Then
- lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, "")
GridControlWorkflows.Visible = False
bindsourcegrid.DataSource = Nothing
GridControlWorkflows.DataSource = Nothing
@@ -2357,15 +2395,15 @@ Public Class frmMain
End If
End Sub
Sub LoadCURRENT_DT_PROFILES()
- Dim oSQL = $"select * from TBPM_PROFILE where ACTIVE = 1"
+ Dim oSQL = $"select * from TBPM_PROFILE WITH (NOLOCK)where ACTIVE = 1"
CURRENT_DT_PROFILES = DatabaseFallback.GetDatatable("TBPM_PROFILE", New GetDatatableOptions(oSQL, DatabaseType.ECM))
- oSQL = $"select * from TBDD_GUI_LANGUAGE_PHRASE where LANGUAGE = '{USER_LANGUAGE}' AND MODULE = 'PM' AND TITLE LIKE 'PROFILE_%'"
+ oSQL = $"select * from TBDD_GUI_LANGUAGE_PHRASE WITH (NOLOCK) where LANGUAGE = '{USER_LANGUAGE}' AND MODULE = 'PM' AND TITLE LIKE 'PROFILE_%'"
CURRENT_DT_PROFILE_LANGUAGE = DatabaseFallback.GetDatatable("TBPMPROFILE_LANGUAGE_TERMS", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}'"
})
End Sub
Sub LoadVWPM_CONTROL_INDEX()
- Dim oSQL = $"SELECT * FROM VWPM_CONTROL_INDEX ORDER BY PROFIL_ID,Y_LOC, X_LOC"
+ Dim oSQL = $"SELECT * FROM VWPM_CONTROL_INDEX WITH (NOLOCK) ORDER BY PROFIL_ID,Y_LOC, X_LOC"
'DTVWCONTROLS_INDEX = DataASorDB.GetDatatable("DD_ECM", oSQL, "VWPM_CONTROL_INDEX", "")
DTVWCONTROLS_INDEX = DatabaseFallback.GetDatatable("VWPM_CONTROL_INDEX", New GetDatatableOptions(oSQL, DatabaseType.ECM))
End Sub
@@ -2389,7 +2427,7 @@ Public Class frmMain
LOGGER.Debug($"VWPM_PROFILE_ACTIVE-SELECT used from DD-SQL-Config..")
Else
oSQL = $"SELECT [dbo].[FNDD_LANGUAGE_PHRASE] ('PROFILE_TITLE' + CONVERT(VARCHAR(4),T.GUID),'{USER_LANGUAGE}','PM') as GROUP_TEXT_LANG, T.*
-FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_GET_ACTIVE_PROFILES_USER] ({USER_ID}))"
+FROM VWPM_PROFILE_ACTIVE T WITH (NOLOCk) WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_GET_ACTIVE_PROFILES_USER] ({USER_ID}))"
End If
@@ -2411,7 +2449,7 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
CURRENT_DT_PROFILE = CURRENT_DT_PROFILES.Clone()
End If
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(40)
- oSQL = "select * from TBPM_PROFILE_SEARCH where TYPE = 'DOC' AND ACTIVE = 1 ORDER BY PROFILE_ID,TAB_INDEX"
+ oSQL = "select * from TBPM_PROFILE_SEARCH WITH (NOLOCK) where TYPE = 'DOC' AND ACTIVE = 1 ORDER BY PROFILE_ID,TAB_INDEX"
If SQL_VALIDATOR_SEARCHES <> String.Empty Then
SQL_VALIDATOR_SEARCHES = SQL_VALIDATOR_SEARCHES.Replace("@USR_LANG_CODE", User.Language)
oSQL = SQL_VALIDATOR_SEARCHES
@@ -2423,13 +2461,13 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
DT_FILTERED_PROFILE_SEARCHES_DOC = BASEDATA_DT_PROFILES_SEARCHES_DOC.Clone()
End If
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(50)
- oSQL = "select * from TBPM_PROFILE_SEARCH where TYPE = 'SQL' AND ACTIVE = 1 ORDER BY PROFILE_ID,TAB_INDEX"
+ oSQL = "select * from TBPM_PROFILE_SEARCH WITH (NOLOCK) where TYPE = 'SQL' AND ACTIVE = 1 ORDER BY PROFILE_ID,TAB_INDEX"
BASEDATA_DT_PROFILES_SEARCHES_SQL = DatabaseFallback.GetDatatable("TBPM_PROFILE_SEARCH", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = "TYPE = 'SQL'",
.SortByColumn = "PROFILE_ID,TAB_INDEX"
})
- oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS", {USER_LANGUAGE})
+ oSQL = String.Format("SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{0}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, '{0}' as LANGUAGE, * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK)", {USER_LANGUAGE})
BASEDATA_TBPM_PROFILE_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = String.Format("LANGUAGE = '{0}'", {USER_LANGUAGE})
})
@@ -2442,11 +2480,13 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
If pMode = "Load" Then
DTVWCONTROL_INDEX = DTVWCONTROLS_INDEX.Clone()
End If
- oSQL = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE LEN(ISNULL(SQL_UEBERPRUEFUNG,'')) > 0 AND CTRL_TYPE <> 'BUTTON'"
-
+ oSQL = $"SELECT * FROM TBPM_PROFILE_CONTROLS WITH (NOLOCK) WHERE LEN(ISNULL(SQL_UEBERPRUEFUNG,'')) > 0 AND CTRL_TYPE <> 'BUTTON'"
DTCONTROLS_WITH_SQL = DatabaseFallback.GetDatatable("DTCONTROLS_WITH_SQL", New GetDatatableOptions(oSQL, DatabaseType.ECM))
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(85)
+ oSQL = "SELECT * FROM TBPM_PROFILE_FINAL_INDEXING with (NOLOCK) WHERE ACTIVE = 1"
+ DTTBPM_PROFILE_FINAL_INDEXING = DatabaseFallback.GetDatatable("TBPM_PROFILE_FINAL_INDEXING", New GetDatatableOptions(oSQL, DatabaseType.ECM))
+
If pMode = "bwBasicData" Then bwBasicData.ReportProgress(100)
Catch ex As Exception
LOGGER.Warn($"Error in GetBaseData - Error: [{ex.Message}]")
@@ -2848,15 +2888,37 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
LOGGER.Error(ex.Message)
End Try
End Sub
-
- Sub Create_View_Caption()
+ Private Sub UpdateGridCaption()
Try
- lblCaptionMainGrid.Text = S.Gesamtübersicht
+ LOGGER.Debug($"UpdateGridCaption called - GRID_LOAD_TYPE: [{GRID_LOAD_TYPE}], CURRENT_CLICKED_PROFILE_TITLE: [{CURRENT_CLICKED_PROFILE_TITLE}], NO_WORKFLOWITEMS: [{NO_WORKFLOWITEMS}]")
+ If GRID_LOAD_TYPE = "OVERVIEW" Then
+ ' Übersicht-Caption
+ lblCaptionMainGrid.Text = S.Gesamtübersicht
+ ' Filter-Info hinzufügen, falls aktiv
+ If GridViewWorkflows.ActiveFilterString <> String.Empty Then
+ Dim oTermFilterActive As String = String.Format("{0} ({1})", S.Filter_aktiv, GridViewWorkflows.RowCount)
+ lblCaptionMainGrid.Text = String.Format("{0} - {1}", S.Gesamtübersicht, oTermFilterActive)
+ End If
+ ElseIf GRID_LOAD_TYPE.StartsWith("PROFILE#") Then
+ ' Profil-Caption
+ If Not String.IsNullOrEmpty(CURRENT_CLICKED_PROFILE_TITLE) Then
+ If NO_WORKFLOWITEMS Then
+ lblCaptionMainGrid.Text = String.Format(S.Aktuell_keine_Workflowdaten_vorhanden___0_, CURRENT_CLICKED_PROFILE_TITLE)
+ Else
+ lblCaptionMainGrid.Text = CURRENT_CLICKED_PROFILE_TITLE
+ End If
+ End If
+ End If
+
+ LOGGER.Debug($"Grid Caption updated: [{lblCaptionMainGrid.Text}]")
Catch ex As Exception
-
+ LOGGER.Error(ex)
End Try
End Sub
+ Sub Create_View_Caption()
+ UpdateGridCaption()
+ End Sub
Sub Grid_Export()
XtraSaveFileDialog1.FileName = "Overview.xlsx"
XtraSaveFileDialog1.DefaultExt = ".xlsx"
diff --git a/app/TaskFlow/frmValidator.vb b/app/TaskFlow/frmValidator.vb
index 4b743d5..1e5d431 100644
--- a/app/TaskFlow/frmValidator.vb
+++ b/app/TaskFlow/frmValidator.vb
@@ -1,4 +1,6 @@
-Imports System.ComponentModel
+Imports System.Collections.Generic
+Imports System.ComponentModel
+Imports System.Data.Entity.Core.Common.CommandTrees
'Imports System.Data.SqlClient
Imports System.Globalization
Imports System.IO
@@ -29,8 +31,6 @@ Imports DigitalData.Modules.Interfaces
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.ZooFlow.Constants
-Imports System.Collections.Generic
-
'Imports System.Windows.Forms.VisualStyles.VisualStyleElement
'Imports System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox
Imports WINDREAMLib
@@ -128,6 +128,8 @@ Public Class frmValidator
Private ReadOnly _SqlScalarCache As New Dictionary(Of String, Object)(StringComparer.OrdinalIgnoreCase)
Private _SqlControlsByGuid As Dictionary(Of Integer, List(Of DataRow))
Private _LookupControlsByRepository As Dictionary(Of RepositoryItemLookupControl3, LookupControl3)
+ Private _CachedFinalIndexing As DataTable = Nothing
+
Private Class Translation_Strings
Inherits My.Resources.frmValidator_Strings
End Class
@@ -202,6 +204,16 @@ Public Class frmValidator
_FormClosing = False
_FormLoaded = False
+
+ ' In Load_Next_Document (einmalig):
+ If _CachedFinalIndexing Is Nothing AndAlso DTTBPM_PROFILE_FINAL_INDEXING IsNot Nothing Then
+ Dim rows = DTTBPM_PROFILE_FINAL_INDEXING.Select($"PROFIL_ID = {CURRENT_ProfilGUID} AND ACTIVE = 1", "SEQUENCE")
+ If rows.Length > 0 Then
+ _CachedFinalIndexing = rows.CopyToDataTable()
+ End If
+ End If
+
+
If LOG_HOTSPOTS Then
MyValidationLogger.Info($"[PERF] Nach Initialisierung: {(DateTime.Now - perfLastCheck).TotalMilliseconds}ms")
perfLastCheck = DateTime.Now
@@ -936,11 +948,15 @@ Public Class frmValidator
PanelValidatorControl.Controls.Clear()
_LookupControlsByRepository = New Dictionary(Of RepositoryItemLookupControl3, LookupControl3)()
- Dim oSQL = $"SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{USER_LANGUAGE}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY Y_LOC, X_LOC"
- DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
- .FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}",
- .SortByColumn = "Y_LOC, X_LOC"
- })
+ Dim oSQL As String
+ Dim oFilter As String = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}"
+ DT_CONTROLS = GetControlMetaBySql(oFilter, "Y_LOC, X_LOC")
+
+ 'Dim oSQL = $"SELECT [dbo].[FNPM_LANGUAGE_CONTROL_TEXT] (NAME,'{USER_LANGUAGE}',CTRL_TYPE,CTRL_TEXT) CTRL_CAPTION_LANG, * FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY Y_LOC, X_LOC"
+ 'DT_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
+ ' .FilterExpression = $"LANGUAGE = '{USER_LANGUAGE}' AND PROFIL_ID = {CURRENT_ProfilGUID}",
+ ' .SortByColumn = "Y_LOC, X_LOC"
+ '})
oSQL = $"SELECT IIF(LANG.CAPTION IS NULL,T.SPALTEN_HEADER,LANG.CAPTION) SPALTEN_HEADER_LANG, T.* from TBPM_CONTROL_TABLE T INNER JOIN TBPM_PROFILE_CONTROLS T1 ON T.CONTROL_ID = T1.GUID
LEFT JOIN (SELECT * FROM TBPM_CONTOL_TABLE_LANG WHERE LANG_CODE = '{USER_LANGUAGE}') LANG ON T.GUID = LANG.COL_ID WHERE T1.CONTROL_ACTIVE = 1 AND T.CONTROL_ID = T1.GUID AND T1.PROFIL_ID = {CURRENT_ProfilGUID} ORDER BY T.SEQUENCE"
@@ -2610,9 +2626,9 @@ Public Class frmValidator
End If
End If
End Sub
- Private Function GetControlMetaBySql(filter As String) As DataTable
+ Private Function GetControlMetaBySql(filter As String, Optional SortBy As String = "") As DataTable
Dim dt As DataTable = Nothing
- Dim cacheKey = $"META|{filter}"
+ Dim cacheKey = $"META|{filter}|{SortBy}"
If _SqlDataCache.TryGetValue(cacheKey, dt) Then
Return dt
@@ -2620,14 +2636,17 @@ Public Class frmValidator
If BASEDATA_TBPM_PROFILE_CONTROLS IsNot Nothing Then
Try
+ Dim rows As DataRow()
+
If String.IsNullOrWhiteSpace(filter) Then
- dt = BASEDATA_TBPM_PROFILE_CONTROLS.Copy()
+ rows = BASEDATA_TBPM_PROFILE_CONTROLS.Select()
Else
- Dim rows = BASEDATA_TBPM_PROFILE_CONTROLS.Select(filter)
- dt = BASEDATA_TBPM_PROFILE_CONTROLS.Clone()
- If rows.Length > 0 Then
- dt = rows.CopyToDataTable()
- End If
+ rows = BASEDATA_TBPM_PROFILE_CONTROLS.Select(filter, SortBy)
+ End If
+
+ dt = BASEDATA_TBPM_PROFILE_CONTROLS.Clone()
+ If rows.Length > 0 Then
+ dt = rows.CopyToDataTable()
End If
_SqlDataCache(cacheKey) = dt
@@ -2637,6 +2656,7 @@ Public Class frmValidator
End Try
End If
+ ' Fallback zu SQL
Dim query As String
If String.IsNullOrWhiteSpace(filter) Then
query = "SELECT * FROM TBPM_PROFILE_CONTROLS"
@@ -2644,6 +2664,10 @@ Public Class frmValidator
query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE {filter}"
End If
+ If Not String.IsNullOrWhiteSpace(SortBy) Then
+ query &= $" ORDER BY {SortBy}"
+ End If
+
dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM))
If dt IsNot Nothing Then
_SqlDataCache(cacheKey) = dt
@@ -4531,7 +4555,6 @@ Public Class frmValidator
End Sub
Private Sub btnSave_Click(sender As Object, e As EventArgs) Handles btnSave.Click
btnSave.Enabled = False
-
' TODO: Use when working on Validation
If ForceGridValidation() = True Then
Finish_WFStep()
@@ -4714,12 +4737,8 @@ Public Class frmValidator
If includeFI = True Then
Try
- Dim oSQL = $"SELECT * FROM TBPM_PROFILE_FINAL_INDEXING WHERE PROFIL_ID = {CURRENT_ProfilGUID} AND ACTIVE = 1 ORDER BY SEQUENCE"
- Dim oDTFinalIndexing As DataTable
- oDTFinalIndexing = DatabaseFallback.GetDatatable("TBPM_PROFILE_FINAL_INDEXING", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
- .FilterExpression = $"PROFIL_ID = {CURRENT_ProfilGUID}",
- .SortByColumn = "SEQUENCE"
- })
+
+ Dim oDTFinalIndexing As DataTable = _CachedFinalIndexing
If oDTFinalIndexing?.Rows.Count > 0 Then
'Jetzt finale Indexe setzen