Optimierungen

This commit is contained in:
Developer01
2026-01-30 14:40:02 +01:00
parent 11d27cd860
commit bca424f50f
6 changed files with 96 additions and 32 deletions

View File

@@ -332,7 +332,7 @@ Public Class ClassControlCreator
End If End If
If Not designMode Then If Not designMode Then
'oControl.ReadOnly = oReadOnly oControl.ReadOnly = oReadOnly
oControl.TabStop = Not oReadOnly oControl.TabStop = Not oReadOnly
oControl.BackColor = IIf(oReadOnly, Color.LightGray, Color.White) oControl.BackColor = IIf(oReadOnly, Color.LightGray, Color.White)

View File

@@ -34,7 +34,7 @@ Module ModuleRuntimeVariables
Public Property BASEDATA_TBDD_COLUMNS_FORMAT As DataTable Public Property BASEDATA_TBDD_COLUMNS_FORMAT As DataTable
Public Property BASEDATA_TBPM_PROFILE_CONTROLS As DataTable
Public Property CURRENT_ProfilGUID As Integer Public Property CURRENT_ProfilGUID As Integer
Public Property CURRENT_ProfilName As String Public Property CURRENT_ProfilName As String

View File

@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
' übernehmen, indem Sie "*" eingeben: ' übernehmen, indem Sie "*" eingeben:
' <Assembly: AssemblyVersion("1.0.*")> ' <Assembly: AssemblyVersion("1.0.*")>
<Assembly: AssemblyVersion("2.7.7.0")> <Assembly: AssemblyVersion("2.7.8.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")> <Assembly: AssemblyFileVersion("1.0.0.0")>
<Assembly: NeutralResourcesLanguage("")> <Assembly: NeutralResourcesLanguage("")>

View File

@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0 LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADw
CAAAAk1TRnQBSQFMAgEBAgEAAYgBCwGIAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo CAAAAk1TRnQBSQFMAgEBAgEAAZABCwGQAQsBEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5 AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA

View File

