Imports DigitalData.GUIs.Common Imports DigitalData.Modules.Base Imports DigitalData.Modules.Logging Imports DigitalData.Modules.ZooFlow Imports System.Threading.Tasks Public Class SearchRunner Inherits BaseClass Private Const SEARCH_FACT_DATE_DEFAULT As String = "ADDED_WHEN" Private Const CREATED_TOMORROW As String = "TOMORROW" Private Const CREATED_TODAY As String = "ECM_CREATED_TODAY" Private Const CREATED_YESTERDAY As String = "ECM_CREATED_YESTERDAY" Private Const CREATED_LAST_7_DAYS As String = "ECM_CREATED_LAST7DAYS" Private Const CREATED_YEAR_CURRENT As String = "ECM_CREATED_YEAR_CURRENT" Private Const CREATED_YEAR_LAST As String = "ECM_CREATED_YEAR_LAST" Private Const CREATED_MONTH_CURR As String = "ECM_CREATED_MONTH_CURRENT" Private Const CREATED_MONTH_LAST As String = "ECM_CREATED_MONTH_LAST" Public Enum DateConstraint Today Tomorrow Yesterday Last7Days CurrentMonth LastMonth CurrentYear LastYear End Enum Public Event NeedsRefresh As EventHandler(Of Integer) Public Event Closed As EventHandler(Of Integer) Private Property _ActiveDateConstraint As String = String.Empty Public ReadOnly Property ActiveDateConstraint As String Get Return _ActiveDateConstraint End Get End Property Private _ActiveDateAttribute As String = SEARCH_FACT_DATE_DEFAULT Public ReadOnly Property ActiveDateAttribute As String Get Return _ActiveDateAttribute End Get End Property Public Property BaseSearchSQL As String Public Property ExplicitDate As Boolean = False Private ReadOnly Environment As Environment Private ReadOnly SearchTitle As String Public Sub New(pLogConfig As LogConfig, pEnvironment As Environment, pSearchTitle As String) MyBase.New(pLogConfig) Environment = pEnvironment SearchTitle = pSearchTitle End Sub Public Function Run(pDatatable As DataTable) As SearchResult Return Run(pDatatable, "Suche") End Function Public Function Run(pDatatable As DataTable, pTitle As String) As SearchResult Dim oParams = GetParams(pTitle) oParams.Results.Add(New DocumentResultList.DocumentResult() With { .Title = pTitle, .Datatable = pDatatable }) If pDatatable.Rows.Count = 1 Then oParams.ShowFileList = False End If Dim oForm As New frmDocumentResultList(My.LogConfig, Environment, oParams) ' TODO: Implement, not needed right now 'AddHandler oForm.NeedsRefresh, AddressOf Form_NeedsRefresh AddHandler oForm.FormClosed, AddressOf Form_Closed oForm.Show() Return New SearchResult() End Function Public Async Function Run(pSearchTerm As String) As Task(Of SearchResult) Dim oWindowTitle = GetResultWindowString(pSearchTerm) Return Await Run(pSearchTerm, Nothing, Nothing) End Function Public Async Function Run(pSearchTerm As String, pDateFrom As Date, pDateTo As Date) As Threading.Tasks.Task(Of SearchResult) If pDateFrom.Equals(Date.MinValue) = False Then ExplicitDate = True End If Dim oSearchTerm = pSearchTerm Dim oWindowTitle = GetResultWindowString(pSearchTerm) Dim oParams = GetParams(oWindowTitle) Dim oDateConstraint = $"{_ActiveDateAttribute}~{_ActiveDateConstraint}" If ExplicitDate Then Dim oDate2 As Date If pDateTo.Equals(Date.MinValue) Then oDate2 = pDateTo Else oDate2 = pDateFrom End If Dim oProc = $"EXEC PRIDB_SEARCH_ADD_USR_DATE {My.Application.User.UserId},'{pDateFrom}','{oDate2}'" If Await My.Database.ExecuteNonQueryIDBAsync(oProc) = True Then oDateConstraint = $"{_ActiveDateAttribute}~DATEPART" End If End If Dim oSQL = $"EXEC PRIDB_SEARCH_TEXT_GET_RESULTS {My.Application.User.UserId},'{oSearchTerm}','{oDateConstraint}'" If Await My.Database.ExecuteNonQueryIDBAsync(oSQL) = True Then Dim oDTDocResult = Await My.Database.GetDatatableIDBAsync(BaseSearchSQL) If oDTDocResult.Rows.Count > 0 Then oParams.Results.Add(New DocumentResultList.DocumentResult() With { .Title = SearchTitle, .Datatable = oDTDocResult }) If oDTDocResult.Rows.Count = 1 Then oParams.ShowFileList = False End If Dim oForm As New frmDocumentResultList(My.LogConfig, Environment, oParams) ' TODO: Implement, not needed right now 'AddHandler oForm.NeedsRefresh, AddressOf Form_NeedsRefresh AddHandler oForm.FormClosed, AddressOf Form_Closed oForm.Show() Return New SearchResult() Else Return New SearchResult("No Results") End If Else Return New SearchResult("Error in FlowSearch - Check Your log") End If End Function Private Sub Form_Closed(sender As Object, e As EventArgs) RaiseEvent Closed(sender, 0) End Sub Private Function GetParams(pWindowTitle As String) As DocumentResultList.Params Dim oParams = New DocumentResultList.Params() With { .WindowGuid = SearchTitle, .WindowTitle = pWindowTitle, .OperationModeOverride = Modules.ZooFlow.Constants.OperationMode.ZooFlow, .ProfileGuid = 35452, .ColumnNames = New DocumentResultList.ColumnNames With { .ObjectIdColumn = "DocID" }, .ShowBackNavigation = False } Return oParams End Function Private Function GetResultWindowString(SearchContent As String) As String If SearchContent <> String.Empty Then If My.Application.User.Language = State.UserState.LANG_DE_DE Then Return $"Suche Nach '{SearchContent}'" Else Return $"Search For '{SearchContent}'" End If Else If My.Application.User.Language = State.UserState.LANG_DE_DE Then Return $"Suche Datumsbegrenzt" Else Return $"Search via date" End If End If End Function Public Sub SetDateConstraint() _ActiveDateConstraint = String.Empty End Sub Public Sub SetDateConstraint(pConstraintName As String) _ActiveDateConstraint = pConstraintName End Sub Public Sub SetDateConstraint(pConstraint As DateConstraint) Select Case pConstraint Case DateConstraint.Today _ActiveDateConstraint = CREATED_TODAY Case DateConstraint.Yesterday _ActiveDateConstraint = CREATED_YESTERDAY Case DateConstraint.Tomorrow _ActiveDateConstraint = CREATED_TOMORROW Case DateConstraint.Last7Days _ActiveDateConstraint = CREATED_LAST_7_DAYS Case DateConstraint.CurrentMonth _ActiveDateConstraint = CREATED_MONTH_CURR Case DateConstraint.LastMonth _ActiveDateConstraint = CREATED_MONTH_LAST Case DateConstraint.CurrentYear _ActiveDateConstraint = CREATED_YEAR_CURRENT Case DateConstraint.LastYear _ActiveDateConstraint = CREATED_YEAR_LAST Case Else _ActiveDateAttribute = String.Empty End Select End Sub Public Sub SetDateAttribute(pAttributeName As String) _ActiveDateAttribute = pAttributeName End Sub Public Sub SetDateAttribute() _ActiveDateAttribute = SEARCH_FACT_DATE_DEFAULT End Sub Public Class SearchResult Public OK As Boolean Public ErrorMessage As String = String.Empty ''' ''' Returns a positive Search Result ''' Public Sub New() OK = True End Sub ''' ''' Returns a failed search result with an error message ''' ''' Public Sub New(pMessage As String) OK = False ErrorMessage = pMessage End Sub End Class End Class