我有一个视图选择公式
SELECT @If( @Date(@Now) = @Date(@Created); @All; @False)
我希望它选择过去 7 天的所有文件,而不仅仅是今天的文件。
我有一个视图选择公式
SELECT @If( @Date(@Now) = @Date(@Created); @All; @False)
我希望它选择过去 7 天的所有文件,而不仅仅是今天的文件。
你需要2个部分。视图选择公式:
SELECT isnotyet7daysOld = @True
和一个(或两个)代理,它们按计划运行,并且在“创建或更改文档时”运行。代理看起来像这样(两者)
minDate := @Adjust(@Today;0;0;-7;0;0;0);
REM "There are no future documents";
tmpResult := @if(minDate <= @Created;@False;@True);
SELECT tmpResult != isnotyet7daysOld;
FIELD isnotyet7daysOld := tmpResult
对于调整,您需要 0 而不是 null;null 恰好起作用,因为没有名称为 null 的字段或变量,并且@Formula 是宽容的,并使缺失值为 0。 这里的技巧:您计算字段 isnotyet7daysOld 对所选文档应该具有的值(这将是更改了 onChange 代理或所有计划代理上的),然后选择仅更改结果不匹配的那些。这样,您可以最大限度地减少文档更新。保存的文档也会直接更新。如果您现在添加一个隐藏的computed-when-composed 字段isnotyet7daysOld,并将@True 作为字段值,您可以可靠地捕获所有文档。而且您只需每晚 (0:01) 运行一次计划代理。
SELECT @If( @Date(@Now) < @Date(@Adjust(@Created(), null, null, 7, null, null, null)); @All; @False)
这是我所做的(我使用@TextToTime("Today")
而不是@Today
避免根据上述警告重建索引):
SELECT (@Created) >= @Adjust(@TextToTime("Today");0;0;-7;0;0;0)
顺便说一句,感谢上述提示。很长一段时间以来,我一直想创建一个这样的视图。我是 z/OS 系统程序员(大型机),并且由于“固定”视图设计公式不是相对日期,因此必须每周重建此视图以使其保持最新状态。我@TextToTime
从 Notes 帮助中的示例中获得了提示@Created
(这有一个获取当月文档的示例)。我的 Notes 客户端是 6.5 版。
您需要非常小心其中包含日期的视图选择公式。
如果您使用@Today 或@Now,那么Notes/Domino 将始终认为视图中的所有文档都没有数据,并且每次访问时都必须重建索引。这对于非常小的数据库来说是可以的,但对于较大的数据库来说是一场灾难。
有些人会尝试使用@date("Today") 之类的公式来解决这个问题。Notes/Domino 不会将其识别为基于日期/时间的公式,因为它不包含 @Today 或 @Now,并且最初会起作用。但是你会发现除非索引完全刷新,否则视图不会删除旧文档,这可能很难安排。
解决此问题的最佳方法是让代理每晚运行,以使用正确的固定日期值更新选择公式。codestore.net的Jake Howlett有一些关于这方面的优秀文章。