@@ -1289,6 +1289,8 @@ Public Class frmMain
Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task Private Async Function Decide_Load(pIsFormLoad As Boolean, Optional ForceReload As Boolean = False) As Tasks.Task
Dim refreshWasEnabled As Boolean = False Dim refreshWasEnabled As Boolean = False
Dim showLoadingPanel As Boolean = False Dim showLoadingPanel As Boolean = False
Dim useWaitCursorApplied As Boolean = False
Dim previousMessage As String = bsiMessage.Caption
Try Try
LOGGER.Debug($"Decide_Load: pIsFormLoad [{pIsFormLoad}] - ForceReload [{ForceReload}] - GRID_LOAD_TYPE [{GRID_LOAD_TYPE}] ") LOGGER.Debug($"Decide_Load: pIsFormLoad [{pIsFormLoad}] - ForceReload [{ForceReload}] - GRID_LOAD_TYPE [{GRID_LOAD_TYPE}] ")
@@ -1308,11 +1310,15 @@ Public Class frmMain
TimerRefresh.Enabled = False TimerRefresh.Enabled = False
End If End If
If GridControlWorkflows.Visible Then If Me.UseWaitCursor = False Then
GridViewWorkflows.ShowLoadingPanel() Me.UseWaitCursor = True
showLoadingPanel = True useWaitCursorApplied = True
End If End If
bsiMessage.Caption = "Daten werden geladen..."
GridViewWorkflows.ShowLoadingPanel()
showLoadingPanel = True
TimerRefresh.Stop() TimerRefresh.Stop()
FRONTEND_ACTION = "DECIDE_LOAD" FRONTEND_ACTION = "DECIDE_LOAD"
@@ -1350,6 +1356,10 @@ Public Class frmMain
If showLoadingPanel Then If showLoadingPanel Then
GridViewWorkflows.HideLoadingPanel() GridViewWorkflows.HideLoadingPanel()
End If End If
If useWaitCursorApplied Then
Me.UseWaitCursor = False
End If
bsiMessage.Caption = previousMessage
If refreshWasEnabled Then If refreshWasEnabled Then
TimerRefresh.Enabled = True TimerRefresh.Enabled = True
End If End If
@@ -1880,13 +1890,26 @@ Public Class frmMain
Dim viewUpdateStarted As Boolean = False Dim viewUpdateStarted As Boolean = False
Dim layoutRestored As Boolean = False Dim layoutRestored As Boolean = False
Dim resetLayoutTriggered As Boolean = False Dim resetLayoutTriggered As Boolean = False
Dim showLoadingPanel As Boolean = False
Dim useWaitCursorApplied As Boolean = False
Dim previousMessage As String = bsiMessage.Caption
Dim loadingMessageApplied As Boolean = False
GridControlWorkflows_Visible() GridControlWorkflows_Visible()
GRID_LOAD_TYPE = "OVERVIEW" GRID_LOAD_TYPE = "OVERVIEW"
CURRENT_CLICKED_PROFILE_ID = 0 CURRENT_CLICKED_PROFILE_ID = 0
Try Try
bsiMessage.Caption = "" If Me.UseWaitCursor = False Then
Me.UseWaitCursor = True
useWaitCursorApplied = True
End If
bsiMessage.Caption = "Daten werden geladen..."
loadingMessageApplied = True
GridViewWorkflows.ShowLoadingPanel()
showLoadingPanel = True
If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then If BASEDATA_DT_VW_PROFILE_USER.Rows.Count = 0 Then
LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False) LOGGER.Info("Attention: No profiles for user: '" & USER_USERNAME & "' configured!", False)
@@ -2098,6 +2121,15 @@ Public Class frmMain
If gridUpdateStarted Then If gridUpdateStarted Then
GridControlWorkflows.EndUpdate() GridControlWorkflows.EndUpdate()
End If End If
If showLoadingPanel Then
GridViewWorkflows.HideLoadingPanel()
End If
If useWaitCursorApplied Then
Me.UseWaitCursor = False
End If
If loadingMessageApplied AndAlso bsiMessage.Caption = "Daten werden geladen..." Then
bsiMessage.Caption = previousMessage
End If
oStopWatch.Done() oStopWatch.Done()
End Try End Try
End Function End Function
@@ -2397,6 +2429,10 @@ FROM VWPM_PROFILE_ACTIVE T WHERE T.GUID IN (SELECT PROFILE_ID FROM [dbo].[FNPM_G
.FilterExpression = "TYPE = 'SQL'", .FilterExpression = "TYPE = 'SQL'",
.SortByColumn = "PROFILE_ID,TAB_INDEX" .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})
BASEDATA_TBPM_PROFILE_CONTROLS = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS_LANGUAGE", New GetDatatableOptions(oSQL, DatabaseType.ECM) With {
.FilterExpression = String.Format("LANGUAGE = '{0}'", {USER_LANGUAGE})
})
If pMode = "Load" Then If pMode = "Load" Then
BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Clone() BASEDATA_DT_PROFILE_SEARCHES_SQL = BASEDATA_DT_PROFILES_SEARCHES_SQL.Clone()
End If End If

View File

