ZooFlow: Clean up, faster search

This commit is contained in:
Jonathan Jenne
2022-02-18 15:02:51 +01:00
parent c6c548afe4
commit 77597f0ef2
53 changed files with 326 additions and 818 deletions

View File

@@ -181,6 +181,10 @@
<Project>{D20A6BF2-C7C6-4A7A-B34D-FA27D775A049}</Project>
<Name>Common</Name>
</ProjectReference>
<ProjectReference Include="..\Modules.Base\Base\Base.vbproj">
<Project>{6ea0c51f-c2b1-4462-8198-3de0b32b74f8}</Project>
<Name>Base</Name>
</ProjectReference>
<ProjectReference Include="..\Modules.Database\Database.vbproj">
<Project>{EAF0EA75-5FA7-485D-89C7-B2D843B03A96}</Project>
<Name>Database</Name>

View File

@@ -7,17 +7,18 @@ Imports DigitalData.Modules.Windows
Imports DigitalData.Modules.ZooFlow.Params
Imports DigitalData.Modules.ZooFlow.State
Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.Base
Public Class ProfileFilter
Private _ProfileMatch As ProfileMatch
Private _ProfileTable As DataTable
Private _ProcessTable As DataTable
Private _WindowTable As DataTable
Private _ControlTable As DataTable
Private _Profiles As List(Of ProfileData)
Private _TreeView As TreeView
Private _LogConfig As LogConfig
Private _Logger As Logger
Inherits BaseClass
Private ReadOnly _ProfileMatch As ProfileMatch
Private ReadOnly _ProfileTable As DataTable
Private ReadOnly _ProcessTable As DataTable
Private ReadOnly _WindowTable As DataTable
Private ReadOnly _ControlTable As DataTable
Private ReadOnly _Profiles As List(Of ProfileData)
Private ReadOnly _TreeView As TreeView
Public Enum ImageIndex
Root
@@ -44,25 +45,27 @@ Public Class ProfileFilter
End Property
Public Sub New(LogConfig As LogConfig, ProfileDatatable As DataTable, ProcessTable As DataTable, WindowDatatable As DataTable, ControlDatatable As DataTable, TreeView As TreeView)
Try
_LogConfig = LogConfig
_Logger = LogConfig.GetLogger()
MyBase.New(LogConfig)
_Logger.Debug("Initializing Profile Filter")
_Logger.Debug("Initializing Profile Data")
Try
LogConfig = LogConfig
Logger = LogConfig.GetLogger()
Logger.Debug("Initializing Profile Filter")
Logger.Debug("Initializing Profile Data")
_ProfileTable = ProfileDatatable
_ProcessTable = ProcessTable
_WindowTable = WindowDatatable
_ControlTable = ControlDatatable
_Logger.Debug("Initializing Profile Debugging")
Logger.Debug("Initializing Profile Debugging")
_TreeView = TreeView
_ProfileMatch = New ProfileMatch(LogConfig)
_Logger.Debug("Transforming Profiles")
Logger.Debug("Transforming Profiles")
_Profiles = TransformProfiles()
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Throw ex
End Try
End Sub
@@ -72,7 +75,7 @@ Public Class ProfileFilter
End Function
Public Function LogRemainingProfiles(Profiles As List(Of ProfileData), StepDescription As String) As List(Of ProfileData)
_Logger.Debug("Profiles remaining after Step {0}: {1}", StepDescription, Profiles.Count)
Logger.Debug("Profiles remaining after Step {0}: {1}", StepDescription, Profiles.Count)
Return Profiles
End Function
@@ -88,7 +91,7 @@ Public Class ProfileFilter
_TreeView.Nodes.Add(oRootNode)
For Each oProfile In Profiles
_Logger.Debug("Current Profile: {0}", oProfile.Name)
Logger.Debug("Current Profile: {0}", oProfile.Name)
Dim oNode = _ProfileMatch.NewProfileNode(oProfile)
oRootNode.Nodes.Add(oNode)
@@ -97,8 +100,8 @@ Public Class ProfileFilter
Dim oRegex As New Regex(oProfile.Regex)
Dim oMatch = oRegex.Match(ClipboardContents)
If oMatch.Success Then
_Logger.Debug("FilterProfilesByClipboardRegex: Clipboard Regex Matched: {0}", ClipboardContents)
_Logger.Info("FilterProfilesByClipboardRegex: Profile {0} matched!", oProfile.Name)
Logger.Debug("FilterProfilesByClipboardRegex: Clipboard Regex Matched: {0}", ClipboardContents)
Logger.Info("FilterProfilesByClipboardRegex: Profile {0} matched!", oProfile.Name)
oFilteredProfiles.Add(oProfile)
oProfile.IsMatched = True
@@ -106,8 +109,8 @@ Public Class ProfileFilter
oNode.Nodes.Add(oSubnode)
End If
Catch ex As Exception
_Logger.Warn("Regex '{0}' could not be processed for input '{1}'", oProfile.Regex, ClipboardContents)
_Logger.Error(ex)
Logger.Warn("Regex '{0}' could not be processed for input '{1}'", oProfile.Regex, ClipboardContents)
Logger.Error(ex)
End Try
Next
@@ -140,12 +143,12 @@ Public Class ProfileFilter
oParent.Nodes.Add(oNode)
End If
_Logger.Debug($"FilterProfilesByProcess: Checking Profile: {oProfile.Name}")
Logger.Debug($"FilterProfilesByProcess: Checking Profile: {oProfile.Name}")
If oIsMatch Then
_Logger.Debug($"Processname Matched: {oProcess.ProcessName}")
Logger.Debug($"Processname Matched: {oProcess.ProcessName}")
oFilteredProfiles.Add(oProfile)
_Logger.Info("FilterProfilesByProcess: Profile {0} matched!", oProfile.Name)
Logger.Info("FilterProfilesByProcess: Profile {0} matched!", oProfile.Name)
' Set Process matched
oProcess.IsMatched = True
@@ -168,8 +171,8 @@ Public Class ProfileFilter
Return oFilteredProfiles
Catch ex As Exception
_Logger.Warn("Unexpected error in FilterProfilesByProcess...")
_Logger.Error(ex)
Logger.Warn("Unexpected error in FilterProfilesByProcess...")
Logger.Error(ex)
Return Profiles
End Try
End Function
@@ -177,7 +180,7 @@ Public Class ProfileFilter
Dim oProfiles As New List(Of ProfileData)
For Each oProfile As ProfileData In Profiles
_Logger.Debug("Checking WindowDefinition for profile: {0}...", oProfile.Name)
Logger.Debug("Checking WindowDefinition for profile: {0}...", oProfile.Name)
Dim oFilteredWindows As New List(Of WindowData)
@@ -190,7 +193,7 @@ Public Class ProfileFilter
' If Profile has no windows at all, it automatically matches
If oFilteredWindows.Count = 0 Then
_Logger.Debug("Profile has no Windows assigned, automatic MATCH")
Logger.Debug("Profile has no Windows assigned, automatic MATCH")
oProfile.IsMatched = True
oProfiles.Add(oProfile)
@@ -214,12 +217,12 @@ Public Class ProfileFilter
Dim oMatch = oRegex.Match(WindowTitle)
If oMatch.Success Then
_Logger.Debug("MATCH on WindowTitle: {0}", WindowTitle)
Logger.Debug("MATCH on WindowTitle: {0}", WindowTitle)
oProfile.MatchedWindowID = oWindowDef.Guid
oWindowDef.IsMatched = True
oWindows.Add(oWindowDef)
Else
_Logger.Debug("NO MATCH on WindowTitle: {0} - REGEX: {2}", WindowTitle, oWindowDef.Regex)
Logger.Debug("NO MATCH on WindowTitle: {0} - REGEX: {2}", WindowTitle, oWindowDef.Regex)
End If
Dim oParent = _ProfileMatch.FindNodeByTag(_TreeView.Nodes, oWindowDef.WindowProcessID & "-PROCESS")
@@ -229,8 +232,8 @@ Public Class ProfileFilter
End If
Catch ex As Exception
_Logger.Warn("Regex '{0}' could not be processed for input '{1}'", oWindowDef.Regex, WindowTitle)
_Logger.Error(ex)
Logger.Warn("Regex '{0}' could not be processed for input '{1}'", oWindowDef.Regex, WindowTitle)
Logger.Error(ex)
End Try
Next
@@ -240,14 +243,14 @@ Public Class ProfileFilter
oProfile.IsMatched = True
oProfiles.Add(oProfile)
_Logger.Info("FilterWindowsByWindowTitleRegex: Profile {0} matched!", oProfile.Name)
Logger.Info("FilterWindowsByWindowTitleRegex: Profile {0} matched!", oProfile.Name)
End If
If oProfile.IsCatchAll Then
oProfile.IsMatched = True
oProfiles.Add(oProfile)
_Logger.Info("FilterWindowsByWindowTitleRegex: Profile {0} is marked catchall!", oProfile.Name)
Logger.Info("FilterWindowsByWindowTitleRegex: Profile {0} is marked catchall!", oProfile.Name)
End If
Next
@@ -259,7 +262,7 @@ Public Class ProfileFilter
Public Function FilterProfilesByFocusedControl(Profiles As List(Of ProfileData), ClipboardContents As String, WindowHandle As IntPtr) As List(Of ProfileData)
Dim oProfiles As New List(Of ProfileData)
Dim oWindow As New Window(_LogConfig)
Dim oWindow As New Window(LogConfig)
Dim oFocusedWindow As Window.WindowInfo
Try
@@ -268,7 +271,7 @@ Public Class ProfileFilter
Throw New ApplicationException("Window Information is Empty")
End If
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Return Profiles
End Try
@@ -284,7 +287,7 @@ Public Class ProfileFilter
' If Profile has no controls at all, it automatically matches
If oFilteredControls.Count = 0 Then
_Logger.Debug("Profile has no Controls assigned, automatic MATCH")
Logger.Debug("Profile has no Controls assigned, automatic MATCH")
oProfiles.Add(oProfile)
Continue For
End If
@@ -322,8 +325,8 @@ Public Class ProfileFilter
End Select
Next
Catch ex As Exception
_Logger.Warn("Error while getting focused control location")
_Logger.Error(ex)
Logger.Warn("Error while getting focused control location")
Logger.Error(ex)
End Try
Else
Dim oControlName As String = oControl.ControlName
@@ -335,13 +338,13 @@ Public Class ProfileFilter
oFound = True
End If
Catch ex As Exception
_Logger.Warn("Error while getting focused control name")
_Logger.Error(ex)
Logger.Warn("Error while getting focused control name")
Logger.Error(ex)
End Try
End If
If oFound Then
_Logger.Debug("Control {0} has MATCH", oControl.ControlName)
Logger.Debug("Control {0} has MATCH", oControl.ControlName)
oMatchingControls.Add(oControl)
End If
@@ -354,11 +357,11 @@ Public Class ProfileFilter
' If Profile has controls that matched, the profile matches
If oMatchingControls.Count > 0 Then
_Logger.Debug("Profile has {0} MATCHING Controls", oMatchingControls.Count)
Logger.Debug("Profile has {0} MATCHING Controls", oMatchingControls.Count)
oProfile.Controls = oMatchingControls
oProfiles.Add(oProfile)
_Logger.Info("FilterProfilesByFocusedControl: Profile {0} matched!", oProfile.Name)
Logger.Info("FilterProfilesByFocusedControl: Profile {0} matched!", oProfile.Name)
End If
Next
@@ -372,11 +375,11 @@ Public Class ProfileFilter
Dim oProfiles As New List(Of ProfileData)
For Each oProfile In Profiles
_Logger.Debug($"Checking SearchResults on ProfileID: {oProfile.Guid}")
Logger.Debug($"Checking SearchResults on ProfileID: {oProfile.Guid}")
Dim oResultDocs As Integer = 0
Dim oResultData As Integer = 0
Dim oPatterns As New ClassPatterns(_LogConfig)
Dim oPatterns As New ClassPatterns(LogConfig)
Dim oDTDataSearches As DataTable
Dim oDTDocSearches As DataTable
@@ -385,7 +388,7 @@ Public Class ProfileFilter
oDTDataSearches = Database.GetDatatable($"SELECT COUNT_COMMAND, CONN_ID FROM TBCW_PROF_DATA_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {oProfile.Guid}")
Catch ex As Exception
oProfile.ErrorMessage = ERROR_LOADING_COUNT_SQL_FOR_DATA_SEARCH
_Logger.Error(ex)
Logger.Error(ex)
Continue For
End Try
@@ -393,7 +396,7 @@ Public Class ProfileFilter
oDTDocSearches = Database.GetDatatable($"SELECT COUNT_COMMAND, CONN_ID FROM TBCW_PROF_DOC_SEARCH WHERE ACTIVE = 1 AND PROFILE_ID = {oProfile.Guid}")
Catch ex As Exception
oProfile.ErrorMessage = ERROR_LOADING_COUNT_SQL_FOR_DOC_SEARCH
_Logger.Error(ex)
Logger.Error(ex)
Continue For
End Try
@@ -406,25 +409,25 @@ Public Class ProfileFilter
oCountConnectionId = NotNull(oRow.Item("CONN_ID"), 0)
If oCountCommand = String.Empty Then
_Logger.Debug("Data SQL Query is empty. Skipping.")
Logger.Debug("Data SQL Query is empty. Skipping.")
Continue For
End If
_Logger.Debug("Count-Command DATA BEFORE Replace: [{0}]", oCountCommand)
Logger.Debug("Count-Command DATA BEFORE Replace: [{0}]", oCountCommand)
oCountCommand = oPatterns.ReplaceInternalValues(oCountCommand)
oCountCommand = oPatterns.ReplaceUserValues(oCountCommand, User)
oCountCommand = oPatterns.ReplaceClipboardContents(oCountCommand, ClipboardContents)
_Logger.Debug("Count-Command DATA before execute: [{0}]", oCountCommand)
Logger.Debug("Count-Command DATA before execute: [{0}]", oCountCommand)
Dim oConnectionString = ProfileUtils.GetConnectionString(Database, oCountConnectionId)
oResultData += NotNull(Of Integer)(Database.GetScalarValueWithConnection(oCountCommand, oConnectionString), 0)
_Logger.Debug("Datarows returned from search: [{0}]", oResultData)
Logger.Debug("Datarows returned from search: [{0}]", oResultData)
Catch ex As Exception
oProfile.ErrorMessage = ERROR_EXECUTING_COUNT_SQL_FOR_DATA_SEARCH
_Logger.Error(ex)
_Logger.Warn("Invalid SQL Query for Counting Data in Profile [{0}]: [{1}]", oProfile.Guid, oCountCommand)
Logger.Error(ex)
Logger.Warn("Invalid SQL Query for Counting Data in Profile [{0}]: [{1}]", oProfile.Guid, oCountCommand)
End Try
Next
@@ -437,25 +440,25 @@ Public Class ProfileFilter
oCountConnectionId = NotNull(oRow.Item("CONN_ID"), 0)
If oCountCommand = String.Empty Then
_Logger.Debug("Document SQL Query is empty. Skipping.")
Logger.Debug("Document SQL Query is empty. Skipping.")
Continue For
End If
_Logger.Debug("Count-Command for Documents BEFORE Replace: [{0}]", oCountCommand)
Logger.Debug("Count-Command for Documents BEFORE Replace: [{0}]", oCountCommand)
oCountCommand = oPatterns.ReplaceInternalValues(oCountCommand)
oCountCommand = oPatterns.ReplaceUserValues(oCountCommand, User)
oCountCommand = oPatterns.ReplaceClipboardContents(oCountCommand, ClipboardContents)
_Logger.Debug("Count-Command for Documents BEFORE execute: [{0}]", oCountCommand)
Logger.Debug("Count-Command for Documents BEFORE execute: [{0}]", oCountCommand)
Dim oConnectionString = ProfileUtils.GetConnectionString(Database, oCountConnectionId)
oResultDocs += NotNull(Of Integer)(Database.GetScalarValueWithConnection(oCountCommand, oConnectionString), 0)
_Logger.Debug("Documents returned from search: [{0}]", oResultDocs)
Logger.Debug("Documents returned from search: [{0}]", oResultDocs)
Catch ex As Exception
oProfile.ErrorMessage = ERROR_EXECUTING_COUNT_SQL_FOR_DOC_SEARCH
_Logger.Error(ex)
_Logger.Warn("Invalid SQL Query for Counting Data in Profile [{0}]: [{1}]", oProfile.Guid, oCountCommand)
Logger.Error(ex)
Logger.Warn("Invalid SQL Query for Counting Data in Profile [{0}]: [{1}]", oProfile.Guid, oCountCommand)
End Try
Next
@@ -473,7 +476,7 @@ Public Class ProfileFilter
If oProfile.CountData > 0 Or oProfile.CountDocs > 0 Then
oProfiles.Add(oProfile)
_Logger.Info("Profile [{0}] matched in FilterProfilesBySearchResults!", oProfile.Name)
Logger.Info("Profile [{0}] matched in FilterProfilesBySearchResults!", oProfile.Name)
End If
Next
@@ -484,7 +487,7 @@ Public Class ProfileFilter
Dim oProfiles As New List(Of ProfileData)
For Each oProfile As ProfileData In Profiles
_Logger.Debug("Current Profile: {0}", oProfile.Name)
Logger.Debug("Current Profile: {0}", oProfile.Name)
Dim oWindows As New List(Of WindowData)
@@ -498,7 +501,7 @@ Public Class ProfileFilter
Dim oMatch = oRegex.Match(ClipboardContents)
If oMatch.Success Then
_Logger.Debug("Window Clipboard Regex Matched: {0}", ClipboardContents)
Logger.Debug("Window Clipboard Regex Matched: {0}", ClipboardContents)
oWindows.Add(w)
End If
@@ -510,8 +513,8 @@ Public Class ProfileFilter
oResult.Nodes.Add(oNode)
End If
Catch ex As Exception
_Logger.Warn("Regex '{0}' could not be processed for input '{1}'", w.Regex, ClipboardContents)
_Logger.Error(ex)
Logger.Warn("Regex '{0}' could not be processed for input '{1}'", w.Regex, ClipboardContents)
Logger.Error(ex)
End Try
Next
@@ -519,7 +522,7 @@ Public Class ProfileFilter
oProfile.Windows = oWindows
oProfiles.Add(oProfile)
_Logger.Info("FilterWindowsByWindowClipboardRegex: Profile {0} matched!", oProfile.Name)
Logger.Info("FilterWindowsByWindowClipboardRegex: Profile {0} matched!", oProfile.Name)
End If
Next
@@ -589,7 +592,7 @@ Public Class ProfileFilter
Return oList
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Throw ex
End Try
End Function
@@ -636,7 +639,7 @@ Public Class ProfileFilter
Return oControlList
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Throw ex
End Try
End Function
@@ -660,7 +663,7 @@ Public Class ProfileFilter
Return oProcessList
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Throw ex
End Try
End Function
@@ -682,7 +685,7 @@ Public Class ProfileFilter
Return oWindowList
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Throw ex
End Try
End Function

