diff --git a/GUIs.Monitor/Config.vb b/GUIs.Monitor/Data/Config.vb similarity index 100% rename from GUIs.Monitor/Config.vb rename to GUIs.Monitor/Data/Config.vb diff --git a/GUIs.Monitor/Search.vb b/GUIs.Monitor/Data/Search.vb similarity index 88% rename from GUIs.Monitor/Search.vb rename to GUIs.Monitor/Data/Search.vb index 71570a2..e584bae 100644 --- a/GUIs.Monitor/Search.vb +++ b/GUIs.Monitor/Data/Search.vb @@ -4,6 +4,7 @@ Public Description As String Public SQLCommand As String Public ReturnType As Constants.ReturnTypeEnum + Public ExpectedParameterCount As Integer Public Parameters As List(Of SearchParameter) diff --git a/GUIs.Monitor/SearchParameter.vb b/GUIs.Monitor/Data/SearchParameter.vb similarity index 100% rename from GUIs.Monitor/SearchParameter.vb rename to GUIs.Monitor/Data/SearchParameter.vb diff --git a/GUIs.Monitor/frmLoading.Designer.vb b/GUIs.Monitor/Forms/frmLoading.Designer.vb similarity index 100% rename from GUIs.Monitor/frmLoading.Designer.vb rename to GUIs.Monitor/Forms/frmLoading.Designer.vb diff --git a/GUIs.Monitor/frmLoading.resx b/GUIs.Monitor/Forms/frmLoading.resx similarity index 100% rename from GUIs.Monitor/frmLoading.resx rename to GUIs.Monitor/Forms/frmLoading.resx diff --git a/GUIs.Monitor/frmLoading.vb b/GUIs.Monitor/Forms/frmLoading.vb similarity index 100% rename from GUIs.Monitor/frmLoading.vb rename to GUIs.Monitor/Forms/frmLoading.vb diff --git a/GUIs.Monitor/frmMonitor.Designer.vb b/GUIs.Monitor/Forms/frmMonitor.Designer.vb similarity index 100% rename from GUIs.Monitor/frmMonitor.Designer.vb rename to GUIs.Monitor/Forms/frmMonitor.Designer.vb diff --git a/GUIs.Monitor/frmMonitor.resx b/GUIs.Monitor/Forms/frmMonitor.resx similarity index 100% rename from GUIs.Monitor/frmMonitor.resx rename to GUIs.Monitor/Forms/frmMonitor.resx diff --git a/GUIs.Monitor/frmMonitor.vb b/GUIs.Monitor/Forms/frmMonitor.vb similarity index 86% rename from GUIs.Monitor/frmMonitor.vb rename to GUIs.Monitor/Forms/frmMonitor.vb index fcbfac7..436198e 100644 --- a/GUIs.Monitor/frmMonitor.vb +++ b/GUIs.Monitor/Forms/frmMonitor.vb @@ -1,5 +1,8 @@ -Imports System.Text.RegularExpressions +Imports System.Runtime.CompilerServices +Imports System.Text.RegularExpressions Imports DevExpress.Utils +Imports DevExpress.XtraEditors.Controls +Imports DevExpress.XtraEditors.Repository Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid.Columns Imports DevExpress.XtraGrid.Views.Grid @@ -19,7 +22,9 @@ Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Patterns Public Class frmMonitor - Private ReadOnly ColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"} + Private ReadOnly InvisibleColumnMarkers As New List(Of String) From {"[HTML]", "[SQL]", "[FILENAME]"} + Private ReadOnly VisibleColumnMarkers As New List(Of String) From {"[SEARCH|"} + Private ReadOnly SQLColumns As New List(Of String) From {"SELECT1", "SELECT2", "SELECT3", "SELECT4"} Private ReadOnly DocViewColumns As New List(Of String) From {"DOCVIEW1", "DOCVIEW2"} Private ReadOnly Property HtmlViewColumns As New List(Of String) From {"HTML1", "HTML2"} @@ -52,8 +57,10 @@ Public Class frmMonitor Private GridControlResults As GridControl Private GridViewResults As GridView - Private MarkedColumns As New List(Of GridColumn) + Private InvisibleMarkedColumns As New List(Of GridColumn) + Private VisibleMarkedColumns As New List(Of GridColumn) Private ActiveSearch As Search = Nothing + Private HyperLinkColumnSearchIds As New Dictionary(Of String, Integer) Private GridBuilder As GridBuilder Private ControlHelper As Common.ControlHelper @@ -73,6 +80,7 @@ Public Class frmMonitor Private Validator As Validator Private GridLoader As GridLoader + Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load Try LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "Monitor") @@ -132,7 +140,6 @@ Public Class frmMonitor LoadSearches() - Dim oLicense = LoadGDPicture() For Each oGrid In SQLResultGrids @@ -186,13 +193,19 @@ Public Class frmMonitor Dim oSearch As Search = cmbSearches.EditValue - MarkedColumns.Clear() + InvisibleMarkedColumns.Clear() + VisibleMarkedColumns.Clear() + HyperLinkColumnSearchIds.Clear() HideAllTabs() Dim oMissingParams = Validator.Validate(oSearch) - If oMissingParams = True Then + Return False + End If + If oSearch.ExpectedParameterCount > 0 And oSearch.Parameters.Count <> oSearch.ExpectedParameterCount Then + Logger.Error($"[{0}] parameter were defined, but [{1}] parameter were expected!", oSearch.Parameters.Count, oSearch.ExpectedParameterCount) + FormHelper.ShowErrorMessage("Die Suche erwartet mehr Parameter als definiert wurden!", "LoadSearches") Return False End If @@ -264,16 +277,49 @@ Public Class frmMonitor End If Next - MarkedColumns = GridViewResults.Columns.AsEnumerable. + InvisibleMarkedColumns = GridViewResults.Columns.AsEnumerable. Where(Function(column) Dim oCaption = column.FieldName.ToUpper.Trim - Return ColumnMarkers.Any(Function(marker) oCaption.EndsWith(marker)) + Return InvisibleColumnMarkers.Any(Function(marker) oCaption.EndsWith(marker)) End Function).ToList() - For Each oColumn In MarkedColumns + For Each oColumn In InvisibleMarkedColumns oColumn.VisibleIndex = -1 Next + VisibleMarkedColumns = GridViewResults.Columns.AsEnumerable. + Where(Function(column) + Dim oCaption = column.FieldName.ToUpper.Trim + Return VisibleColumnMarkers.Any(Function(marker) oCaption.Contains(marker)) + End Function).ToList() + + For Each oColumn In VisibleMarkedColumns + If oColumn.FieldName.Contains("[SEARCH|") Then + Dim oUrlEdit As New RepositoryItemHyperLinkEdit() With + { + .SingleClick = True + } + + GridControlResults.RepositoryItems.Add(oUrlEdit) + + For index = 0 To GridViewResults.Columns.Count - 1 + If GridViewResults.Columns.Item(index).FieldName = oColumn.FieldName Then + GridViewResults.Columns.Item(index).ColumnEdit = oUrlEdit + + ' Column Caption setzen + Dim colTitle As String = oColumn.FieldName.Substring(0, oColumn.FieldName.IndexOf("[")) + GridViewResults.Columns.Item(index).Caption = colTitle + + ' Add SearchId in Dictionary + HyperLinkColumnSearchIds.Add(oColumn.FieldName, GetSearchIdFromColumnFieldName(oColumn.FieldName)) + End If + Next + + AddHandler oUrlEdit.OpenLink, AddressOf HyperLinkEdit_OpenLinkAsync + End If + Next + + SetColumnsToDisAllowEditInGridViewResults() SetResultCount(GridViewResults.RowCount) GridControlResults.Focus() @@ -297,6 +343,61 @@ Public Class frmMonitor SplashScreenManager1.CloseWaitForm() End Try End Function + ''' + ''' Linklogik für Hyperlink-Spalten + ''' + Private Async Function HyperLinkEdit_OpenLinkAsync(sender As Object, e As OpenLinkEventArgs) As Threading.Tasks.Task + Dim searchId As Integer = HyperLinkColumnSearchIds(GridViewResults.FocusedColumn.FieldName) + + Dim oSearch As Search = SearchLoader.Searches.Where(Function(search) search.Id = searchId).SingleOrDefault() + cmbSearches.EditValue = oSearch ' Es wird jetzt erwartet, dass das ChangeValue-Event der ComboBox ausgelöst wird! + + Dim oSearchParameter As SearchParameter = oSearch.Parameters.Where(Function(param) param.Required = True).FirstOrDefault() + + If oSearchParameter Is Nothing And oSearch.ExpectedParameterCount > 0 Then + Logger.Error($"[{0}] parameter were defined, but [{1}] parameter were expected!", oSearch.Parameters.Count, oSearch.ExpectedParameterCount) + FormHelper.ShowErrorMessage("Die Suche erwartet 1 Parameter, aber es wurde kein Parameter gefunden!", "LoadSearches") + Return + Else + Dim oControl As Control = LayoutControl1.Controls.Find(oSearchParameter.PatternTitle, True).FirstOrDefault() + oControl.Text = e.EditValue + End If + + Await LoadData() + ' e.EditValue = "www.google.de" + e.Handled = True + + End Function + + Private Function GetSearchIdFromColumnFieldName(pFieldName As String) As Integer + If String.IsNullOrEmpty(pFieldName) = True Then + Return 0 + End If + + Dim startIndex = pFieldName.IndexOf("|") + 1 + Dim endIndex = pFieldName.IndexOf("]") + Dim length = endIndex - startIndex + Dim searchIdText = pFieldName.Substring(startIndex, length) + + Dim retValue As Integer + + If (Integer.TryParse(searchIdText, retValue) = False) Then + retValue = 0 + End If + + Return retValue + End Function + + Private Sub SetColumnsToDisAllowEditInGridViewResults() + For Each oColumn As GridColumn In GridViewResults.Columns + + If Not TypeOf oColumn.ColumnEdit Is RepositoryItemHyperLinkEdit Then + ' Verbietet Spaltenweise die Bearbeitung + oColumn.OptionsColumn.AllowEdit = False + End If + + Next + End Sub Private Sub SetExpandedForChildNodes(pRootNode As TreeListNode, Optional pDepth As Integer = 0) If pDepth > 10 Then @@ -758,7 +859,7 @@ Public Class frmMonitor Dim oGridResultIndex As Integer = 0 Dim oViewerResultIndex As Integer = 0 - For Each oColumn As GridColumn In MarkedColumns + For Each oColumn As GridColumn In InvisibleMarkedColumns Dim oValue = oRow.ItemEx(oColumn.FieldName, String.Empty) @@ -807,7 +908,6 @@ Public Class frmMonitor oViewerResultIndex += 1 FillResultViewer(oViewer, oValue, oTitle) SplitContainerFileHTML.Collapsed = False - End If End If diff --git a/GUIs.Monitor/GridLoader.vb b/GUIs.Monitor/Helper/GridLoader.vb similarity index 97% rename from GUIs.Monitor/GridLoader.vb rename to GUIs.Monitor/Helper/GridLoader.vb index 50c13ef..ac098a6 100644 --- a/GUIs.Monitor/GridLoader.vb +++ b/GUIs.Monitor/Helper/GridLoader.vb @@ -1,4 +1,5 @@ Imports DevExpress.Utils +Imports DevExpress.XtraEditors Imports DevExpress.XtraEditors.Controls Imports DevExpress.XtraEditors.Repository Imports DevExpress.XtraGrid @@ -75,8 +76,8 @@ Public Class GridLoader GridBuilder.SetDefaults(oView) GridBuilder.SetClipboardHandler(oView) - GridBuilder.SetReadOnlyOptions(oView) - + ' GridBuilder.SetReadOnlyOptions(oView) + ' TODO Spalten die nicht HyperLinks sind readonly machen Return oGrid End Function @@ -176,4 +177,5 @@ Public Class GridLoader Return oStateEdit End Function + End Class diff --git a/GUIs.Monitor/ParameterLoader.vb b/GUIs.Monitor/Helper/ParameterLoader.vb similarity index 100% rename from GUIs.Monitor/ParameterLoader.vb rename to GUIs.Monitor/Helper/ParameterLoader.vb diff --git a/GUIs.Monitor/SearchLoader.vb b/GUIs.Monitor/Helper/SearchLoader.vb similarity index 81% rename from GUIs.Monitor/SearchLoader.vb rename to GUIs.Monitor/Helper/SearchLoader.vb index 7bb4c67..71af652 100644 --- a/GUIs.Monitor/SearchLoader.vb +++ b/GUIs.Monitor/Helper/SearchLoader.vb @@ -33,14 +33,31 @@ Public Class SearchLoader OrderBy(Function(param) param.Sequence). ToList() - Searches.Add(New Search With { + 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 + If 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) diff --git a/GUIs.Monitor/Validator.vb b/GUIs.Monitor/Helper/Validator.vb similarity index 100% rename from GUIs.Monitor/Validator.vb rename to GUIs.Monitor/Helper/Validator.vb diff --git a/GUIs.Monitor/Monitor.vbproj b/GUIs.Monitor/Monitor.vbproj index 211c4cd..d8eac76 100644 --- a/GUIs.Monitor/Monitor.vbproj +++ b/GUIs.Monitor/Monitor.vbproj @@ -135,33 +135,33 @@ - + - + frmMonitor.vb - + Form - + True Application.myapp True - - - - - + + + + + frmLoading.vb - + Form - - + + frmMonitor.vb @@ -176,7 +176,7 @@ Resources.resx True - + frmLoading.vb @@ -230,6 +230,7 @@ +