我有一个视图选择公式
SELECT @If( @Date(@Now) = @Date(@Created); @All; @False)
我想让它选择过去7天的所有文件,而不仅仅是今天的文件。
答案 0 :(得分:6)
您需要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
对于adjust,你需要0不为空; null恰好工作,因为没有名称为null的字段或变量,而@Formula是宽容的,并使缺失值为0。 这里的诀窍:您计算字段isnotyet7daysOld应该具有的所选文档的值(对于onChange代理或者在已调度的代理上的所有文档都将更改),然后选择仅更改那些结果不匹配的地方。这样可以最小化文档更新。此外,保存的文档也会直接更新。如果现在添加一个隐藏的计算时间组合字段isnotyet7daysOld,并将@True作为字段值,则可以可靠地捕获所有文档。而且您需要每晚只运行一次预定代理(0:01)。
答案 1 :(得分:5)
SELECT @If( @Date(@Now) < @Date(@Adjust(@Created(), null, null, 7, null, null, null)); @All; @False)
答案 2 :(得分:2)
您需要非常小心在其中包含日期的视图选择公式。
如果您使用@Today或@Now,那么Notes / Domino将始终认为视图中的所有文档都不在数据中,并且每次访问时都必须重建索引。这对于非常小的数据库来说是可以的,但对于较大的数据库则是一种灾难。
有些人会尝试使用像@date这样的公式(“今天”)来解决这个问题。 Notes / Domino不会将其识别为基于日期/时间的公式,因为它不包含@Today或@Now,并且最初会起作用。但是你会发现视图不会删除旧文档,除非索引被完全刷新,这可能很难安排。
处理此问题的最佳方法是让代理每晚运行,使用正确的固定日期值更新选择公式。 codestore.net的Jake Howlett在这方面有一些excellent帖子。
答案 3 :(得分:2)
以下是我所做的(我使用@TextToTime("Today")
代替@Today
来避免上述警告重建索引):
SELECT (@Created) >= @Adjust(@TextToTime("Today");0;0;-7;0;0;0)
顺便说一句,谢谢你的上述提示。我一直想要创建这样的视图很长一段时间。我是一个z / OS系统程序员(大型机)并且不得不每周重建这个视图以使其保持最新状态,因为“预制”视图设计公式不是相对日期。我从Notes帮助中的@TextToTime
示例中获取了@Created
提示(这有一个在当月获取文档的示例)。我的Notes客户端是6.5版。