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> <Project>{D20A6BF2-C7C6-4A7A-B34D-FA27D775A049}</Project>
<Name>Common</Name> <Name>Common</Name>
</ProjectReference> </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"> <ProjectReference Include="..\Modules.Database\Database.vbproj">
<Project>{EAF0EA75-5FA7-485D-89C7-B2D843B03A96}</Project> <Project>{EAF0EA75-5FA7-485D-89C7-B2D843B03A96}</Project>
<Name>Database</Name> <Name>Database</Name>

View File

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

View File

@ -1,13 +1,17 @@
Imports DigitalData.Modules.Database Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.ZooFlow Imports DigitalData.Modules.ZooFlow
Imports DigitalData.Modules.Language.Utils
Imports DigitalData.Modules.Patterns Imports DigitalData.Modules.Patterns
Imports DigitalData.Modules.EDMI.API Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.Modules.Base
Imports DigitalData.GUIs.Common
Imports DigitalData.Modules.ZooFlow.Params
Public Class ProfileSearches Public Class ProfileSearches
Private _LogConfig As LogConfig Inherits BaseClass
Private _Logger As Logger
Private _Environment As Environment Private _Environment As Environment
Private _Client As Client Private _Client As Client
@ -22,10 +26,10 @@ Public Class ProfileSearches
Public SQLCommand As String Public SQLCommand As String
End Class End Class
Public Sub New(LogConfig As LogConfig, Environment As Environment, pClipboardContents As String) Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pClipboardContents As String)
_LogConfig = LogConfig MyBase.New(pLogConfig)
_Logger = LogConfig.GetLogger()
_Environment = Environment _Environment = pEnvironment
_ClipboardContents = pClipboardContents _ClipboardContents = pClipboardContents
Try Try
If _Environment.Service.IsActive = True Then If _Environment.Service.IsActive = True Then
@ -36,22 +40,47 @@ Public Class ProfileSearches
If oSplit.Length = 2 Then If oSplit.Length = 2 Then
oAppServerPort = oSplit(1) oAppServerPort = oSplit(1)
End If End If
_Client = New Client(LogConfig, oAppServerAddress, oAppServerPort) _Client = New Client(pLogConfig, oAppServerAddress, oAppServerPort)
If Not IsNothing(_Client) Then If Not IsNothing(_Client) Then
If _Client.Connect() Then If _Client.Connect() Then
_Logger.Debug("ProfileSearches: Appserver connected successfully!") Logger.Debug("ProfileSearches: Appserver connected successfully!")
End If End If
End If End If
Catch ex As Exception Catch ex As Exception
_Logger.Warn($"Could not initialize the AppServer: {ex.Message}") Logger.Warn($"Could not initialize the AppServer: {ex.Message}")
_Logger.Error(ex) Logger.Error(ex)
End Try End Try
End If End If
Catch ex As Exception Catch ex As Exception
_Logger.Error(ex) Logger.Error(ex)
End Try End Try
End Sub 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)) Public Async Function LoadDocumentSearchesAsync(ProfileId As Integer) As Task(Of List(Of Search))
Return Await Task.Run(Function() Return Await Task.Run(Function()
Return DoLoadDocumentSearches(ProfileId) 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") Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DOC_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX")
oSearchesDataTable = oTableResult.Table oSearchesDataTable = oTableResult.Table
If oSearchesDataTable Is Nothing Then 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) oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
End If End If
Else Else
@ -74,7 +103,7 @@ Public Class ProfileSearches
Dim oDocSearches As New List(Of Search) Dim oDocSearches As New List(Of Search)
If Not IsNothing(oSearchesDataTable) Then If Not IsNothing(oSearchesDataTable) Then
Dim oCounter As Integer = 0 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 For Each oRow As DataRow In oSearchesDataTable.Rows
Dim oProfileId As Integer = oRow.Item("PROFILE_ID") Dim oProfileId As Integer = oRow.Item("PROFILE_ID")
@ -92,7 +121,7 @@ Public Class ProfileSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString) Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString)
If oDatatable Is Nothing Then If oDatatable Is Nothing Then
_Logger.Warn("Error in SQL-Query '{0}'", oSQL) Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Continue For Continue For
End If 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") Dim oTableResult As TableResult = _Client.GetDatatableByName("TBCW_PROF_DATA_SEARCH", $"PROFILE_ID = {ProfileId} AND ACTIVE = 1", "TAB_INDEX")
oSearchesDataTable = oTableResult.Table oSearchesDataTable = oTableResult.Table
If oSearchesDataTable Is Nothing Then 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) oSearchesDataTable = _Environment.Database.GetDatatable(oSQL)
End If End If
Else Else
@ -140,7 +169,7 @@ Public Class ProfileSearches
End If End If
Dim oCounter As Integer = 0 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 For Each oRow As DataRow In oSearchesDataTable.Rows
Try Try
@ -158,7 +187,7 @@ Public Class ProfileSearches
Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString) Dim oDatatable As DataTable = _Environment.Database.GetDatatableWithConnection(oSQL, oConnectionString)
If oDatatable Is Nothing Then If oDatatable Is Nothing Then
_Logger.Warn("Error in SQL-Query '{0}'", oSQL) Logger.Warn("Error in SQL-Query '{0}'", oSQL)
Continue For Continue For
End If End If
@ -172,7 +201,7 @@ Public Class ProfileSearches
oCounter += 1 oCounter += 1
Catch ex As Exception Catch ex As Exception
_Logger.Error(ex) Logger.Error(ex)
End Try End Try
Next Next
@ -180,7 +209,7 @@ Public Class ProfileSearches
Where(Function(s) Not IsNothing(s.DataTable)). Where(Function(s) Not IsNothing(s.DataTable)).
ToList() ToList()
Catch ex As Exception Catch ex As Exception
_Logger.Error(ex) Logger.Error(ex)
Return oDataSearches Return oDataSearches
End Try End Try
End Function End Function

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -44,6 +44,9 @@
Public Const WM_WINDOWPOSCHANGING As Integer = &H46 Public Const WM_WINDOWPOSCHANGING As Integer = &H46
Public Const TEXT_MISSING_INPUT = "Bitte vervollständigen Sie die Eingaben!"
Public Const TITLE_MISSING_INPUT = "Fehlende Eingaben"
Class DropType Class DropType
Public Const DROP_TYPE_FILESYSTEM = "|DROPFROMFSYSTEM|" Public Const DROP_TYPE_FILESYSTEM = "|DROPFROMFSYSTEM|"
Public Const DROP_TYPE_MESSAGE = "|OUTLOOK_MESSAGE|" Public Const DROP_TYPE_MESSAGE = "|OUTLOOK_MESSAGE|"