View File

@@ -1,13 +1,17 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.Language.Utils
Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Base
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.ZooFlow.Params
Public Class ProfileSearches
Private _LogConfig As LogConfig
Private _Logger As Logger
Inherits BaseClass
Private _Environment As Environment
Private _Client As Client
@@ -22,10 +26,10 @@ Public Class ProfileSearches
Public SQLCommand As String
End Class
Public Sub New(LogConfig As LogConfig, Environment As Environment, pClipboardContents As String)
_LogConfig = LogConfig
_Logger = LogConfig.GetLogger()
_Environment = Environment
Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pClipboardContents As String)
MyBase.New(pLogConfig)
_Environment = pEnvironment
_ClipboardContents = pClipboardContents
Try
If _Environment.Service.IsActive = True Then
@@ -36,22 +40,47 @@ Public Class ProfileSearches
If oSplit.Length = 2 Then
oAppServerPort = oSplit(1)
End If
_Client = New Client(LogConfig, oAppServerAddress, oAppServerPort)
_Client = New Client(pLogConfig, oAppServerAddress, oAppServerPort)
If Not IsNothing(_Client) Then
If _Client.Connect() Then
_Logger.Debug("ProfileSearches: Appserver connected successfully!")
Logger.Debug("ProfileSearches: Appserver connected successfully!")
End If
End If
Catch ex As Exception
_Logger.Warn($"Could not initialize the AppServer: {ex.Message}")
_Logger.Error(ex)
Logger.Warn($"Could not initialize the AppServer: {ex.Message}")
Logger.Error(ex)
End Try
End If
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
End Try
End Sub
Public Async Function GetDocResultForm(pProfile As ProfileData, pFormTitle As String, pOperationMode As Modules.ZooFlow.Constants.OperationMode) As Task(Of frmDocumentResultList)
' For now we assume these are document results instead of data results
Dim oSearches = Await LoadDocumentSearchesAsync(pProfile.Guid)
Dim oNameSlug = ConvertTextToSlug(pProfile.Name)
Dim oSearchGuids = oSearches.Select(Function(s) s.Guid).ToArray
Dim oWindowGuid = $"{pProfile.Guid}-{oNameSlug}-{String.Join("-", oSearchGuids)}"
Dim oParams = New DocumentResultList.Params() With {
.WindowGuid = oWindowGuid,
.WindowTitle = pFormTitle,
.OperationModeOverride = pOperationMode,
.ProfileGuid = pProfile.Guid
}
For Each oSearch In oSearches
oParams.Results.Add(New DocumentResultList.DocumentResult() With {
.Title = oSearch.TabCaption,
.Datatable = oSearch.DataTable
})
Next
Dim oForm As New frmDocumentResultList(LogConfig, _Environment, oParams)
Return oForm
End Function
Public Async Function LoadDocumentSearchesAsync(ProfileId As Integer) As Task(Of List(Of Search))
Return Await Task.Run(Function()
Return DoLoadDocumentSearches(ProfileId)
@@ -65,7 +94,7 @@ Public Class ProfileSearches
Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DOC_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX")
oSearchesDataTable = oTableResult.Table
If oSearchesDataTable Is Nothing Then
_Logger.Warn("TBCW_PROF_DOC_SEARCH from AppServer is nothing: Failover started...")
Logger.Warn("TBCW_PROF_DOC_SEARCH from AppServer is nothing: Failover started...")
oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
End If
Else
@@ -74,7 +103,7 @@ Public Class ProfileSearches
Dim oDocSearches As New List(Of Search)
If Not IsNothing(oSearchesDataTable) Then
Dim oCounter As Integer = 0
Dim oPatterns As New ClassPatterns(_LogConfig)
Dim oPatterns As New ClassPatterns(LogConfig)
For Each oRow As DataRow In oSearchesDataTable.Rows
Dim oProfileId As Integer = oRow.Item("PROFILE_ID")
@@ -92,7 +121,7 @@ Public Class ProfileSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString)
If oDatatable Is Nothing Then
_Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Continue For
End If
@@ -132,7 +161,7 @@ Public Class ProfileSearches
Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DATA_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX")
oSearchesDataTable = oTableResult.Table
If oSearchesDataTable Is Nothing Then
_Logger.Warn("TBCW_PROF_DATA_SEARCH from AppServer is nothing: Failover started...")
Logger.Warn("TBCW_PROF_DATA_SEARCH from AppServer is nothing: Failover started...")
oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
End If
Else
@@ -140,7 +169,7 @@ Public Class ProfileSearches
End If
Dim oCounter As Integer = 0
Dim oPatterns As New ClassPatterns(_LogConfig)
Dim oPatterns As New ClassPatterns(LogConfig)
For Each oRow As DataRow In oSearchesDataTable.Rows
Try
@@ -158,7 +187,7 @@ Public Class ProfileSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString)
If oDatatable Is Nothing Then
_Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Continue For
End If
@@ -172,7 +201,7 @@ Public Class ProfileSearches
oCounter += 1
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
End Try
Next
@@ -180,7 +209,7 @@ Public Class ProfileSearches
Where(Function(s) Not IsNothing(s.DataTable)).
ToList()
Catch ex As Exception
_Logger.Error(ex)
Logger.Error(ex)
Return oDataSearches
End Try
End Function

