From fca7d1e0ff8d1ac32bed63cbf6003fed01209d25 Mon Sep 17 00:00:00 2001 From: pitzm Date: Fri, 6 Mar 2026 12:26:18 +0100 Subject: [PATCH] Monitor: Datumsspalten im langen Format / UserID des aktuellen Users kann verwendet werden / Speicheroptimierte Abfragen ohne Transaktion --- GUIs.Monitor/Constants.vb | 7 ---- GUIs.Monitor/Data/Search.vb | 3 +- GUIs.Monitor/Forms/frmMonitor.vb | 15 +++++++-- GUIs.Monitor/Helper/SearchLoader.vb | 50 ++++++++++++++++++++++++++++- 4 files changed, 63 insertions(+), 12 deletions(-) diff --git a/GUIs.Monitor/Constants.vb b/GUIs.Monitor/Constants.vb index e677b10..83e2b09 100644 --- a/GUIs.Monitor/Constants.vb +++ b/GUIs.Monitor/Constants.vb @@ -1,11 +1,4 @@ Namespace Constants - 'Public Const STATE_SUCCESS As String = "SUCCESS" - 'Public Const STATE_FAILURE As String = "FAILURE" - 'Public Const STATE_WARNING As String = "WARNING" - 'Public Const STATE_WAITING As String = "WAITING" - 'Public Const STATE_HIGHLIGHT As String = "HIGHLIGHT" - 'Public Const STATE_DEFAULT As String = "DEFAULT" - 'Public Const STATE_USER As String = "USER" Public Class State Public Const STATE_SUCCESS As String = "SUCCESS" diff --git a/GUIs.Monitor/Data/Search.vb b/GUIs.Monitor/Data/Search.vb index e584bae..5231d31 100644 --- a/GUIs.Monitor/Data/Search.vb +++ b/GUIs.Monitor/Data/Search.vb @@ -1,10 +1,11 @@ Public Class Search Public Id As Integer Public Title As String - Public Description As String + Public Caption As String Public SQLCommand As String Public ReturnType As Constants.ReturnTypeEnum Public ExpectedParameterCount As Integer + Public UseMOTLogic As Boolean Public Parameters As List(Of SearchParameter) diff --git a/GUIs.Monitor/Forms/frmMonitor.vb b/GUIs.Monitor/Forms/frmMonitor.vb index 8dcf5e5..3d899cf 100644 --- a/GUIs.Monitor/Forms/frmMonitor.vb +++ b/GUIs.Monitor/Forms/frmMonitor.vb @@ -240,7 +240,14 @@ Public Class frmMonitor If oSearch.SQLCommand.Length > 0 Then oSQL = Patterns.ReplaceControlValues(oSearch.SQLCommand, oControls) Logger.Debug($"SQL after replacing placeholder: [{0}]", oSQL) - oTable = Await Database.GetDatatableAsync(oSQL) + + If oSearch.UseMOTLogic = True Then + ' MOT-Abfragen müssen OHNE Transaktion aufgerufen werden + oTable = Await Database.GetDatatableWithoutTransactionAsync(oSQL) + Else + ' sonstige Abfragen wie bisher mit Transaktion + oTable = Await Database.GetDatatableAsync(oSQL) + End If End If Dim oStartTime = Now @@ -271,7 +278,7 @@ Public Class frmMonitor For Each oColumn In TreeListResults.Columns oColumn.Visible = DisplayColumns.Contains(oColumn.FieldName) Next - GridBuilder.SetDateTimeColumns(TreeListResults) + GridBuilder.SetDateTimeColumns(TreeListResults, "G") Dim oStateColumn As TreeListColumn = TreeListResults.Columns.Item("STATE") For Each oNode As TreeListNode In TreeListResults.Nodes @@ -357,7 +364,7 @@ Public Class frmMonitor GridControlResults.DataSource = oTable GridViewResults.PopulateColumns() - GridBuilder.SetDateTimeColumns(GridViewResults) + GridBuilder.SetDateTimeColumns(GridViewResults, "G") For Each oColumn As GridColumn In GridViewResults.Columns If oColumn.ColumnType = GetType(Integer) Then @@ -1040,6 +1047,8 @@ Public Class frmMonitor GridControl.DataSource = Table GridControl.DefaultView.PopulateColumns() + 'Hiermit wird das Datumsformat für Untertabellen auf lang gesetzt + GridBuilder.SetDateTimeColumns(GridControl.DefaultView, "G") Dim oTabPage = DirectCast(GridControl.Parent, XtraTabPage) oTabPage.PageVisible = True diff --git a/GUIs.Monitor/Helper/SearchLoader.vb b/GUIs.Monitor/Helper/SearchLoader.vb index 7391ad6..9efe636 100644 --- a/GUIs.Monitor/Helper/SearchLoader.vb +++ b/GUIs.Monitor/Helper/SearchLoader.vb @@ -9,6 +9,8 @@ Public Class SearchLoader Private ReadOnly Config As Config Private ReadOnly Database As MSSQLServer + Private _currentUserId As Int16 = 0 + Public Searches As New List(Of Search) Public Parameters As New List(Of SearchParameter) Public ChartParameters As New List(Of ChartParameter) @@ -36,9 +38,10 @@ Public Class SearchLoader Dim oSearch = New Search With { .Id = oSearchId, .Title = oRow.ItemEx("TITLE", String.Empty), - .Description = oRow.ItemEx("CAPTION", String.Empty), + .Caption = oRow.ItemEx("CAPTION", String.Empty), .ReturnType = GetReturnType(oRow.ItemEx("RETURN_TYPE", String.Empty)), .SQLCommand = oRow.ItemEx("EXEC_SQL", String.Empty), + .UseMOTLogic = GetMOTLogicType(oRow.ItemEx("RETURN_TYPE", String.Empty)), .Parameters = oParams } @@ -55,6 +58,11 @@ Public Class SearchLoader Continue For End If + If oSearch.SQLCommand.Contains("{#USER#USER_ID}") = True Then + SetUserID() + oSearch.SQLCommand = oSearch.SQLCommand.Replace("{#USER#USER_ID}", _currentUserId.ToString()) + End If + ' Anzahl der erwarteten Parameter oSearch.ExpectedParameterCount = oSearch.SQLCommand.Split({"#CTRL#"}, StringSplitOptions.None).Length - 1 @@ -116,6 +124,27 @@ Public Class SearchLoader ChartParameters = oParameters End Sub + Private Sub SetUserID() + + If (_currentUserId > 0) Then + Return + End If + + Dim oCurrentUsername As String = Environment.UserName + _currentUserId = 1 + + If String.IsNullOrEmpty(oCurrentUsername) = False Then + Dim oSql = "SELECT GUID FROM TBDD_USER WHERE USERNAME = '" + oCurrentUsername + "'" + Dim oSqlResult = CStr(Database.GetScalarValue(oSql)) + Dim userID As Int16 + If Int16.TryParse(oSqlResult, userID) = False Then + userID = 1 + End If + _currentUserId = userID + End If + + End Sub + Private Function GetItemType(pTypeString As String) As ItemTypeEnum Select Case pTypeString Case "LIST" @@ -135,11 +164,30 @@ Public Class SearchLoader Return ReturnTypeEnum.TreeView Case "ChartView" Return ReturnTypeEnum.ChartView + Case "TableMOT" + Return ReturnTypeEnum.Table + Case "TreeViewMOT" + Return ReturnTypeEnum.TreeView + Case "ChartViewMOT" + Return ReturnTypeEnum.ChartView Case Else Return ReturnTypeEnum.Undefined End Select End Function + Private Function GetMOTLogicType(pTypeString As String) As Boolean + + If String.IsNullOrEmpty(pTypeString) Then + Return False + End If + + If pTypeString.Contains("MOT") Then + Return True + End If + + Return False + End Function + Private Function GetDataType(pTypeString As String) As DataTypeEnum Select Case pTypeString.ToUpper Case "BIT"