将FTSearch与日期字段一起使用

时间:2013-12-20 15:34:33

标签: date full-text-search lotus-notes lotusscript

我的代码将搜索文档中的特定字段,以查找用户选择的值并将这些文档放在文件夹中。我有代码工作,但我坚持如何继续与日期字段做同样的事情。我需要能够在日期范围内找到文档。任何人都可以帮我解决这个问题吗?这是我的代码:

Sub Initialize
    On Error GoTo ErrHandler
    Dim ws As New NotesUIWorkspace
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim RemoveView As NotesView
    Dim RemoveDoc As NotesDocument
    Dim RemoveEntry As NotesViewEntryCollection 
    Dim dc As NotesDocumentCollection
    Dim doc As NotesDocument
    Dim view As NotesView
    Dim j As Integer
    Dim DialogDoc As NotesDocument

    Set db = session.CurrentDatabase

    Folder$ = "(UseOfForceSearch)"

    'Clear folder before inputting current search results.
    Set RemoveView = db.GetView(Folder$)
    Set RemoveDoc = RemoveView.GetFirstDocument

    If Not (RemoveDoc Is Nothing) Then
        Set RemoveEntry = RemoveView.AllEntries
        Call RemoveEntry.RemoveAllFromFolder(Folder$)
    End If

    If Not (db.IsFTIndexed) Then
        answer = MessageBox(" Sorry. This database is not full-text indexed." + "Do you want to create an index?", MB_YESNO)
        If (answer = IDYES) Then
            Call db.UpdateFTIndex(True)
        End If
    End If 
    Set DialogDoc = db.Createdocument

    searchForm$ = "$Force"
    Form$ = "ReportDialog"  'Ask user for specifics of search using ReportDialog
    Title$ = "Use of Force Search Criteria"
    DialogDoc.Form = Form$


    DialogDoc.StartDate = DialogDoc.StartDate(0)
    DialogDoc.EndDate = DialogDoc.EndDate(0)
    DialogDoc.Field1 = DialogDoc.Field1(0)
    DialogDoc.Value1 = DialogDoc.Value1(0)
    DialogDoc.Field2 = DialogDoc.Field2(0)
    DialogDoc.Value2 = DialogDoc.Value2(0)
    DialogDoc.Field3 = DialogDoc.Field3(0)
    DialogDoc.Value3 = DialogDoc.Value3(0)
    DialogDoc.Field4 = DialogDoc.Field4(0)
    DialogDoc.Value4 = DialogDoc.Value4(0)
    DialogDoc.Field5 = DialogDoc.Field5(0)
    DialogDoc.Value5 = DialogDoc.Value5(0)
    DialogDoc.Logic1 = DialogDoc.Logic1(0)

EnterDialog:
    If (ws.DialogBox(Form$, True, True, False, True, False, False, Title$,DialogDoc,True)) Then
    Else
        Exit Sub
    End If

    SDate$ = CStr(DialogDoc.StartDate(0))
    EDate$ = CStr(DialogDoc.EndDate(0))

    Field1$ = UCase(CStr(DialogDoc.Field1(0)))
    Field2$ = UCase(CStr(DialogDoc.Field2(0)))
    Field3$ = UCase(CStr(DialogDoc.Field3(0)))
    Field4$ = UCase(CStr(DialogDoc.Field4(0)))
    Field5$ = UCase(CStr(DialogDoc.Field5(0)))

    Oper$ = "contains"

    Value1$ = UCase(CStr(DialogDoc.Value1(0)))
    Value2$ = UCase(CStr(DialogDoc.Value2(0)))
    Value3$ = UCase(CStr(DialogDoc.Value3(0)))
    Value4$ = UCase(CStr(DialogDoc.Value4(0)))
    Value5$ = UCase(CStr(DialogDoc.Value5(0)))

    Logic1$ = UCase(CStr(DialogDoc.Logic1(0)))
    Logic2$ = UCase(CStr(DialogDoc.Logic2(0)))
    Logic3$ = UCase(CStr(DialogDoc.Logic3(0)))
    Logic4$ = UCase(CStr(DialogDoc.Logic4(0)))

    Set Date1 = New NotesDateTime(SDate$)
    Set Date2 = New NotesDateTime(EDate$)
    Date1ForReport$ = Date1.DateOnly 
    Date2ForReport$ = Date2.DateOnly 

    datemax = Date2.timedifference(Date1)           
    DaysBetween = datemax \ 86400       
    If(DaysBetween > (366 * 1)) Then        
        MessageBox "Date range cannot exceed 1 year.",48,"Error:"
        GoTo EnterDialog
    End If  

    For i = 1 To 1
        searchForm$ = "(FIELD Form contains $Force) and "
        Expr1$ = "FIELD " + Field1$ + " " + Oper$ + " " + Value1$
        Expr2$ = "FIELD " + Field2$ + " " + Oper$ + " " + Value2$
        Expr3$ = "FIELD " + Field3$ + " " + Oper$ + " " + Value3$
        Expr4$ = "FIELD " + Field4$ + " " + Oper$ + " " + Value4$
        Expr5$ = "FIELD " + Field5$ + " " + Oper$ + " " + Value5$

        FinalExpr$ = searchForm$ + Expr1$

        If(Logic1$ <> "") Then
            FinalExpr$ = FinalExpr$ + " " + Logic1$ + " " + Expr2$
        ElseIf (Logic2$ <> "") Then
            FinalExpr$ = FinalExpr$ + " " + Logic1$ + " " + Expr2$ + " " + Logic2$ + " " + Expr3$
        ElseIf (Logic3$ <> "") Then
            FinalExpr$ = FinalExpr$ + " " + Logic1$ + " " + Expr2$ + " " + Logic2$ + " " + Expr3$ + " " + Logic3$ + " " + Expr4$
        ElseIf (Logic4$ <> "") Then
            FinalExpr$ = FinalExpr$ + " " + Logic1$ + " " + Expr2$ + " " + Logic2$ + " " + Expr3$ + " " + Logic3$ + " " + Expr4$ + " " + Logic4$ + " " + Expr5$
        End If  
        FinalExpr$ = FinalExpr$ 
        Print "Searching..."
        ' the number 16384 means fuzzy search
        Set dc = db.FTSearch(FinalExpr$,0,,16384)   
        Folder$ =  "(UseOfForceSearch)"     
        Call dc.PutAllInFolder(Folder$,True)
    Next    
    Print "Search Completed with " + CStr(dc.Count) + " results."   
    Set view = db.getView(Folder$)              
    Exit Sub
ErrHandler:
    MessageBox "Error" & Str(Err) & ": " &  Error$,16,"Error!"
    Exit Sub
End Sub

1 个答案:

答案 0 :(得分:1)

您可以将操作符= / < / > / <= / >=用于FTSearch中的日期字段。

示例:FIELD YourDateField > 01/30/2013[YourDateField] > 01/30/2013

要查找您所写日期范围内的文件:

[YourDateField] >= 01/01/2013 AND [YourDateField] <= 12/31/2013

查看here以获取完整的搜索选项列表。