View File

@@ -31,6 +31,7 @@ Public Class frmMatch
Private ReadOnly _Environment As Environment
Private ReadOnly _Params As ClipboardWatcherParams
Private ReadOnly _Language As String
Private ReadOnly _ProfileSearch As ProfileSearches
Private ReadOnly PrimaryFont As New Font("Segoe UI", 12, FontStyle.Bold)
Private ReadOnly SecondaryFont As New Font("Segoe UI", 10)
@@ -61,6 +62,7 @@ Public Class frmMatch
_Logger = LogConfig.GetLogger()
_Environment = Environment
_Params = Params
_ProfileSearch = New ProfileSearches(_LogConfig, _Environment, _Params.ClipboardContents)
_Language = Utils.NotNull(_Environment.User.Language, State.UserState.LANG_EN_US)
Thread.CurrentThread.CurrentUICulture = New CultureInfo(_Language)
@@ -324,7 +326,7 @@ Public Class frmMatch
Case TileGroupDocuments.Name
Dim oSearches = Await oProfileSearch.LoadDocumentSearchesAsync(oProfileId)
OpenDocumentResults(oProfile, oSearches)
Await OpenDocumentResults(oProfile, oSearches)
Case Else
' TODO: Load combined results
@@ -341,32 +343,17 @@ Public Class frmMatch
End Try
End Sub
Private Sub OpenDocumentResults(Profile As ProfileData, Searches As List(Of ProfileSearches.Search))
Dim oNameSlug = Utils.ConvertTextToSlug(Profile.Name)
Dim oSearchGuids = Searches.Select(Function(s) s.Guid).ToArray
Dim oWindowGuid = $"{Profile.Guid}-{oNameSlug}-{String.Join("-", oSearchGuids)}"
Dim oParams = New DocumentResultList.Params() With {
.WindowGuid = oWindowGuid,
.WindowTitle = GetResultWindowString(_Params.ClipboardContents),
.OperationModeOverride = _Params.OperationModeOverride,
.ProfileGuid = Profile.Guid
}
Private Async Function OpenDocumentResults(Profile As ProfileData, Searches As List(Of ProfileSearches.Search)) As Task
Dim oFormTitle = GetResultWindowString(_Params.ClipboardContents)
Dim oForm As frmDocumentResultList = Await _ProfileSearch.GetDocResultForm(Profile, oFormTitle, _Params.OperationModeOverride)
For Each oSearch In Searches
oParams.Results.Add(New DocumentResultList.DocumentResult() With {
.Title = oSearch.TabCaption,
.Datatable = oSearch.DataTable
})
Next
Dim oForm As New frmDocumentResultList(_LogConfig, _Environment, oParams)
AddHandler oForm.FormClosed, AddressOf ProfileResultForm_Closed
AddHandler oForm.NeedsRefresh, AddressOf ProfileResultForm_NeedsRefresh
OpenForms.Add(oForm)
oForm.Show()
End Sub
End Function
Private Sub OpenDataResults(Profile As ProfileData, Searches As List(Of ProfileSearches.Search))
Dim oNameSlug = Utils.ConvertTextToSlug(Profile.Name)