View File

@ -1,15 +0,0 @@
Imports DigitalData.Modules.ZooFlow
Public Class ClassEnvironment
Public Shared Function GetEnvironment() As Environment
Dim oEnvironment As New Environment() With {
.DatabaseIDB = My.DatabaseIDB,
.Database = My.DatabaseECM,
.Modules = My.Application.Modules,
.Service = My.Application.Service,
.Settings = My.Application.Settings,
.User = My.Application.User
}
Return oEnvironment
End Function
End Class

View File

@ -1,4 +0,0 @@
Public Class ClassStrings
Public Const TEXT_MISSING_INPUT = "Bitte vervollständigen Sie die Eingaben!"
Public Const TITLE_MISSING_INPUT = "Fehlende Eingaben"
End Class

View File

@ -259,6 +259,6 @@ Public Class ClassValidator
End Function End Function
Private Sub ShowValidationMessage() Private Sub ShowValidationMessage()
MsgBox(ClassStrings.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassStrings.TITLE_MISSING_INPUT) MsgBox(ClassConstants.TEXT_MISSING_INPUT, MsgBoxStyle.Exclamation, ClassConstants.TITLE_MISSING_INPUT)
End Sub End Sub
End Class End Class

View File

@ -64,7 +64,7 @@
<StartupObject>DigitalData.GUIs.ZooFlow.My.MyApplication</StartupObject> <StartupObject>DigitalData.GUIs.ZooFlow.My.MyApplication</StartupObject>
</PropertyGroup> </PropertyGroup>
<PropertyGroup> <PropertyGroup>
<ApplicationIcon>ZOO_FLOW_ sysicon_48.ico</ApplicationIcon> <ApplicationIcon>Zooflow.ico</ApplicationIcon>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Accessibility" /> <Reference Include="Accessibility" />
@ -217,9 +217,8 @@
<Compile Include="Administration\ClassSourceBundle.vb" /> <Compile Include="Administration\ClassSourceBundle.vb" />
<Compile Include="ApplicationEvents.vb" /> <Compile Include="ApplicationEvents.vb" />
<Compile Include="ClassDragDrop.vb" /> <Compile Include="ClassDragDrop.vb" />
<Compile Include="ClassStrings.vb" /> <Compile Include="Modules\ClipboardWatcher\ClassProfileLoader.vb" />
<Compile Include="ClipboardWatcher\ClassProfileLoader.vb" /> <Compile Include="Modules\ClipboardWatcher\Watcher.vb" />
<Compile Include="ClipboardWatcher\Watcher.vb" />
<Compile Include="ClassCommandlineArgs.vb" /> <Compile Include="ClassCommandlineArgs.vb" />
<Compile Include="clsPatterns.vb" /> <Compile Include="clsPatterns.vb" />
<Compile Include="DBCW_Stammdaten.Designer.vb"> <Compile Include="DBCW_Stammdaten.Designer.vb">
@ -256,44 +255,44 @@
<Compile Include="frmTest.vb"> <Compile Include="frmTest.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\ClassExclusions.vb" /> <Compile Include="Modules\Globix\ClassExclusions.vb" />
<Compile Include="Globix\ClassValidator.vb" /> <Compile Include="Modules\Globix\ClassValidator.vb" />
<Compile Include="Globix\frmGlobixNameconvention.Designer.vb"> <Compile Include="Modules\Globix\frmGlobixNameconvention.Designer.vb">
<DependentUpon>frmGlobixNameconvention.vb</DependentUpon> <DependentUpon>frmGlobixNameconvention.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\frmGlobixNameconvention.vb"> <Compile Include="Modules\Globix\frmGlobixNameconvention.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\Models\DocumentType.vb" /> <Compile Include="Modules\Globix\Models\DocumentType.vb" />
<Compile Include="Globix\Models\ManualIndex.vb" /> <Compile Include="Modules\Globix\Models\ManualIndex.vb" />
<Compile Include="Globix\Models\WorkFile.vb" /> <Compile Include="Modules\Globix\Models\WorkFile.vb" />
<Compile Include="frmWaitForm.Designer.vb"> <Compile Include="frmWaitForm.Designer.vb">
<DependentUpon>frmWaitForm.vb</DependentUpon> <DependentUpon>frmWaitForm.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="frmWaitForm.vb"> <Compile Include="frmWaitForm.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\ClassUserFiles.vb" /> <Compile Include="Modules\Globix\ClassUserFiles.vb" />
<Compile Include="modCurrent.vb" /> <Compile Include="modCurrent.vb" />
<Compile Include="MyDataset.Designer.vb"> <Compile Include="MyDataset.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>MyDataset.xsd</DependentUpon> <DependentUpon>MyDataset.xsd</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\ClassFolderwatcher.vb" /> <Compile Include="Modules\Globix\ClassFolderwatcher.vb" />
<Compile Include="Globix\frmGlobixBasicConfig.Designer.vb"> <Compile Include="Modules\Globix\frmGlobixBasicConfig.Designer.vb">
<DependentUpon>frmGlobixBasicConfig.vb</DependentUpon> <DependentUpon>frmGlobixBasicConfig.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\frmGlobixBasicConfig.vb"> <Compile Include="Modules\Globix\frmGlobixBasicConfig.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\frmGlobixMissingInput.Designer.vb"> <Compile Include="Modules\Globix\frmGlobixMissingInput.Designer.vb">
<DependentUpon>frmGlobixMissingInput.vb</DependentUpon> <DependentUpon>frmGlobixMissingInput.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\frmGlobixMissingInput.vb"> <Compile Include="Modules\Globix\frmGlobixMissingInput.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\GlobixDataset.Designer.vb"> <Compile Include="Modules\Globix\GlobixDataset.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
<DependentUpon>GlobixDataset.xsd</DependentUpon> <DependentUpon>GlobixDataset.xsd</DependentUpon>
@ -309,10 +308,10 @@
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Search\ClassControlCreator.vb" /> <Compile Include="Search\ClassControlCreator.vb" />
<Compile Include="Globix\ClassFilehandle.vb" /> <Compile Include="Modules\Globix\ClassFilehandle.vb" />
<Compile Include="ClassInit.vb" /> <Compile Include="ClassInit.vb" />
<Compile Include="ClassWindowLayout.vb" /> <Compile Include="ClassWindowLayout.vb" />
<Compile Include="ClipboardWatcher\State.vb" /> <Compile Include="Modules\ClipboardWatcher\State.vb" />
<Compile Include="DSIDB_Stammdaten.Designer.vb"> <Compile Include="DSIDB_Stammdaten.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@ -332,16 +331,16 @@
<Compile Include="frmFlowForm.vb"> <Compile Include="frmFlowForm.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\frmGlobix_IndexFileList.Designer.vb"> <Compile Include="Modules\Globix\frmGlobix_IndexFileList.Designer.vb">
<DependentUpon>frmGlobix_IndexFileList.vb</DependentUpon> <DependentUpon>frmGlobix_IndexFileList.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\frmGlobix_IndexFileList.vb"> <Compile Include="Modules\Globix\frmGlobix_IndexFileList.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\frmGlobix_Index.Designer.vb"> <Compile Include="Modules\Globix\frmGlobix_Index.Designer.vb">
<DependentUpon>frmGlobix_Index.vb</DependentUpon> <DependentUpon>frmGlobix_Index.vb</DependentUpon>
</Compile> </Compile>
<Compile Include="Globix\frmGlobix_Index.vb"> <Compile Include="Modules\Globix\frmGlobix_Index.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Search\frmFlowSearch1.Designer.vb"> <Compile Include="Search\frmFlowSearch1.Designer.vb">
@ -368,7 +367,7 @@
<Compile Include="Search\frmSearchStart.vb"> <Compile Include="Search\frmSearchStart.vb">
<SubType>Form</SubType> <SubType>Form</SubType>
</Compile> </Compile>
<Compile Include="Globix\State.vb" /> <Compile Include="Modules\Globix\State.vb" />
<Compile Include="My Project\Resources.Designer.vb"> <Compile Include="My Project\Resources.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
<DesignTime>True</DesignTime> <DesignTime>True</DesignTime>
@ -378,15 +377,8 @@
<Compile Include="Queries\ClassCommonQueries.vb" /> <Compile Include="Queries\ClassCommonQueries.vb" />
<Compile Include="Config\ClassConfig.vb" /> <Compile Include="Config\ClassConfig.vb" />
<Compile Include="ClassConstants.vb" /> <Compile Include="ClassConstants.vb" />
<Compile Include="ClassEnvironment.vb" />
<Compile Include="ClassInitLoader.vb" /> <Compile Include="ClassInitLoader.vb" />
<Compile Include="Config\ClassUIConfig.vb" /> <Compile Include="Config\ClassUIConfig.vb" />
<Compile Include="frmConfigDatabase.Designer.vb">
<DependentUpon>frmConfigDatabase.vb</DependentUpon>
</Compile>
<Compile Include="frmConfigDatabase.vb">
<SubType>Form</SubType>
</Compile>
<Compile Include="frmSettings.Designer.vb"> <Compile Include="frmSettings.Designer.vb">
<DependentUpon>frmSettings.vb</DependentUpon> <DependentUpon>frmSettings.vb</DependentUpon>
</Compile> </Compile>
@ -451,13 +443,13 @@
<EmbeddedResource Include="frmTest.resx"> <EmbeddedResource Include="frmTest.resx">
<DependentUpon>frmTest.vb</DependentUpon> <DependentUpon>frmTest.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Globix\frmGlobixBasicConfig.resx"> <EmbeddedResource Include="Modules\Globix\frmGlobixBasicConfig.resx">
<DependentUpon>frmGlobixBasicConfig.vb</DependentUpon> <DependentUpon>frmGlobixBasicConfig.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Globix\frmGlobixMissingInput.resx"> <EmbeddedResource Include="Modules\Globix\frmGlobixMissingInput.resx">
<DependentUpon>frmGlobixMissingInput.vb</DependentUpon> <DependentUpon>frmGlobixMissingInput.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Globix\frmGlobixNameconvention.resx"> <EmbeddedResource Include="Modules\Globix\frmGlobixNameconvention.resx">
<DependentUpon>frmGlobixNameconvention.vb</DependentUpon> <DependentUpon>frmGlobixNameconvention.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmWaitForm.resx"> <EmbeddedResource Include="frmWaitForm.resx">
@ -469,16 +461,13 @@
<EmbeddedResource Include="Administration\frmAdmin_Start.resx"> <EmbeddedResource Include="Administration\frmAdmin_Start.resx">
<DependentUpon>frmAdmin_Start.vb</DependentUpon> <DependentUpon>frmAdmin_Start.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="frmConfigDatabase.resx">
<DependentUpon>frmConfigDatabase.vb</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="frmFlowForm.resx"> <EmbeddedResource Include="frmFlowForm.resx">
<DependentUpon>frmFlowForm.vb</DependentUpon> <DependentUpon>frmFlowForm.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Globix\frmGlobix_IndexFileList.resx"> <EmbeddedResource Include="Modules\Globix\frmGlobix_IndexFileList.resx">
<DependentUpon>frmGlobix_IndexFileList.vb</DependentUpon> <DependentUpon>frmGlobix_IndexFileList.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Globix\frmGlobix_Index.resx"> <EmbeddedResource Include="Modules\Globix\frmGlobix_Index.resx">
<DependentUpon>frmGlobix_Index.vb</DependentUpon> <DependentUpon>frmGlobix_Index.vb</DependentUpon>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Search\frmFlowSearch1.resx"> <EmbeddedResource Include="Search\frmFlowSearch1.resx">
@ -551,15 +540,15 @@
<None Include="DSIDB_Stammdaten.xss"> <None Include="DSIDB_Stammdaten.xss">
<DependentUpon>DSIDB_Stammdaten.xsd</DependentUpon> <DependentUpon>DSIDB_Stammdaten.xsd</DependentUpon>
</None> </None>
<None Include="Globix\GlobixDataset.xsc"> <None Include="Modules\Globix\GlobixDataset.xsc">
<DependentUpon>GlobixDataset.xsd</DependentUpon> <DependentUpon>GlobixDataset.xsd</DependentUpon>
</None> </None>
<None Include="Globix\GlobixDataset.xsd"> <None Include="Modules\Globix\GlobixDataset.xsd">
<SubType>Designer</SubType> <SubType>Designer</SubType>
<Generator>MSDataSetGenerator</Generator> <Generator>MSDataSetGenerator</Generator>
<LastGenOutput>GlobixDataset.Designer.vb</LastGenOutput> <LastGenOutput>GlobixDataset.Designer.vb</LastGenOutput>
</None> </None>
<None Include="Globix\GlobixDataset.xss"> <None Include="Modules\Globix\GlobixDataset.xss">
<DependentUpon>GlobixDataset.xsd</DependentUpon> <DependentUpon>GlobixDataset.xsd</DependentUpon>
</None> </None>
<None Include="My Project\Settings.settings"> <None Include="My Project\Settings.settings">
@ -999,7 +988,7 @@
<None Include="Resources\Compare_RefreshScriptPreview.png" /> <None Include="Resources\Compare_RefreshScriptPreview.png" />
<None Include="Resources\refresh_16xMD.png" /> <None Include="Resources\refresh_16xMD.png" />
<None Include="Resources\Close_16xLG.png" /> <None Include="Resources\Close_16xLG.png" />
<Content Include="ZOO_FLOW_ sysicon_48.ico" /> <Content Include="Zooflow.ico" />
</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.

