Monitor: Datumsspalten im langen Format / UserID des aktuellen Users kann verwendet werden / Speicheroptimierte Abfragen ohne Transaktion

This commit is contained in:
2026-03-06 12:26:18 +01:00
parent 6912f290cd
commit fca7d1e0ff
4 changed files with 63 additions and 12 deletions

View File

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

View File

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

View File

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

View File

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