URL-Links in Tabellen-Views. Umstrukturierung

This commit is contained in:
PitzM 2023-02-20 13:52:21 +01:00
parent d4d3933bf6
commit d841c4b414
14 changed files with 149 additions and 28 deletions

View File

@ -4,6 +4,7 @@
Public Description As String Public Description As String
Public SQLCommand As String Public SQLCommand As String
Public ReturnType As Constants.ReturnTypeEnum Public ReturnType As Constants.ReturnTypeEnum
Public ExpectedParameterCount As Integer
Public Parameters As List(Of SearchParameter) Public Parameters As List(Of SearchParameter)

View File

@ -1,5 +1,8 @@
Imports System.Text.RegularExpressions Imports System.Runtime.CompilerServices
Imports System.Text.RegularExpressions
Imports DevExpress.Utils Imports DevExpress.Utils
Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid
Imports DevExpress.XtraGrid.Columns Imports DevExpress.XtraGrid.Columns
Imports DevExpress.XtraGrid.Views.Grid Imports DevExpress.XtraGrid.Views.Grid
@ -19,7 +22,9 @@ Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Patterns Imports DigitalData.Modules.Patterns
Public Class frmMonitor 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 SQLColumns As New List(Of String) From {"SELECT1", "SELECT2", "SELECT3", "SELECT4"}
Private ReadOnly DocViewColumns As New List(Of String) From {"DOCVIEW1", "DOCVIEW2"} Private ReadOnly DocViewColumns As New List(Of String) From {"DOCVIEW1", "DOCVIEW2"}
Private ReadOnly Property HtmlViewColumns As New List(Of String) From {"HTML1", "HTML2"} Private ReadOnly Property HtmlViewColumns As New List(Of String) From {"HTML1", "HTML2"}
@ -52,8 +57,10 @@ Public Class frmMonitor
Private GridControlResults As GridControl Private GridControlResults As GridControl
Private GridViewResults As GridView 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 ActiveSearch As Search = Nothing
Private HyperLinkColumnSearchIds As New Dictionary(Of String, Integer)
Private GridBuilder As GridBuilder Private GridBuilder As GridBuilder
Private ControlHelper As Common.ControlHelper Private ControlHelper As Common.ControlHelper
@ -73,6 +80,7 @@ Public Class frmMonitor
Private Validator As Validator Private Validator As Validator
Private GridLoader As GridLoader Private GridLoader As GridLoader
Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load Private Sub frmStart_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try Try
LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "Monitor") LogConfig = New LogConfig(LogConfig.PathType.AppData, Nothing, Nothing, "Digital Data", "Monitor")
@ -132,7 +140,6 @@ Public Class frmMonitor
LoadSearches() LoadSearches()
Dim oLicense = LoadGDPicture() Dim oLicense = LoadGDPicture()
For Each oGrid In SQLResultGrids For Each oGrid In SQLResultGrids
@ -186,13 +193,19 @@ Public Class frmMonitor
Dim oSearch As Search = cmbSearches.EditValue Dim oSearch As Search = cmbSearches.EditValue
MarkedColumns.Clear() InvisibleMarkedColumns.Clear()
VisibleMarkedColumns.Clear()
HyperLinkColumnSearchIds.Clear()
HideAllTabs() HideAllTabs()
Dim oMissingParams = Validator.Validate(oSearch) Dim oMissingParams = Validator.Validate(oSearch)
If oMissingParams = True Then 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 Return False
End If End If
@ -264,16 +277,49 @@ Public Class frmMonitor
End If End If
Next Next
MarkedColumns = GridViewResults.Columns.AsEnumerable. InvisibleMarkedColumns = GridViewResults.Columns.AsEnumerable.
Where(Function(column) Where(Function(column)
Dim oCaption = column.FieldName.ToUpper.Trim 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() End Function).ToList()
For Each oColumn In MarkedColumns For Each oColumn In InvisibleMarkedColumns
oColumn.VisibleIndex = -1 oColumn.VisibleIndex = -1
Next 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) SetResultCount(GridViewResults.RowCount)
GridControlResults.Focus() GridControlResults.Focus()
@ -297,6 +343,61 @@ Public Class frmMonitor
SplashScreenManager1.CloseWaitForm() SplashScreenManager1.CloseWaitForm()
End Try End Try
End Function End Function
''' <summary>
''' Linklogik für Hyperlink-Spalten
''' </summary>
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) Private Sub SetExpandedForChildNodes(pRootNode As TreeListNode, Optional pDepth As Integer = 0)
If pDepth > 10 Then If pDepth > 10 Then
@ -758,7 +859,7 @@ Public Class frmMonitor
Dim oGridResultIndex As Integer = 0 Dim oGridResultIndex As Integer = 0
Dim oViewerResultIndex 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) Dim oValue = oRow.ItemEx(oColumn.FieldName, String.Empty)
@ -807,7 +908,6 @@ Public Class frmMonitor
oViewerResultIndex += 1 oViewerResultIndex += 1
FillResultViewer(oViewer, oValue, oTitle) FillResultViewer(oViewer, oValue, oTitle)
SplitContainerFileHTML.Collapsed = False SplitContainerFileHTML.Collapsed = False
End If End If
End If End If

View File

@ -1,4 +1,5 @@
Imports DevExpress.Utils Imports DevExpress.Utils
Imports DevExpress.XtraEditors
Imports DevExpress.XtraEditors.Controls Imports DevExpress.XtraEditors.Controls
Imports DevExpress.XtraEditors.Repository Imports DevExpress.XtraEditors.Repository
Imports DevExpress.XtraGrid Imports DevExpress.XtraGrid
@ -75,8 +76,8 @@ Public Class GridLoader
GridBuilder.SetDefaults(oView) GridBuilder.SetDefaults(oView)
GridBuilder.SetClipboardHandler(oView) GridBuilder.SetClipboardHandler(oView)
GridBuilder.SetReadOnlyOptions(oView) ' GridBuilder.SetReadOnlyOptions(oView)
' TODO Spalten die nicht HyperLinks sind readonly machen
Return oGrid Return oGrid
End Function End Function
@ -176,4 +177,5 @@ Public Class GridLoader
Return oStateEdit Return oStateEdit
End Function End Function
End Class End Class

View File

@ -33,14 +33,31 @@ Public Class SearchLoader
OrderBy(Function(param) param.Sequence). OrderBy(Function(param) param.Sequence).
ToList() ToList()
Searches.Add(New Search With { Dim oSearch = New Search With {
.Id = oSearchId, .Id = oSearchId,
.Title = oRow.ItemEx("TITLE", String.Empty), .Title = oRow.ItemEx("TITLE", String.Empty),
.Description = oRow.ItemEx("CAPTION", String.Empty), .Description = oRow.ItemEx("CAPTION", String.Empty),
.ReturnType = GetReturnType(oRow.ItemEx("RETURN_TYPE", String.Empty)), .ReturnType = GetReturnType(oRow.ItemEx("RETURN_TYPE", String.Empty)),
.SQLCommand = oRow.ItemEx("EXEC_SQL", String.Empty), .SQLCommand = oRow.ItemEx("EXEC_SQL", String.Empty),
.Parameters = oParams .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 Next
Catch ex As Exception Catch ex As Exception
Logger.Error(ex) Logger.Error(ex)

View File

@ -135,33 +135,33 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="ApplicationEvents.vb" /> <Compile Include="ApplicationEvents.vb" />
<Compile Include="Config.vb" /> <Compile Include="Data\Config.vb" />
<Compile Include="Constants.vb" /> <Compile Include="Constants.vb" />
<Compile Include="frmMonitor.Designer.vb"> <Compile Include="Forms\frmMonitor.Designer.vb">
<DependentUpon>frmMonitor.vb</DependentUpon> <DependentUpon>frmMonitor.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="frmMonitor.vb"> <Compile Include="Forms\frmMonitor.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="GridLoader.vb" /> <Compile Include="Helper\GridLoader.vb" />
<Compile Include="My Project\Application.Designer.vb"> <Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DependentUpon>Application.myapp</DependentUpon> <DependentUpon>Application.myapp</DependentUpon>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
</Compile> </Compile>
<Compile Include="My Project\AssemblyInfo.vb" /> <Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="ParameterLoader.vb" /> <Compile Include="Helper\ParameterLoader.vb" />
<Compile Include="Search.vb" /> <Compile Include="Data\Search.vb" />
<Compile Include="SearchLoader.vb" /> <Compile Include="Helper\SearchLoader.vb" />
<Compile Include="SearchParameter.vb" /> <Compile Include="Data\SearchParameter.vb" />
<Compile Include="frmLoading.Designer.vb"> <Compile Include="Forms\frmLoading.Designer.vb">
<DependentUpon>frmLoading.vb</DependentUpon> <DependentUpon>frmLoading.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="frmLoading.vb"> <Compile Include="Forms\frmLoading.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Validator.vb" /> <Compile Include="Helper\Validator.vb" />
<EmbeddedResource Include="frmMonitor.resx"> <EmbeddedResource Include="Forms\frmMonitor.resx">
<DependentUpon>frmMonitor.vb</DependentUpon> <DependentUpon>frmMonitor.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="My Project\licenses.licx" /> <EmbeddedResource Include="My Project\licenses.licx" />
@ -176,7 +176,7 @@
<DependentUpon>Resources.resx</DependentUpon> <DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
</Compile> </Compile>
<EmbeddedResource Include="frmLoading.resx"> <EmbeddedResource Include="Forms\frmLoading.resx">
<DependentUpon>frmLoading.vb</DependentUpon> <DependentUpon>frmLoading.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<None Include="app.config" /> <None Include="app.config" />
@ -230,6 +230,7 @@
<None Include="Resources\deletetable.svg" /> <None Include="Resources\deletetable.svg" />
<None Include="Resources\actions_reload.svg" /> <None Include="Resources\actions_reload.svg" />
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.VisualBasic.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.