2014-02-24 38 views
1

這裏是我的場景:有一個應用程序,它在'今天'之前的X天內不會對某些用戶進行驗證。Lotus Notes:與@DBlookup相關的多個@MailSend

這些用戶和天數在配置區域中引入。這裏是一個列出他們的觀點:我在代理只用一個簡單的公式(順便說一句,有可能僅僅是幾天的一個更大的數字,多達管理員希望)

Days | Persons | 
______________ 
30 
     Name1 
     Name2 
     Name3 
60 
     Name4 
     Name5 

這種配置區成立之前, (這是定爲每天運行),像這樣:(有隻有30天的固定 - 用戶現在可以在配置區域設置爲多少天,因爲他想)

@If(@Date(@Adjust(@Date(@Now);0;0;30;0;0;0)) = @Date(final_date)); 
    (@MailSend("Name1":"Name2":"Name3";"";"";"This document expires in 30 days!";"";""; 
[IncludeDoclink])); 

我知道使用@DBLookup@Dbcolumn我可以從視圖中的2列中獲取值。但是,如何根據配置區域上建立的天數大小創建多少個@MailSend函數?我應該創建一個長度爲第一列@DbColumn元素的「長度」的數組嗎?

另外,創建一個代理(使用多個@MailSend)還是多個代理?如果有機會,我希望以公式語言來做到這一點,或者,如果它更容易理解並且更簡單,那麼在LotusScript中。

任何幫助將不勝感激。謝謝你的時間!

回答

1

計算@Date(final_date)@Today之間的天數差,並將其作爲@DbLookup(... [FAILSILENT])的關鍵字,以獲得名稱爲@MailSend的列表。如果列表爲空,則不必發送郵件。

+0

謝謝。如果DbLookup的返回名稱超過1,我應該使用任何@Functions還是隻使用字段名稱? –

+0

'@DbLookup'的結果是@ MailSend的第一個參數 - 沒有任何進一步的@Function,因爲它已經是一個名稱列表。 –

+0

而對於天的差異:(@Date(final_date) - @今日)/ 86400應該工作,對吧? –

0

只需在Lotusscript中編寫它。在我看來,更容易。

使用NotesView類的AllEntries屬性來獲取包含視圖中所有條目的NotesDocumentCollection對象,並使用GetFirstEntry/GetNextExtry循環訪問該集合。

使用NotesViewEntry對象的ColumnValues屬性來獲取第一列和第二列(比實際打開/訪問NotesDocument對象快得多),然後直接發送郵件給用戶。

比較日期也會容易得多。簡單地創建一個具有今天日期的NotesDateValue對象,將其設置爲n日後 - 其中n是ColumnValues(0)中的值 - 並將其與最終日期(您還應該將其放入快速查找視圖中的列)。

我還想告訴你我們一個> =比較。如果代理未能運行一天,則不會與您的代碼一起發送通知。然後,如果通知已成功發送,請在文檔上設置一個標誌,並排除該標誌在該視圖中顯示的任何文檔。

+0

謝謝你,卡爾亨利。我將嘗試在Lotus Script中編寫它。感謝您的提示! –