@@ -1006,6 +1006,7 @@ Public Class frmValidator
AddHandler txt.GotFocus, AddressOf OnTextBoxFocus AddHandler txt.GotFocus, AddressOf OnTextBoxFocus
AddHandler txt.LostFocus, AddressOf OnTextBoxLostFocus AddHandler txt.LostFocus, AddressOf OnTextBoxLostFocus
AddHandler txt.KeyUp, AddressOf OnTextBoxKeyUp AddHandler txt.KeyUp, AddressOf OnTextBoxKeyUp
AddHandler txt.KeyDown, AddressOf OnTextBoxKeyDown
AddHandler txt.EditValueChanged, AddressOf OnTextBoxEditValueChanged AddHandler txt.EditValueChanged, AddressOf OnTextBoxEditValueChanged
oMyControl = txt oMyControl = txt
@@ -1382,7 +1383,17 @@ Public Class frmValidator
oMeta.IsDirty = True oMeta.IsDirty = True
MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty") MyValidationLogger.Debug($"TextBox [{oMeta.Name}] marked as dirty")
End Sub End Sub
Private Sub OnTextBoxKeyDown(sender As Object, e As KeyEventArgs)
Dim oTextBox As BaseEdit = TryCast(sender, BaseEdit)
If oTextBox Is Nothing Then
Exit Sub
End If
If oTextBox.ReadOnly AndAlso e.Control AndAlso e.KeyCode = Keys.X Then
e.Handled = True
e.SuppressKeyPress = True
End If
End Sub
Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs) Public Sub OnTextBoxKeyUp(sender As Object, e As KeyEventArgs)
If _ControlHandleStarted = True Then If _ControlHandleStarted = True Then
_ControlHandleStarted = False _ControlHandleStarted = False
@@ -1394,11 +1405,9 @@ Public Class frmValidator
If (e.KeyCode = Keys.Return) Or (e.KeyCode = Keys.Tab) Or (e.KeyCode = Keys.Enter) Then If (e.KeyCode = Keys.Return) Or (e.KeyCode = Keys.Tab) Or (e.KeyCode = Keys.Enter) Then
Try Try
Dim CONTROL_ID = DirectCast(oTextBox.Tag, ClassControlCreator.ControlMetadata).Guid
Dim oSql = String.Format("SELECT NAME, CONNECTION_ID, SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} AND SQL_UEBERPRUEFUNG LIKE '%{1}%'", CURRENT_ProfilGUID, oTextBox.Name)
Dim oFilter = $"PROFIL_ID = {CURRENT_ProfilGUID} AND SQL_UEBERPRUEFUNG LIKE '%{oTextBox.Name}%'" Dim oFilter = $"PROFIL_ID = {CURRENT_ProfilGUID} AND SQL_UEBERPRUEFUNG LIKE '%{oTextBox.Name}%'"
Dim DTCONTROLS_UEBP As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS_SQL_UEP", oSql, oFilter) Dim DTCONTROLS_UEBP As DataTable = GetControlMetaBySql(oFilter)
If Not IsNothing(DTCONTROLS_UEBP) AndAlso DTCONTROLS_UEBP.Rows.Count > 0 Then If Not IsNothing(DTCONTROLS_UEBP) AndAlso DTCONTROLS_UEBP.Rows.Count > 0 Then
For Each oRow As DataRow In DTCONTROLS_UEBP.Rows For Each oRow As DataRow In DTCONTROLS_UEBP.Rows
@@ -1597,14 +1606,12 @@ Public Class frmValidator
Public Sub onDGVRowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs) Public Sub onDGVRowValidating(ByVal sender As Object, ByVal e As DataGridViewCellCancelEventArgs)
Dim dgv As DataGridView = sender Dim dgv As DataGridView = sender
Try Try
Dim CONTROL_ID = DirectCast(dgv.Tag, ClassControlCreator.ControlMetadata).Guid Dim oFilter = String.Format("PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name)
Dim sql = String.Format("select NAME,CONNECTION_ID,SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name)
Dim oFilter = String.Format("CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, dgv.Name)
Dim DT As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS", sql, oFilter) Dim DTFilteredRows As DataTable = GetControlMetaBySql(oFilter)
If Not IsNothing(DT) And DT.Rows.Count > 0 Then If Not IsNothing(DTFilteredRows) And DTFilteredRows.Rows.Count > 0 Then
For Each ROW As DataRow In DT.Rows For Each ROW As DataRow In DTFilteredRows.Rows
Try Try
Dim displayboxname = ROW.Item("NAME").ToString Dim displayboxname = ROW.Item("NAME").ToString
If Not IsDBNull(ROW.Item("CONNECTION_ID")) And Not IsDBNull(ROW.Item("SQL_UEBERPRUEFUNG")) Then If Not IsDBNull(ROW.Item("CONNECTION_ID")) And Not IsDBNull(ROW.Item("SQL_UEBERPRUEFUNG")) Then
@@ -1612,9 +1619,6 @@ Public Class frmValidator
Dim cellvalue = dgv.Rows(dgv.Rows.Count - 2).Cells(0).Value.ToString() Dim cellvalue = dgv.Rows(dgv.Rows.Count - 2).Cells(0).Value.ToString()
sql_Statement = sql_Statement.ToString.Replace(dgv.Name, cellvalue) sql_Statement = sql_Statement.ToString.Replace(dgv.Name, cellvalue)
'Dim resultDT As DataTable = DatabaseFallback.GetDatatable(New GetDatatableOptions(sql_Statement, DatabaseType.ECM) With {
' .ConnectionId = ROW.Item("CONNECTION_ID")
'})
Dim resultDT As DataTable = GetCachedDatatable(sql_Statement, ROW.Item("CONNECTION_ID")) Dim resultDT As DataTable = GetCachedDatatable(sql_Statement, ROW.Item("CONNECTION_ID"))
If resultDT.Rows.Count >= 1 Then If resultDT.Rows.Count >= 1 Then
@@ -2354,11 +2358,9 @@ Public Class frmValidator
'Abschluss() 'Abschluss()
Else Else
Try Try
Dim CONTROL_ID = DirectCast(oCombobox.Tag, ClassControlCreator.ControlMetadata).Guid Dim oFilter = String.Format("PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name)
Dim sql = String.Format("select NAME,CONNECTION_ID,SQL_UEBERPRUEFUNG FROM TBPM_PROFILE_CONTROLS WHERE CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} AND SQL_UEBERPRUEFUNG LIKE '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name)
Dim oFilter = String.Format("CONTROL_ACTIVE = 1 AND PROFIL_ID = {0} And SQL_UEBERPRUEFUNG Like '%{1}%'", CURRENT_ProfilGUID, oCombobox.Name)
Dim DT As DataTable = GetControlMetaBySql("TBPM_PROFILE_CONTROLS", sql, oFilter) Dim DT As DataTable = GetControlMetaBySql(oFilter)
If Not IsNothing(DT) And DT.Rows.Count > 0 Then If Not IsNothing(DT) And DT.Rows.Count > 0 Then
If _DependingControl_In_Action = True Then If _DependingControl_In_Action = True Then
@@ -2608,17 +2610,43 @@ Public Class frmValidator
End If End If
End If End If
End Sub End Sub
Private Function GetControlMetaBySql(tableName As String, sql As String, filter As String) As DataTable Private Function GetControlMetaBySql(filter As String) As DataTable
Dim dt As DataTable = Nothing Dim dt As DataTable = Nothing
Dim cacheKey = $"META|{tableName}|{sql}|{filter}" Dim cacheKey = $"META|{filter}"
If _SqlDataCache.TryGetValue(cacheKey, dt) Then
Return dt
End If
If BASEDATA_TBPM_PROFILE_CONTROLS IsNot Nothing Then
Try
If String.IsNullOrWhiteSpace(filter) Then
dt = BASEDATA_TBPM_PROFILE_CONTROLS.Copy()
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
End If
If Not _SqlDataCache.TryGetValue(cacheKey, dt) Then
dt = DatabaseFallback.GetDatatable(tableName, New GetDatatableOptions(sql, DatabaseType.ECM) With {
.FilterExpression = filter
})
If dt IsNot Nothing Then
_SqlDataCache(cacheKey) = dt _SqlDataCache(cacheKey) = dt
End If Return dt
Catch ex As Exception
MyValidationLogger.Warn($"GetControlMetaBySql cache filter failed, fallback to DB: {ex.Message}")
End Try
End If
Dim query As String
If String.IsNullOrWhiteSpace(filter) Then
query = "SELECT * FROM TBPM_PROFILE_CONTROLS"
Else
query = $"SELECT * FROM TBPM_PROFILE_CONTROLS WHERE {filter}"
End If
dt = DatabaseFallback.GetDatatable("TBPM_PROFILE_CONTROLS", New GetDatatableOptions(query, DatabaseType.ECM))
If dt IsNot Nothing Then
_SqlDataCache(cacheKey) = dt
End If End If
Return dt Return dt