2009-02-16 74 views

回答

5
SELECT @If(@Date(@Now) < @Date(@Adjust(@Created(), null, null, 7, null, null, null)); @All; @False) 
+1

這裏只是添加註釋,儘管這在技術上是正確的,選擇公式中使用基於時間的功能(例如@Now)不鼓勵,特別是對大型數據庫,特別是如果該視圖的索引選項設置爲「自動」 。 – 2013-05-24 15:39:00

2

你需要非常小心的視圖選擇公式中有日期。

如果您使用@Today或@Now,那麼Notes/Domino將始終考慮視圖中的所有文檔都沒有數據,並且每次訪問時都必須重建索引。對於非常小的數據庫來說這是可以的,但是對於大型數據庫來說卻是一場災難

有些人會嘗試使用@date(「Today」)這樣的公式來解決這個問題。 Notes/Domino不會將它識別爲基於日期/時間的公式,因爲它不包含@Today或@Now,並且將在最初工作。但是,您會發現該視圖不會刪除舊文檔,除非索引完全刷新,這可能會非常棘手。

應對這種情況的最好的辦法是有一個代理,每天晚上運行,更新與正確的固定日期值的選擇公式。 Jake Howlett在codestore.net有一些excellent這樣做的帖子。

+0

感謝您的輸入!每次訪問代理中的視圖時,我都需要最新的值。一些數據庫是幾個演出,所以我想我會在這種情況下每天運行一兩次。 – Todd 2009-02-17 01:24:28

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 

對於調整你需要0不爲空;空恰巧工作,因爲沒有字段或變量名稱爲空,@Formula是寬容,使缺失值0 這裏的竅門:您計算該字段isnotyet7daysOld應該有所選文檔的值(即將更改爲onChange代理程序或全部代理程序),然後選擇僅更改結果不匹配的那些代碼。這樣可以最大限度地減少文檔更新另外,保存的文件將直接更新。如果現在使用@True作爲字段值添加隱藏的computed-when-composed字段isnotyet7daysOld,則可以可靠地捕獲所有文檔。而且你只需要每晚運行一次預定代理(0:01)。

2

這裏是我做過什麼(我用@TextToTime("Today")代替@Today避免每索引重建上述警告):

SELECT (@Created) >= @Adjust(@TextToTime("Today");0;0;-7;0;0;0) 

BTW,感謝上面的提示。我一直想創造一個這樣的觀點很長一段時間。我是一個z/OS系統程序員(大型機),不得不每週重建這個視圖以獲得最新版本,因爲「canned」視圖設計公式不是相對日期。我從Notes幫助中的@Created示例中獲取@TextToTime提示(這是本月獲取文檔的示例)。我的Notes客戶端是版本6.5。