备注公式语言日期差异

时间:2017-08-30 13:38:51

标签: database view formula lotus-notes

我想构建一个仅包含最新文档(超过2个月)的视图。我正在使用这个选择公式:

SELECT  @IsAvailable($Conflict) and docForm="ServiceOrders" and (@Today-PosDesValidFrom)<5259600

5259600是2个月的秒数,因为我读到 - 运算符以秒为单位返回时间跨度。 我认为我没有任何结果。

1 个答案:

答案 0 :(得分:1)

从不在视图选择公式中使用@Today或@Now。视图索引将永远不会是最新的,因此更新任务将不断运行以刷新索引。这将影响性能负面。

您应该做的是每天(在您的情况下可能是每晚)代理,该代理将标记要在视图中显示的文档。 要使代理尽可能快,请处理在其中一列中显示日期的视图。

绝对最快就是这样:
1)创建一个名为(LookupServiceOrdersByValidDate)的隐藏视图 2)第一列将包含字段名称PosDesValidFrom(我将假设它是一个日期字段,否则您需要将其转换为日期),并按降序排序。转到列的信息框中的第四个选项卡,并确保将其设置为日期/时间 enter image description here
3)创建第二列,在其中显示文本字段DisplayIn2MonthView。按降序排序。
4)保存视图。

您现在拥有一个可以使用代理循环的视图。由于它以最新的顶部降序排序,一旦您到达超过2个月的日期,您就可以停止代理并完成。

脚本看起来像这样:

Dim session as New NotesSession
Dim db as NotesDatabase
Dim view as NotesView
Dim col as NotesViewEntryCollection
Dim entry as NotesViewEntry
Dim doc as NotesDocument
Dim validDate as NotesDateTime
Dim cutoffDate As NotesDateTime

' Get current date and time and go back 2 months
Set cutoffDate = New NotesDateTime(Now())
Call cutoffDate.AdjustMonth(-2)
' Drill down to view
Set db = session.CurrentDatabase
Set view = db.GetView("(LookupServiceOrdersByValidDate)")
' Create a collection of all entries in the view and loop through them
Set col = view.AllEntries
Set entry = col.GetFirstEntry()
Do Until entry is Nothing
    ' Get value in first column in view and use it to create new DateTime object
    validDate = New NotesDateTime(entry.ColumnValues(0))
    ' Check if we are within the 2 month cutoff date
    If Cdat(validDate.dateOnly)>=Cdat(cutoffDate) Then
        ' Get document and set flag to display
        Set doc = entry.Document
        Call doc.ReplaceItemValue("DisplayIn2MonthView","Yes")
        Call doc.Save(True,False)
    Else
        ' We are beyond the cutoff date, but we need to clear old flags.
        ' Read the value in the second column and see if it is "Yes"
        If entry.ColumnValues(1)="Yes" Then
            Set doc = entry.Document
            Call doc.ReplaceItemValue("DisplayIn2MonthView","")
            Call doc.Save(True,False)
        Else
            ' Since all "Yes" values should be at the top, if we
            ' get here there should be no more flagged documents.
            Exit Do
        End If
    End If
    Set entry = col.GetNextEntry(entry)
Loop
Print "All done."

最后,修改视图以显示文档。您应该使用Form字段,而不是docForm。将选择公式设置为
SELECT !@IsAvailable($Conflict) AND Form="ServiceOrders" AND DisplayIn2MonthView="Yes" 该视图现在应该只包含过去2个月内具有ValidDate的ServiceOrder文档。 如果您确实只想在视图中进行复制/保存冲突,请确保将视图设置为而不是在层次结构中显示响应文档(取消选中该框): enter image description here