我想疊代的(可能大)的Lotus Domino數據庫的每個文檔,並能夠從最後一個,如果處理中斷繼續它(網絡連接錯誤,應用程序啓動等。 )。我沒有對數據庫的寫入權限。遍歷Lotus Domino中的每個文檔
我正在尋找一種方式,我沒有下載從已經處理的服務器的文檔。所以,我必須將一些起始信息傳遞給服務器,該文檔應該是(可能重新啓動的)處理中的第一個。
我已檢查
AllDocuments
屬性和DocumentColletion.getNthDocument
方法,但此屬性未排序,所以我猜順序可以兩個電話之間切換。另一個想法是使用formula query,但它似乎並不認爲排序是可能與這些查詢。
第三個想法是
Database.getModifiedDocuments
方法與相應的Document.getLastModified
之一。它看起來不錯,但它在我看來,返回的集合的順序沒有記錄,並且基於創建時間而不是上次修改時間。這裏是一個基於official example一個示例代碼:
System.out.println("startDate: " + startDate); final DocumentCollection documentCollection = database.getModifiedDocuments(startDate, Database.DBMOD_DOC_DATA); Document doc = documentCollection.getFirstDocument(); while (doc != null) { System.out.println("#lastmod: " + doc.getLastModified() + " #created: " + doc.getCreated()); doc = documentCollection.getNextDocument(doc); }
它打印如下:
startDate: 2012.07.03 08:51:11 CEDT #lastmod: 2012.07.03 08:51:11 CEDT #created: 2012.02.23 10:35:31 CET #lastmod: 2012.08.03 12:20:33 CEDT #created: 2012.06.01 16:26:35 CEDT #lastmod: 2012.07.03 09:20:53 CEDT #created: 2012.07.03 09:20:03 CEDT #lastmod: 2012.07.21 23:17:35 CEDT #created: 2012.07.03 09:24:44 CEDT #lastmod: 2012.07.03 10:10:53 CEDT #created: 2012.07.03 10:10:41 CEDT #lastmod: 2012.07.23 16:26:22 CEDT #created: 2012.07.23 16:26:22 CEDT
(我不使用任何
AgentContext
這裏訪問數據庫的數據庫對象來自session.getDatabase(null, databaseName)
)。
Is th是否可以通過Lotus Domino Java API可靠地執行此操作?
由於您沒有對源數據庫的寫訪問權限,因此必須將已處理的所有文檔的UniversalID存儲在另一個數據庫甚至本地文本文件中,並跳過那些已經處理過一次的文檔。 UNID不會更改,因此它可以更加保證您只處理一次文檔。 –
@ srini.venigalla:目前的解決方案與此非常相似,但我想避免再次下載並跳過已處理的文檔。這似乎是一個非常大的開銷。 – palacsint
我打算建議使用NotesDatabase類的UnprocessedDocuments屬性,但它看起來像需要AgentContext。 http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/index.jsp?topic=%2Fcom.ibm.designer.domino.main.doc%2FH_UPDATEPROCESSEDDOC_METHOD_JAVA.html –