使用公式和 lotusscript 获取最后 25 分钟的文档

Getting documents of last 25 minutes with formula and lotusscript

在 Lotus 中,我有一个带有订单文件的视图。 我正在构建一个代理来搜索在过去 25 分钟内修改的所有订单。

为此我做了如下代码:

strFormule = "Form=""Order"" & @Modified >=  @Adjust(@Today;0;0;0;0;-25;0) & Deleted !=""J"""

Set ndcOrder = currentDB.Search( strFormule, Nothing, 0 )
If ndcOrder.Count <> 0 Then
Set doc = ndcOrder.GetFirstDocument
While Not doc Is Nothing

所以如果是 11.00 那么它需要接受今天从 10.35 修改的订单

但在调试器中,我还收到了提前 2 小时修改的订单。

这怎么可能?

我认为这可能是因为您使用的@today 没有时间元素。改用@Now ?

过去我使用 LotusScript 方法 GetModifiedDocuments,它允许您指定一个 NotesDateTime 对象来检索此后修改过的任何文档。 您的代码可能如下所示:

Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As notesdocumentcollection
Dim since As New NotesDateTime("")

Set db = session.CurrentDatabase
Call since.SetNow()
Call since.AdjustMinute(-25)
Set dc = db.GetModifiedDocuments(since)

到目前为止,我对这种方法的体验非常好。有关 GetModifiedDocuments

的更多信息

为什么要使用公式? 我会创建一个隐藏视图,第一列是最后修改的 date-time,降序排列。 然后我会编写我的 Lotusscript 代码,从顶部开始,一直向下工作,直到它遇到一个早于 25 分钟前的 date/time 值。

像这样:

Dim docs List As NotesDocument
Set dt25 = New NotesDateEntry(Now())
Call dt25.AdjustMinutes(-25)
Dim col as NotesViewEntryCollection
Dim entry as NotesViewEntry
Set col = view.AllEntries
Set entry = col.GetFirstEntry
Do Until entry Is Nothing
    If Cdat(entry.ColumnValues(0))<Cdat(dt25.LSLocalTime) Then
        Exit Loop
    End If
    Set docs(entry.Document.UniversalID) = entry.Document
Loop
' Now you have a list of documents created in the last 25 minutes.