Geschwindigkeitsoptimierungen Main

This commit is contained in:
Developer01
2026-02-02 11:44:17 +01:00
parent bca424f50f
commit 83e31a2e00
5 changed files with 312 additions and 258 deletions

View File

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