Imports DigitalData.Modules.Base Imports DigitalData.Modules.Database Imports DigitalData.Modules.Logging Imports DigitalData.GUIs.Monitor.Constants Public Class SearchLoader Inherits BaseClass Private ReadOnly Config As Config Private ReadOnly Database As MSSQLServer Public Searches As New List(Of Search) Public Parameters As New List(Of SearchParameter) Public ChartParameters As New List(Of ChartParameter) Public Sub New(pLogConfig As LogConfig, pConfig As Config, pDatabase As MSSQLServer) MyBase.New(pLogConfig) Config = pConfig Database = pDatabase End Sub Public Sub LoadSearches() Try Searches.Clear() Dim oSQL = $"SELECT * FROM TBMON_PROFILE WHERE ACTIVE = 1 ORDER BY SEQUENCE" Dim oTable = Database.GetDatatable(oSQL) For Each oRow As DataRow In oTable.Rows Dim oSearchId = oRow.ItemEx("GUID", 0) Dim oParams = Parameters. Where(Function(param) param.SearchId = oSearchId). OrderBy(Function(param) param.Sequence). ToList() Dim oSearch = New Search With { .Id = oSearchId, .Title = oRow.ItemEx("TITLE", String.Empty), .Description = oRow.ItemEx("CAPTION", String.Empty), .ReturnType = GetReturnType(oRow.ItemEx("RETURN_TYPE", String.Empty)), .SQLCommand = oRow.ItemEx("EXEC_SQL", String.Empty), .Parameters = oParams } ' Erzeuge einen Titel, falls der leer ist If oSearch.Title.Length <= 0 Then Logger.Warn($"For searchId [{0}] an empty title were defined!", oSearch.Id) oSearch.Title = "Suche " + oSearch.Id.ToString End If ' Es wurde kein SQL Command definiert, ohne geht nix ' Außer es ist eine Chart-Suche If oSearch.ReturnType <> ReturnTypeEnum.ChartView And (oSearch.SQLCommand Is Nothing Or oSearch.SQLCommand.Length = 0) Then Logger.Error($"For searchId [{0}] is NO SQLCommand defined!", oSearch.Id) Continue For End If ' Anzahl der erwarteten Parameter oSearch.ExpectedParameterCount = oSearch.SQLCommand.Split({"#CTRL#"}, StringSplitOptions.None).Length - 1 Searches.Add(oSearch) Next Catch ex As Exception Logger.Error(ex) Throw ex End Try End Sub Public Sub LoadSearchParameters() Dim oSQL As String = $"SELECT * FROM TBMON_PROFILE_PARAM WHERE ACTIVE = 1" Dim oTable As DataTable = Database.GetDatatable(oSQL) Dim oParameters As New List(Of SearchParameter) For Each oRow As DataRow In oTable.Rows oParameters.Add(New SearchParameter With { .Id = oRow.ItemEx("GUID", 0), .Title = oRow.ItemEx("CAPTION", String.Empty), .Description = oRow.ItemEx("DESCRIPTION", String.Empty), .DataType = GetDataType(oRow.ItemEx("DATA_TYPE", "VARCHAR")), .ItemString = oRow.ItemEx("ITEMS", String.Empty), .ItemType = GetItemType(oRow.ItemEx("ITEM_TYPE", String.Empty)), .Required = oRow.ItemEx("REQUIRED", True), .PatternTitle = oRow.ItemEx("PATTERN", String.Empty), .SearchId = oRow.ItemEx("PROFILE_ID", 0), .DefaultValue = oRow.ItemEx("DEFAULT_VALUE", String.Empty), .Sequence = oRow.ItemEx("SEQUENCE", 0) }) Next Parameters = oParameters End Sub Public Sub LoadChartParameters() Dim oSQL As String = $"SELECT * FROM TBMON_CHARTS WHERE ACTIVE = 1" Dim oTable As DataTable = Database.GetDatatable(oSQL) Dim oParameters As New List(Of ChartParameter) For Each oRow As DataRow In oTable.Rows oParameters.Add(New ChartParameter With { .Id = oRow.ItemEx("GUID", 0), .Title = oRow.ItemEx("TITLE", String.Empty), .SearchId = oRow.ItemEx("PROFILE_ID", 0), .ChartPos = GetChartPosType(oRow.ItemEx("POS_ID", 0)), .SQLCommand = oRow.ItemEx("SQL_COMMAND", String.Empty), .ChartType = GetChartType(oRow.ItemEx("CHART_TYPE", String.Empty)), .Argument = oRow.ItemEx("ARGUMENT", String.Empty), .Value = oRow.ItemEx("VALUE", String.Empty), .LabelType = GetLabelType(oRow.ItemEx("LABEL_TYPE", String.Empty)), .SerieTitle = oRow.ItemEx("SERIE_TITLE", String.Empty), .DesignType = GetDesignType(oRow.ItemEx("DESIGN_TYPE", String.Empty)), .DesignBaseColor = GetDesignBaseColor(oRow.ItemEx("DESIGN_TYPE", String.Empty)) }) Next ChartParameters = oParameters End Sub Private Function GetItemType(pTypeString As String) As ItemTypeEnum Select Case pTypeString Case "LIST" Return ItemTypeEnum.List Case "SQL" Return ItemTypeEnum.SQL Case Else Return ItemTypeEnum.Undefined End Select End Function Private Function GetReturnType(pTypeString As String) As ReturnTypeEnum Select Case pTypeString Case "Table" Return ReturnTypeEnum.Table Case "TreeView" Return ReturnTypeEnum.TreeView Case "ChartView" Return ReturnTypeEnum.ChartView Case Else Return ReturnTypeEnum.Undefined End Select End Function Private Function GetDataType(pTypeString As String) As DataTypeEnum Select Case pTypeString.ToUpper Case "BIT" Return DataTypeEnum.Boolean Case "VARCHAR" Return DataTypeEnum.String Case "INT" Return DataTypeEnum.Integer Case "DATE" Return DataTypeEnum.Date Case Else Return DataTypeEnum.Undefined End Select End Function Private Function GetChartType(pTypeString As String) As ChartTypeEnum Select Case pTypeString.ToUpper Case "BAR" Return ChartTypeEnum.Bar Case "AREA" Return ChartTypeEnum.Area Case "LINE" Return ChartTypeEnum.Line Case "PIE" Return ChartTypeEnum.Pie Case "STACKEDBAR" Return ChartTypeEnum.StackedBar Case Else Return ChartTypeEnum.Undefined End Select End Function Private Function GetLabelType(pTypeString As String) As LabelTypeEnum Select Case pTypeString.ToUpper Case "NOLABELS" Return LabelTypeEnum.NoLabels Case "DEFAULT" Return LabelTypeEnum.DefaultLabels Case Else Return LabelTypeEnum.NoLabels End Select End Function Private Function GetDesignType(pTypeString As String) As DesignTypeEnum Dim items() As String = pTypeString.Split("|"c) Select Case items(0).ToUpper Case "ASPECT" Return DesignTypeEnum.Aspect Case "MIXED" Return DesignTypeEnum.Mixed Case "OFFICE2013" Return DesignTypeEnum.Office2013 Case "SOLSTICE" Return DesignTypeEnum.Solstice Case "DDDEFAULT" Return DesignTypeEnum.DDDefault Case Else Return DesignTypeEnum.DefaultColors End Select End Function Private Function GetDesignBaseColor(pTypeString As String) As Integer Dim items() As String = pTypeString.Split("|"c) Dim retValue As Integer = 0 If items.Length > 1 Then If Integer.TryParse(items(1), retValue) = False Then retValue = 0 End If End If Return retValue End Function Private Function GetChartPosType(pPosTypeId As Integer) As ChartPosEnum Select Case pPosTypeId Case 1 Return ChartPosEnum.TopLeft Case 2 Return ChartPosEnum.TopRight Case 3 Return ChartPosEnum.BottomLeft Case 4 Return ChartPosEnum.BottomRight Case Else Return ChartPosEnum.Undefined End Select End Function End Class