View File

@@ -39,7 +39,6 @@ Partial Class frmMatchLoading
Me.progressPanel1.AppearanceCaption.Options.UseFont = True
Me.progressPanel1.AppearanceDescription.Font = CType(resources.GetObject("resource.Font1"), System.Drawing.Font)
Me.progressPanel1.AppearanceDescription.Options.UseFont = True
Me.progressPanel1.BarAnimationElementThickness = 2
Me.progressPanel1.ImageHorzOffset = 20
Me.progressPanel1.Name = "progressPanel1"
'

View File

@@ -141,9 +141,6 @@
<data name="progressPanel1.Text" xml:space="preserve">
<value>progressPanel1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Form1</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
@@ -210,14 +207,17 @@
<data name="&gt;&gt;progressPanel1.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="resource.Font1" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 8.25pt</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="$this.Text" xml:space="preserve">
<value>Form1</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>1</value>
@@ -231,7 +231,4 @@
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>fr-FR</value>
</metadata>
</root>

View File

@@ -122,81 +122,81 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD8
EgAAAk1TRnQBSQFMAgEBBgEAARgBAAEYAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
EgAAAk1TRnQBSQFMAgEBBgEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIDYABP8DmQH/A+oF/wPMAf8DwAH/xAADhgH/A4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YF/wPXAf8D+AH/AcwBmQEwAf8BzAGZATAB/wHMApkF/wOWAf8EAAOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/HAADhgX/AcwBmQFj
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwCf8QAAOGAf8YAAOGAf+QAAOGAf8cAAOyBf8B8AHKAaYB/wHM
AZkBMA3/A8wB/xAAA4YB/xgAA4YB/5AAA4YB/yAAA5YF/wHwAcoBpgn/A8AB/wPqAf8EAAOGAf8DhgH/
Af8DhgH/A4YF/wPXAf8D+AH/AcwBmQEvAf8BzAGZAS8B/wHMApkF/wOWAf8EAAOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/HAADhgX/AcwBmQFi
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvCf8QAAOGAf8YAAOGAf+QAAOGAf8cAAOyBf8B8AHKAaYB/wHM
AZkBLw3/A8wB/xAAA4YB/xgAA4YB/5AAA4YB/yAAA5YF/wHwAcoBpgn/A8AB/wPqAf8EAAOGAf8DhgH/
A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/JAAD8QH/
A5YB/wOGAf8DwAH/BAADmQH/EAADhgH/GAADhgH/kAADhgH/OAADhgH/EAADhgH/GAADhgH/kAADhgH/
OAADhgH/BAADhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/
A4YB/4QAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAAcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wQAA4YB/wQAA4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+EAAHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8EAAOGAf8EAAPXAf8D1wH/
A9cB/wOGAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8DhgH/A9cB/wPXAf8D1wH/hAABzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/BAADhgH/BAAD1wH/A9cB/wPX
Af8DhgH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A4YB/wPXAf8D1wH/A9cB/4wAAcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wQAA4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+MAAHMAZkBMAH/AcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf/IAAHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf//AF0AA4Yh/xwAAcwBmQFjAf8BzAGZATAB/wPqAf8kAAOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/ZAADhiH/HAABzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf9MAAOGAf8QAAHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/EAABMAHMAv8BYwHMAv8BYwHMAv8BYwHMAv8DhiH/CAAE/wHMAZkBMAH/AcwBmQEwBf8D3QH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAX/AswBmQH/AcwBmQEwAf8CzAGZAf8gAAOGAf8DhgH/A4YB/wOG
Af8DhgH/CAADhgH/EAABzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/xAA
ATABzAL/AWMBzAL/AWMBzAL/AWMBzAL/A4Yh/wgAAcwBmQFjAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/IAABYwHMAv8BYwHMAv8BYwHMAv8BYwHMAv8DhgH/CAADhgH/EAABzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/xAAATABzAL/AWMBzAL/AWMBzAL/AWMBzAL/A4Yh/wgA
BP8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wLMAZkB/yAAAWMBzAL/AWMBzAL/AWMBzAL/AWMBzAL/A4YB/wgA
A4YB/xAAAcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAEwAcwC/wFj
AcwC/wFjAcwC/wFjAcwC/wOGIf8MAAHMAZkBYwH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/A/EF/wLM
AZkB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAF/yAAAWMBzAL/AWMBzAL/AWMBzAL/AWMBzAL/A4YB/wgA
A4YB/xAAAcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAEwAcwC/wFj
AcwC/wFjAcwC/wFjAcwC/wOGIf8EAAHMAZkBYwH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8QAALMAZkB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/A+oB/wQAA+MB/wOGBf8kAAOG
Af8DhgH/DAABzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/CAABzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAEwAcwC/wFjAcwC/wFjAcwC/wFj
AcwC/wOGIf8EAAHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAT/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wQABP8DhgH/A4YF/xwAA8AB/wOGAf8DzAH/
DAABzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/CAABzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAEwAcwC/wFjAcwC/wFjAcwC/wFjAcwC/wOG
If8EAAHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8QAAPxAf8BzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBYwH/CAAE/wOGAf8DhgX/FAADwAH/A4YB/wPMAf8QAAHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/EAABMAHMAv8BYwHMAv8BYwHM
Av8BYwHMAv8DhiH/DAABzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8D1wH/DAABzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8D3QH/FAAE/wOGAf8DhgX/DAADwAH/A4YB/wPMAf8UAAHMAZkBMAH/AcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/EAABMAHMAv8BYwHMAv8BYwHMAv8BYwHMAv8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8MAAHMApkB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHM
AZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAF/xgABP8DhgH/A4YF/wQA
A8AB/wOGAf8DzAH/AcwBmQFjAf8UAAHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEw
Af8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wPq
Af8QAAEwAcwC/yAAAWMBzAL/FAAB8AHKAaYB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8cAAT/
A4YB/wOGAf8DwAH/A4YB/wPMAf8BzAGZAWMB/wHMAZkBMAH/IAABzAGZATAB/xAAAcwBmQEwAf8gAAEw
AcwC/wQAA4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wFjAcwC/xQAA8wB/wHMAZkBMAH/AcwBmQEw
Af8BzAKZAf8BzAGZATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBYwH/AcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/IAAE/wOGAf8DhgH/A8wB/wQAAcwBmQEwAf8BzAGZATAB/yAAAcwBmQEwAf8BzAGZ
ATAB/wHMAZkBMAH/AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/MAADhgH/BAADhgH/JAADzAH/A8wB/wgA
AcwBmQEwAf8BzAGZATAB/wHMAZkBMAH/BAAE/wHMAZkBYwX/JAAE/wPMAf+4AAHMAZkBMAH/AcwBmQEw
Af8BzAGZAWMB//8AGQABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAf8BgQL/
A4YB/4QAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAA4YB/zgAA4YB/xAAA4YB/xgAA4YB/5AAAcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wQAA4YB/wQAA4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+EAAHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8EAAOGAf8EAAPXAf8D1wH/
A9cB/wOGAf8D1wH/A9cB/wPXAf8D1wH/A9cB/wPXAf8DhgH/A9cB/wPXAf8D1wH/hAABzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/BAADhgH/BAAD1wH/A9cB/wPX
Af8DhgH/A9cB/wPXAf8D1wH/A9cB/wPXAf8D1wH/A4YB/wPXAf8D1wH/A9cB/4wAAcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wQAA4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf+MAAHMAZkBLwH/AcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf/IAAHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf//AF0AA4Yh/xwAAcwBmQFiAf8BzAGZAS8B/wPqAf8kAAOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/ZAADhiH/HAABzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf9MAAOGAf8QAAHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/EAABLwHMAv8BYgHMAv8BYgHMAv8BYgHMAv8DhiH/CAAE/wHMAZkBLwH/AcwBmQEvBf8D3QH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwX/AswBmQH/AcwBmQEvAf8CzAGZAf8gAAOGAf8DhgH/A4YB/wOG
Af8DhgH/CAADhgH/EAABzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/xAA
AS8BzAL/AWIBzAL/AWIBzAL/AWIBzAL/A4Yh/wgAAcwBmQFiAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/IAABYgHMAv8BYgHMAv8BYgHMAv8BYgHMAv8DhgH/CAADhgH/EAABzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/xAAAS8BzAL/AWIBzAL/AWIBzAL/AWIBzAL/A4Yh/wgA
BP8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wLMAZkB/yAAAWIBzAL/AWIBzAL/AWIBzAL/AWIBzAL/A4YB/wgA
A4YB/xAAAcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAEvAcwC/wFi
AcwC/wFiAcwC/wFiAcwC/wOGIf8MAAHMAZkBYgH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/A/EF/wLM
AZkB/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8F/yAAAWIBzAL/AWIBzAL/AWIBzAL/AWIBzAL/A4YB/wgA
A4YB/xAAAcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAEvAcwC/wFi
AcwC/wFiAcwC/wFiAcwC/wOGIf8EAAHMAZkBYgH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8QAALMAZkB/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/A+oB/wQAA+MB/wOGBf8kAAOG
Af8DhgH/DAABzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/CAABzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAEvAcwC/wFiAcwC/wFiAcwC/wFi
AcwC/wOGIf8EAAHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAT/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wQABP8DhgH/A4YF/xwAA8AB/wOGAf8DzAH/
DAABzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/CAABzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAEvAcwC/wFiAcwC/wFiAcwC/wFiAcwC/wOG
If8EAAHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8QAAPxAf8BzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBYgH/CAAE/wOGAf8DhgX/FAADwAH/A4YB/wPMAf8QAAHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/EAABLwHMAv8BYgHMAv8BYgHM
Av8BYgHMAv8DhiH/DAABzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8D1wH/DAABzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8D3QH/FAAE/wOGAf8DhgX/DAADwAH/A4YB/wPMAf8UAAHMAZkBLwH/AcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/EAABLwHMAv8BYgHMAv8BYgHMAv8BYgHMAv8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8MAAHMApkB/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHM
AZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8F/xgABP8DhgH/A4YF/wQA
A8AB/wOGAf8DzAH/AcwBmQFiAf8UAAHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEv
Af8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wPq
Af8QAAEvAcwC/yAAAWIBzAL/FAAB8AHKAaYB/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8cAAT/
A4YB/wOGAf8DwAH/A4YB/wPMAf8BzAGZAWIB/wHMAZkBLwH/IAABzAGZAS8B/xAAAcwBmQEvAf8gAAEv
AcwC/wQAA4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wFiAcwC/xQAA8wB/wHMAZkBLwH/AcwBmQEv
Af8BzAKZAf8BzAGZAS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBYgH/AcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/IAAE/wOGAf8DhgH/A8wB/wQAAcwBmQEvAf8BzAGZAS8B/yAAAcwBmQEvAf8BzAGZ
AS8B/wHMAZkBLwH/AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/MAADhgH/BAADhgH/JAADzAH/A8wB/wgA
AcwBmQEvAf8BzAGZAS8B/wHMAZkBLwH/BAAE/wHMAZkBYgX/JAAE/wPMAf+4AAHMAZkBLwH/AcwBmQEv
Af8BzAGZAWIB//8AGQABQgFNAT4HAAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/wEAAf8BgQL/
BgABgAEBBAABfwEAAfcB7wQAAX8BAAH3Ae8EAAF/AoABAQQAAX8BwgH3Ae8EAAF/Af4B9wHvBAABfwH+
AYABAQQAAX8B/gH3Ae8EAAF/Af4B9wHvBQABAgGAAQEFAAECAYABAQUAAQIBgAEBBAABwAEAAYABAQQA
AcABAAL/BAABwAEAAv8EAAT/Af4BAAH+AT8B4AEDAv8B/gEAAf4BPwH/AfsBwAEBAeABAAHAAQMB/AEb

