2010-05-26 31 views
1

我目前正在編寫一個應用程序,它基於創建/修改/上次訪問日期過去的天數,在數據庫之間移動Notes文檔。我只想通過一種簡單方便的方式獲得想法,以創建具有特定日期的文檔,而無需更改Domino服務器上的時間,以便測試我的應用程序。創建具有特定創建/修改/上次訪問日期的Lotus Notes文檔以進行測試

迄今爲止發現的最佳方式是創建本地副本並將系統時鐘更改爲我想要的日期。不幸的是,這種方法存在一些問題。它不適用於修改日期 - 我不確定當位置設置爲Island(已斷開連接)時它是如何獲取修改日期信息的 - 它還會在複製文檔時更改修改日期和上次訪問日期到服務器副本。

有人建議嘗試創建DXL文檔,修改DXL文件中的日期時間,然後將其作爲Notes文檔導回到數據庫中;但那不起作用。它只是創建它的日期。

任何人都可以提供任何其他建議嗎?

回答

3

您可以通過設置UNID(基本上是時間戳的結構,儘管實際實施在最新版本中已更改)來設置文檔的創建日期。但是,訪問時間和修改時間在Notes/Domino環境中是不可設置的,因爲您所做的更改將被保存更改的過程覆蓋。如果您有冒險的天賦和需要使用剪刀運行,您可以通過編程從外部應用程序或使用十六進制編輯器手動更改數據庫文件本身。 (編輯二進制文件將起作用 - 人們已經使用十六進制編輯器安全地清除「隱藏設計」標誌多年。請記住簽名的文檔會很糟糕,並且您需要確保數據庫文件的本地加密已關閉。)

+0

upvote for this priceless警告emptor:「如果你有冒險的天賦和需要用剪刀跑......」 – booyaa 2011-11-04 15:00:15

1

我想給出如何依賴Lotus Notes時間戳(主要用於複製),沒有API調用,允許您更改註釋的修改,創建或上次訪問日期。 (關於Lotus Notes的內部的更多內容可以參考here。)

我在Notes C API文檔中找到了一條,發現只有一處提到關於如何get/set information in the note's header,包括修改日期。但是,文檔指出,當您嘗試更新該筆記(即將其寫入磁盤)時,最後修改日期將被寫入磁盤的日期/時間覆蓋。作爲一種替代方案,我建議在僅由您控制的文檔(例如MyCreated,MyModified和MyAccessed)中創建自己的一組日期項目,並在您的代碼中引用基於日期移動文檔的日期項目組。然後,您可以像更改任何其他文檔項目一樣方便地更改這些日期(通過代理,表單等)

對於MyCreated,創建一個隱藏的計算表單字段,公式爲@CREATED或@NOW。設置構成時計算的類型。

對於MyModified,使用公式@NOW創建隱藏的計算表單字段,並將類型設置爲計算。

MyAccessed有點棘手。如果你沒有它,我建議你只用MyCreated和MyModified工作。如果你需要它,你應該應該能夠通過在QueryOpen或PostOpen事件中設置一個字段值來管理它。如果用戶只能讀取文檔,則會出現問題 - 更新MyAccessed字段的代碼將無法存儲該值。

希望這會有所幫助!

+0

謝謝。我發現你的鏈接非常豐富 - 儘管我並不太熱衷於創建自定義字段來解決問題。這是因爲我在過去遇到過某個數據庫,並且他們以這種方式對應用程序進行了編碼,其中的字段沒有正確更新。當用戶查看文檔的屬性時,這會在搜索結果中造成混淆。 – 2010-05-27 00:14:35

+0

這絕對是一個問題。你用我提出的解決方案並沒有真正關注正確的事件。您需要改爲像SQL中的插入和更新觸發器。不幸的是,在Notes中無法在一個地方做到這一點,因此您必須確保覆蓋創建或更新文檔的所有情況。如果你熟悉所有的代碼,這絕對是可能的,但我理解你的猶豫。 – 2010-05-27 13:31:08

2

實際上有一種非常簡單的欺騙創建日期/時間的方法:只需添加一個字段稱爲$創建與任何你想要的日期/時間。這暗示在Notes C API頭文件nsfdata.h:與筆記相關

時間/日期: OID.Note可以是TIMEDATE筆記創建 時(但不能保證是 - 尋找$ CREATED item first for note creation time) 通過NSFNoteGetInfo(_NOTE_OID)或 獲取SEARCH_MATCH中的OID。

不幸的是,沒有類似的技術來欺騙mod或訪問日期。據我所知,至少沒有任何記錄。

相關問題