我希望迭代(可能很大)Lotus Domino 数据库中的每个文档,并且如果处理中断(网络连接错误、应用程序重新启动等),能够从上一个文档继续。我没有数据库的写入权限。
我正在寻找一种方法,无需从服务器下载那些已处理的文档。因此,我必须将一些启动信息传递给服务器,该文档应该是(可能重新启动)处理中的第一个文档。
我已经检查过AllDocuments
财产和DocumentColletion.getNthDocument
方法,但这个属性是未排序的,所以我猜顺序可以在两次调用之间改变。
另一个想法是使用公式查询 https://stackoverflow.com/q/12983605/843804但这些查询似乎无法进行排序。
-
第三个想法是Database.getModifiedDocuments
方法与相应的Document.getLastModified
一。看起来不错但是
在我看来,返回集合的顺序没有记录,并且基于创建时间而不是上次修改时间。
这是基于以下示例的代码官方示例 http://publib.boulder.ibm.com/infocenter/domhelp/v8r0/topic/com.ibm.designer.domino.main.doc/H_EXAMPLES_GETMODIFIEDDOCUMENTS_METHOD_DB_JAVA.html:
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)
call.)
有什么方法可以使用 Lotus Domino Java API 可靠地完成此操作吗?
如果您有权更改数据库,或者可以要求某人这样做,那么您应该创建一个按唯一键或修改日期排序的视图,然后仅存储指向最后处理的文档的“指针”。
除此之外,您必须自己维护以前处理过的文档的列表。在这种情况下,您可以使用 AllDocuments 属性并迭代它们。使用 GetFirstDocument 和 GetNextDocument,因为据报道它们比 GetNthDocument 更快。
或者,您可以进行两次传递,一次收集要存储的所有文档的 UNID 列表,然后进行第二次传递来处理您拥有的 UNID 列表中的每个文档(使用 GetDocumentByUNID 方法)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)