View File

Before

Width:  |  Height:  |  Size: 107 KiB

After

Width:  |  Height:  |  Size: 107 KiB

View File

@ -1,272 +0,0 @@
<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmConfigDatabase
Inherits DevExpress.XtraEditors.XtraForm
'Das Formular überschreibt den Löschvorgang, um die Komponentenliste zu bereinigen.
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
Try
If disposing AndAlso components IsNot Nothing Then
components.Dispose()
End If
Finally
MyBase.Dispose(disposing)
End Try
End Sub
'Wird vom Windows Form-Designer benötigt.
Private components As System.ComponentModel.IContainer
'Hinweis: Die folgende Prozedur ist für den Windows Form-Designer erforderlich.
'Das Bearbeiten ist mit dem Windows Form-Designer möglich.
'Das Bearbeiten mit dem Code-Editor ist nicht möglich.
<System.Diagnostics.DebuggerStepThrough()> _
Private Sub InitializeComponent()
Me.LayoutControl1 = New DevExpress.XtraLayout.LayoutControl()
Me.btnTestConnection = New DevExpress.XtraEditors.SimpleButton()
Me.LayoutControlGroup1 = New DevExpress.XtraLayout.LayoutControlGroup()
Me.LayoutControlItem5 = New DevExpress.XtraLayout.LayoutControlItem()
Me.EmptySpaceItem2 = New DevExpress.XtraLayout.EmptySpaceItem()
Me.txtServerName = New DevExpress.XtraEditors.TextEdit()
Me.txtUserName = New DevExpress.XtraEditors.TextEdit()
Me.txtPassword = New DevExpress.XtraEditors.TextEdit()
Me.cmbDatabase = New DevExpress.XtraEditors.ComboBoxEdit()
Me.txtConnectionString = New DevExpress.XtraEditors.TextEdit()
Me.chkWinAuth = New DevExpress.XtraEditors.CheckEdit()
Me.LayoutControlItem1 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem2 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem4 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem3 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem7 = New DevExpress.XtraLayout.LayoutControlItem()
Me.LayoutControlItem6 = New DevExpress.XtraLayout.LayoutControlItem()
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.LayoutControl1.SuspendLayout()
CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem5, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.EmptySpaceItem2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtServerName.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtUserName.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtPassword.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.cmbDatabase.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.txtConnectionString.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.chkWinAuth.Properties, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem4, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem3, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem7, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.LayoutControlItem6, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'LayoutControl1
'
Me.LayoutControl1.Controls.Add(Me.txtServerName)
Me.LayoutControl1.Controls.Add(Me.txtUserName)
Me.LayoutControl1.Controls.Add(Me.txtPassword)
Me.LayoutControl1.Controls.Add(Me.cmbDatabase)
Me.LayoutControl1.Controls.Add(Me.btnTestConnection)
Me.LayoutControl1.Controls.Add(Me.txtConnectionString)
Me.LayoutControl1.Controls.Add(Me.chkWinAuth)
Me.LayoutControl1.Dock = System.Windows.Forms.DockStyle.Fill
Me.LayoutControl1.Location = New System.Drawing.Point(0, 0)
Me.LayoutControl1.Name = "LayoutControl1"
Me.LayoutControl1.Root = Me.LayoutControlGroup1
Me.LayoutControl1.Size = New System.Drawing.Size(602, 221)
Me.LayoutControl1.TabIndex = 0
Me.LayoutControl1.Text = "LayoutControl1"
'
'btnTestConnection
'
Me.btnTestConnection.ImageOptions.SvgImage = Global.DigitalData.GUIs.ZooFlow.My.Resources.Resources.actions_check4
Me.btnTestConnection.ImageOptions.SvgImageSize = New System.Drawing.Size(16, 16)
Me.btnTestConnection.Location = New System.Drawing.Point(303, 164)
Me.btnTestConnection.Name = "btnTestConnection"
Me.btnTestConnection.Size = New System.Drawing.Size(287, 22)
Me.btnTestConnection.StyleController = Me.LayoutControl1
Me.btnTestConnection.TabIndex = 8
Me.btnTestConnection.Text = "Verbindung zur Datenbank herstellen"
'
'LayoutControlGroup1
'
Me.LayoutControlGroup1.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.[True]
Me.LayoutControlGroup1.GroupBordersVisible = False
Me.LayoutControlGroup1.Items.AddRange(New DevExpress.XtraLayout.BaseLayoutItem() {Me.LayoutControlItem1, Me.LayoutControlItem2, Me.LayoutControlItem4, Me.LayoutControlItem3, Me.LayoutControlItem7, Me.LayoutControlItem6, Me.LayoutControlItem5, Me.EmptySpaceItem2})
Me.LayoutControlGroup1.Name = "LayoutControlGroup1"
Me.LayoutControlGroup1.Size = New System.Drawing.Size(602, 221)
Me.LayoutControlGroup1.TextVisible = False
'
'LayoutControlItem5
'
Me.LayoutControlItem5.Control = Me.btnTestConnection
Me.LayoutControlItem5.Location = New System.Drawing.Point(291, 152)
Me.LayoutControlItem5.Name = "LayoutControlItem5"
Me.LayoutControlItem5.Size = New System.Drawing.Size(291, 49)
Me.LayoutControlItem5.TextSize = New System.Drawing.Size(0, 0)
Me.LayoutControlItem5.TextVisible = False
'
'EmptySpaceItem2
'
Me.EmptySpaceItem2.AllowHotTrack = False
Me.EmptySpaceItem2.Location = New System.Drawing.Point(0, 152)
Me.EmptySpaceItem2.Name = "EmptySpaceItem2"
Me.EmptySpaceItem2.Size = New System.Drawing.Size(291, 49)
Me.EmptySpaceItem2.TextSize = New System.Drawing.Size(0, 0)
'
'txtServerName
'
Me.txtServerName.Location = New System.Drawing.Point(169, 15)
Me.txtServerName.Name = "txtServerName"
Me.txtServerName.Size = New System.Drawing.Size(418, 20)
Me.txtServerName.StyleController = Me.LayoutControl1
Me.txtServerName.TabIndex = 4
'
'txtUserName
'
Me.txtUserName.Location = New System.Drawing.Point(169, 45)
Me.txtUserName.Name = "txtUserName"
Me.txtUserName.Size = New System.Drawing.Size(127, 20)
Me.txtUserName.StyleController = Me.LayoutControl1
Me.txtUserName.TabIndex = 5
'
'txtPassword
'
Me.txtPassword.Location = New System.Drawing.Point(460, 45)
Me.txtPassword.Name = "txtPassword"
Me.txtPassword.Size = New System.Drawing.Size(127, 20)
Me.txtPassword.StyleController = Me.LayoutControl1
Me.txtPassword.TabIndex = 6
'
'cmbDatabase
'
Me.cmbDatabase.Location = New System.Drawing.Point(169, 75)
Me.cmbDatabase.Name = "cmbDatabase"
Me.cmbDatabase.Properties.Buttons.AddRange(New DevExpress.XtraEditors.Controls.EditorButton() {New DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo)})
Me.cmbDatabase.Size = New System.Drawing.Size(418, 20)
Me.cmbDatabase.StyleController = Me.LayoutControl1
Me.cmbDatabase.TabIndex = 7
'
'txtConnectionString
'
Me.txtConnectionString.Location = New System.Drawing.Point(169, 137)
Me.txtConnectionString.Name = "txtConnectionString"
Me.txtConnectionString.Properties.ReadOnly = True
Me.txtConnectionString.Size = New System.Drawing.Size(418, 20)
Me.txtConnectionString.StyleController = Me.LayoutControl1
Me.txtConnectionString.TabIndex = 9
'
'chkWinAuth
'
Me.chkWinAuth.Location = New System.Drawing.Point(17, 107)
Me.chkWinAuth.Name = "chkWinAuth"
Me.chkWinAuth.Properties.Caption = "Windows Authentifizierung"
Me.chkWinAuth.Size = New System.Drawing.Size(568, 18)
Me.chkWinAuth.StyleController = Me.LayoutControl1
Me.chkWinAuth.TabIndex = 10
'
'LayoutControlItem1
'
Me.LayoutControlItem1.Control = Me.txtServerName
Me.LayoutControlItem1.Location = New System.Drawing.Point(0, 0)
Me.LayoutControlItem1.Name = "LayoutControlItem1"
Me.LayoutControlItem1.Padding = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem1.Size = New System.Drawing.Size(582, 30)
Me.LayoutControlItem1.Text = "Server Name:"
Me.LayoutControlItem1.TextSize = New System.Drawing.Size(142, 13)
'
'LayoutControlItem2
'
Me.LayoutControlItem2.Control = Me.txtUserName
Me.LayoutControlItem2.Location = New System.Drawing.Point(0, 30)
Me.LayoutControlItem2.Name = "LayoutControlItem2"
Me.LayoutControlItem2.Padding = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem2.Size = New System.Drawing.Size(291, 30)
Me.LayoutControlItem2.Text = "Benutzername:"
Me.LayoutControlItem2.TextSize = New System.Drawing.Size(142, 13)
'
'LayoutControlItem4
'
Me.LayoutControlItem4.Control = Me.cmbDatabase
Me.LayoutControlItem4.Location = New System.Drawing.Point(0, 60)
Me.LayoutControlItem4.Name = "LayoutControlItem4"
Me.LayoutControlItem4.Padding = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem4.Size = New System.Drawing.Size(582, 30)
Me.LayoutControlItem4.Text = "Datenbank:"
Me.LayoutControlItem4.TextSize = New System.Drawing.Size(142, 13)
'
'LayoutControlItem3
'
Me.LayoutControlItem3.Control = Me.txtPassword
Me.LayoutControlItem3.Location = New System.Drawing.Point(291, 30)
Me.LayoutControlItem3.Name = "LayoutControlItem3"
Me.LayoutControlItem3.Padding = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem3.Size = New System.Drawing.Size(291, 30)
Me.LayoutControlItem3.Text = "Passwort:"
Me.LayoutControlItem3.TextSize = New System.Drawing.Size(142, 13)
'
'LayoutControlItem7
'
Me.LayoutControlItem7.Control = Me.chkWinAuth
Me.LayoutControlItem7.Location = New System.Drawing.Point(0, 90)
Me.LayoutControlItem7.Name = "LayoutControlItem7"
Me.LayoutControlItem7.Size = New System.Drawing.Size(582, 32)
Me.LayoutControlItem7.Spacing = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem7.TextSize = New System.Drawing.Size(0, 0)
Me.LayoutControlItem7.TextVisible = False
'
'LayoutControlItem6
'
Me.LayoutControlItem6.Control = Me.txtConnectionString
Me.LayoutControlItem6.Location = New System.Drawing.Point(0, 122)
Me.LayoutControlItem6.Name = "LayoutControlItem6"
Me.LayoutControlItem6.Padding = New DevExpress.XtraLayout.Utils.Padding(5, 5, 5, 5)
Me.LayoutControlItem6.Size = New System.Drawing.Size(582, 30)
Me.LayoutControlItem6.Text = "Aktueller Connectionstring:"
Me.LayoutControlItem6.TextSize = New System.Drawing.Size(142, 13)
'
'frmConfigDatabase
'
Me.AutoScaleDimensions = New System.Drawing.SizeF(6.0!, 13.0!)
Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
Me.ClientSize = New System.Drawing.Size(602, 221)
Me.Controls.Add(Me.LayoutControl1)
Me.Name = "frmConfigDatabase"
Me.Text = "Datenbank Verbindung"
CType(Me.LayoutControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.LayoutControl1.ResumeLayout(False)
CType(Me.LayoutControlGroup1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem5, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.EmptySpaceItem2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtServerName.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtUserName.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtPassword.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.cmbDatabase.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.txtConnectionString.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.chkWinAuth.Properties, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem4, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem3, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem7, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.LayoutControlItem6, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
Friend WithEvents LayoutControl1 As DevExpress.XtraLayout.LayoutControl
Friend WithEvents LayoutControlGroup1 As DevExpress.XtraLayout.LayoutControlGroup
Friend WithEvents txtServerName As DevExpress.XtraEditors.TextEdit
Friend WithEvents txtUserName As DevExpress.XtraEditors.TextEdit
Friend WithEvents txtPassword As DevExpress.XtraEditors.TextEdit
Friend WithEvents cmbDatabase As DevExpress.XtraEditors.ComboBoxEdit
Friend WithEvents btnTestConnection As DevExpress.XtraEditors.SimpleButton
Friend WithEvents txtConnectionString As DevExpress.XtraEditors.TextEdit
Friend WithEvents chkWinAuth As DevExpress.XtraEditors.CheckEdit
Friend WithEvents LayoutControlItem1 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem2 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem4 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem3 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem7 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem6 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents LayoutControlItem5 As DevExpress.XtraLayout.LayoutControlItem
Friend WithEvents EmptySpaceItem2 As DevExpress.XtraLayout.EmptySpaceItem
End Class

View File

@ -1,120 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

View File

@ -1,118 +0,0 @@
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Encryption
Imports DigitalData.Modules.Filesystem
Imports DigitalData.Modules.Logging
Public Class frmConfigDatabase
Private Const STRING_CONNECTION_SUCCESSFUL = "Die Verbindung wurde erfolgreich aufgebaut!" & vbNewLine & "Möchten Sie diese Verbindung nun in der Anwendung speichern?"
Private Logger As Logger = My.LogConfig.GetLogger()
Private Sub frmConfigDatabase_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim oConnectionString = My.SystemConfig.ConnectionString
If Not oConnectionString = String.Empty Then
Dim oBuilder = My.SystemConfig.GetConnectionStringBuilder(oConnectionString)
If oBuilder Is Nothing Then
MsgBox("Connection String ist ungültig!", MsgBoxStyle.Critical)
Exit Sub
End If
If oConnectionString.Contains("Trusted") Then
chkWinAuth.Checked = True
txtConnectionString.Text = oConnectionString
Else
chkWinAuth.Checked = False
txtConnectionString.Text = oConnectionString.Replace(oBuilder.Password, "XXXXXX")
txtUserName.Text = oBuilder.UserID
End If
txtServerName.Text = oBuilder.DataSource
cmbDatabase.Text = oBuilder.InitialCatalog
End If
End Sub
Private Sub chkWinAuth_CheckedChanged(sender As Object, e As EventArgs) Handles chkWinAuth.CheckedChanged
txtPassword.Enabled = Not chkWinAuth.Checked
txtUserName.Enabled = Not chkWinAuth.Checked
End Sub
Private Sub cmbDatabase_Click(sender As Object, e As EventArgs) Handles cmbDatabase.Click
Cursor = Cursors.WaitCursor
Dim oConnectionString As String = GetConnectionString(False)
Dim oDatabase As New MSSQLServer(My.LogConfig, oConnectionString)
If oDatabase.DBInitialized = False Then
MsgBox("Verbindung fehlgeschlagen!", MsgBoxStyle.Critical, Text)
Exit Sub
End If
Try
Using oConnection = New SqlClient.SqlConnection(oConnectionString)
oConnection.Open()
Using oCommand As New SqlClient.SqlCommand("sp_databases", oConnection)
Using oReader As SqlClient.SqlDataReader = oCommand.ExecuteReader
If oReader.HasRows Then
cmbDatabase.Properties.Items.Clear()
Do While oReader.Read
cmbDatabase.Properties.Items.Add(oReader("Database_Name"))
Loop
cmbDatabase.ShowPopup()
Else
MsgBox("The standard-databases could not be retrieved. The default database will be set!" & vbNewLine & "Check rights in sql-server for user: " & Me.txtUserName.Text, MsgBoxStyle.Exclamation)
End If
End Using
End Using
End Using
Catch ex As Exception
Logger.Error(ex)
End Try
Cursor = Cursors.Default
End Sub
Private Function GetConnectionString(WithDatabase As Boolean) As String
Dim oConnectionString As String
If chkWinAuth.Checked Then
oConnectionString = $"Data Source={txtServerName.Text};Trusted_Connection=True;"
Else
oConnectionString = $"Server={txtServerName.Text};User Id={txtUserName.Text};Password={txtPassword.Text};"
End If
If WithDatabase Then
oConnectionString &= $"Database={cmbDatabase.Text};"
End If
Return oConnectionString
End Function
Private Sub btnTestConnection_Click(sender As Object, e As EventArgs) Handles btnTestConnection.Click
Try
Dim oConnectionString = GetConnectionString(True)
Using oConnection As New SqlClient.SqlConnection(oConnectionString)
oConnection.Open()
oConnection.Close()
End Using
Dim oResult = MessageBox.Show(STRING_CONNECTION_SUCCESSFUL, Text, MessageBoxButtons.YesNo, MessageBoxIcon.Question)
If oResult = DialogResult.Yes Then
Dim oCrypt As New EncryptionLegacy()
Dim oEncryptedPassword = oCrypt.EncryptData(txtPassword.Text)
Dim oEncryptedConnectionString = $"Server={txtServerName.Text};Database={cmbDatabase.Text};User Id={txtUserName.Text};Password={oEncryptedPassword};"
My.SystemConfig.ConnectionString = oEncryptedConnectionString
My.SystemConfigManager.Save()
End If
Catch ex As Exception
Logger.Error(ex)
MsgBox("Error while connecting to Database", MsgBoxStyle.Critical, Text)
End Try
End Sub
End Class

View File

@ -163,7 +163,7 @@ Public Class frmFlowForm
Private ClassWindow As Window Private ClassWindow As Window
Private ProfileFilter As ProfileFilter Private ProfileFilter As ProfileFilter
Private ProfileLoader As ClassProfileLoader Private ProfileLoader As ClassProfileLoader
Private _Environment As Environment Private Property _Environment As Environment
' Runtime Flags ' Runtime Flags
Private ApplicationLoading As Boolean = True Private ApplicationLoading As Boolean = True
@ -187,7 +187,6 @@ Public Class frmFlowForm
Init = New ClassInit(My.LogConfig, Me) Init = New ClassInit(My.LogConfig, Me)
AddHandler Init.Completed, AddressOf Init_Completed AddHandler Init.Completed, AddressOf Init_Completed
Init.InitializeApplication() Init.InitializeApplication()
_Environment = My.Application.GetEnvironment
' === Register Sidebar === ' === Register Sidebar ===
RegisterBar(ABEdge.ABE_RIGHT) RegisterBar(ABEdge.ABE_RIGHT)
@ -204,6 +203,8 @@ Public Class frmFlowForm
ApplicationLoading = False ApplicationLoading = False
SplashScreenManager.CloseForm(False) SplashScreenManager.CloseForm(False)
_Environment = My.Application.GetEnvironment()
' === Initialize Error Handler === ' === Initialize Error Handler ===
Logger = My.LogConfig.GetLogger() Logger = My.LogConfig.GetLogger()
ErrorHandler = New BaseErrorHandler(My.LogConfig, Logger, Me) ErrorHandler = New BaseErrorHandler(My.LogConfig, Logger, Me)
@ -911,40 +912,40 @@ Public Class frmFlowForm
oState.CurrentClipboardContents = ClipboardContents oState.CurrentClipboardContents = ClipboardContents
If oState.MonitoringActive = False Then 'If oState.MonitoringActive = False Then
Dim oMessage As String = "Clipboard Watcher is not active!" ' Dim oMessage As String = "Clipboard Watcher is not active!"
Logger.Warn(oMessage) ' Logger.Warn(oMessage)
Exit Sub ' Exit Sub
End If 'End If
If oState.UserProfiles Is Nothing Then 'If oState.UserProfiles Is Nothing Then
Dim oMessage As String = "User Profiles are empty!" ' Dim oMessage As String = "User Profiles are empty!"
Logger.Warn(oMessage) ' Logger.Warn(oMessage)
Exit Sub ' Exit Sub
End If 'End If
If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then 'If oState.ProfileProcesses Is Nothing OrElse oState.ProfileProcesses.Rows.Count = 0 Then
Dim oMessage As String = "Profile Processes are empty!" ' Dim oMessage As String = "Profile Processes are empty!"
Logger.Warn(oMessage) ' Logger.Warn(oMessage)
Exit Sub ' Exit Sub
End If 'End If
If oState.ProfileWindows Is Nothing OrElse oState.ProfileWindows.Rows.Count = 0 Then 'If oState.ProfileWindows Is Nothing OrElse oState.ProfileWindows.Rows.Count = 0 Then
Dim oMessage As String = "Profile Windows are empty!" ' Dim oMessage As String = "Profile Windows are empty!"
Logger.Warn(oMessage) ' Logger.Warn(oMessage)
Exit Sub ' Exit Sub
End If 'End If
If oState.ProfileControls Is Nothing OrElse oState.ProfileControls.Rows.Count = 0 Then 'If oState.ProfileControls Is Nothing OrElse oState.ProfileControls.Rows.Count = 0 Then
Dim oMessage As String = "Profile Processes are empty!" ' Dim oMessage As String = "Profile Processes are empty!"
Logger.Warn(oMessage) ' Logger.Warn(oMessage)
Exit Sub ' Exit Sub
End If 'End If
Dim oWindowInfo = ClassWindow.GetWindowInfo() Dim oWindowInfo = ClassWindow.GetWindowInfo()
@ -961,7 +962,7 @@ Public Class frmFlowForm
Try Try
Dim oProfiles = ProfileFilter.Profiles Dim oProfiles = ProfileFilter.Profiles
Dim oEnvironment = ClassEnvironment.GetEnvironment() Dim oEnvironment = My.Application.GetEnvironment()
' Filter by Clipboard Contents ' Filter by Clipboard Contents
oProfiles = ProfileFilter.FilterProfilesByClipboardRegex(oProfiles, ClipboardContents) oProfiles = ProfileFilter.FilterProfilesByClipboardRegex(oProfiles, ClipboardContents)
@ -995,13 +996,11 @@ Public Class frmFlowForm
End Try End Try
End Sub End Sub
Private Sub HotkeyClass_HotKeyPressed(HotKeyID As String) Private Async Sub HotkeyClass_HotKeyPressed(HotKeyID As String)
Dim oState = My.Application.ClipboardWatcher Dim oState = My.Application.ClipboardWatcher
Select Case HotKeyID Select Case HotKeyID
Case HOTKEY_TRIGGER_WATCHER Case HOTKEY_TRIGGER_WATCHER
'Animator.Highlight(Cursor.Position)
If oState.CurrentClipboardContents = String.Empty Then If oState.CurrentClipboardContents = String.Empty Then
Logger.Info("Current Clipboard Contents is empty. Exiting.") Logger.Info("Current Clipboard Contents is empty. Exiting.")
Exit Sub Exit Sub
@ -1021,10 +1020,21 @@ Public Class frmFlowForm
ElseIf oState.CurrentProfilesWithResults.Count = 0 Then ElseIf oState.CurrentProfilesWithResults.Count = 0 Then
NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Es wurden weder Dokumente noch Daten gefunden!", ToolTipIcon.Warning) NotifyIcon.ShowBalloonTip(NOTIFICATION_DELAY, "ClipboardWatcher", "Es wurden weder Dokumente noch Daten gefunden!", ToolTipIcon.Warning)
ElseIf oState.CurrentProfilesWithResults.Count = 1 Then
Dim oProfile = oState.CurrentProfilesWithResults.First()
Dim oProfileSearches As New ProfileSearches(My.LogConfig, My.Application.GetEnvironment(), oState.CurrentClipboardContents)
Dim oFormTitle = GetResultWindowString(oState.CurrentClipboardContents)
' For now we assume these are document results instead of data results
Dim oForm = Await oProfileSearches.GetDocResultForm(oProfile, oFormTitle, Modules.ZooFlow.Constants.OperationMode.ZooFlow)
AddHandler oForm.NeedsRefresh, AddressOf ProfileResultForm_NeedsRefresh
oForm.Show()
Else Else
Dim oProfiles = oState.CurrentProfilesWithResults Dim oProfiles = oState.CurrentProfilesWithResults
Dim oEnvironment = My.Application.GetEnvironment() Dim oEnvironment = My.Application.GetEnvironment()
Dim oParams As New DigitalData.Modules.ZooFlow.ClipboardWatcherParams With { Dim oParams As New ClipboardWatcherParams With {
.ClipboardContents = oState.CurrentClipboardContents, .ClipboardContents = oState.CurrentClipboardContents,
.MatchingProfiles = oProfiles, .MatchingProfiles = oProfiles,
.MatchTreeView = oState.MatchTreeView, .MatchTreeView = oState.MatchTreeView,
@ -1050,6 +1060,26 @@ Public Class frmFlowForm
End Select End Select
End Sub End Sub
Private Async Sub ProfileResultForm_NeedsRefresh(sender As Object, e As Integer)
Dim oThisForm As IResultForm = sender
Dim oState = My.Application.ClipboardWatcher
Dim oProfileSearch As New ProfileSearches(My.LogConfig, _Environment, oState.CurrentClipboardContents)
If TypeOf sender Is frmDocumentResultList Then
Dim oProfileId = e
Dim oSearches = Await oProfileSearch.LoadDocumentSearchesAsync(oProfileId)
Dim oResults = oSearches.Select(Function(search)
Return New DocumentResultList.DocumentResult() With {
.Title = search.TabCaption,
.Datatable = search.DataTable
}
End Function).ToList()
'RaiseEvent ResultsRefreshed(Me, Nothing)
oThisForm.RefreshResults(oResults)
End If
End Sub
Private Sub PictureBoxPM1_Click(sender As Object, e As EventArgs) Handles PictureBoxPM1.Click Private Sub PictureBoxPM1_Click(sender As Object, e As EventArgs) Handles PictureBoxPM1.Click
ToastNotificationsManager1.ShowNotification(ToastNotificationsManager1.Notifications(1)) ToastNotificationsManager1.ShowNotification(ToastNotificationsManager1.Notifications(1))
End Sub End Sub

View File

@ -3,7 +3,6 @@ Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Config Imports DigitalData.Modules.Config
Module modCurrent Module modCurrent
Public Property LOGGER As Logger
Public Property CURR_MISSING_PATTERN_NAME = "Email To" Public Property CURR_MISSING_PATTERN_NAME = "Email To"
Public Property CURR_MISSING_SEARCH_STRING = String.Empty Public Property CURR_MISSING_SEARCH_STRING = String.Empty
Public Property CURR_MISSING_MANUAL_VALUE = String.Empty Public Property CURR_MISSING_MANUAL_VALUE = String.Empty