View File

@@ -117,6 +117,10 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tvProfileMatch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="tvProfileMatch.Size" type="System.Drawing.Size, System.Drawing">
<value>800, 450</value>
@@ -134,26 +138,17 @@
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v21.2, Version=21.2.4.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>800, 450</value>
</data>
<data name="tvProfileMatch.ImageIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="&gt;&gt;ImageList1.Name" xml:space="preserve">
<value>ImageList1</value>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>800, 450</value>
</data>
<data name="&gt;&gt;tvProfileMatch.Name" xml:space="preserve">
<value>tvProfileMatch</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Profilsuchen Algorithmus</value>
</data>
<data name="tvProfileMatch.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
<data name="&gt;&gt;ImageList1.Name" xml:space="preserve">
<value>ImageList1</value>
</data>
<data name="&gt;&gt;tvProfileMatch.ZOrder" xml:space="preserve">
<value>0</value>
@@ -161,6 +156,9 @@
<data name="tvProfileMatch.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="tvProfileMatch.Font" type="System.Drawing.Font, System.Drawing">
<value>Segoe UI, 9.75pt</value>
</data>
@@ -169,7 +167,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+
EgAAAk1TRnQBSQFMAgEBBgEAARABAAEUAQABEAEAARABAAT/ASEBEAj/AUIBTQE2BwABNgMAASgDAAFA
EgAAAk1TRnQBSQFMAgEBBgEAARABAAEYAQABEAEAARABAAT/ASEBEAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIDYABP8DmQH/A+oF/wPMAf8DwAH/xAADhgH/A4YB/wOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YF/wPXAf8D+AH/AcwBmQExAf8BzAGZATEB/wHMApkF/wOWAf8EAAOGAf8DhgH/A4YB/wOG
Af8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/A4YB/wOGAf8DhgH/hAADhgH/HAADhgX/AcwBmQFk
@@ -253,19 +251,18 @@
AT8I/xYACw==
</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tvProfileMatch.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
<data name="$this.Text" xml:space="preserve">
<value>Profilsuchen Algorithmus</value>
</data>
<data name="&gt;&gt;ImageList1.Type" xml:space="preserve">
<value>System.Windows.Forms.ImageList, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tvProfileMatch.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>frmTreeView</value>
</data>
<metadata name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>fr-FR</value>
</metadata>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>