我正在进行搜索,然后循环搜索结果。这会导致我的代码被锁定,更糟糕的是,它会锁定数据库,使其无法进一步使用。即使在浏览器关闭之后。当然,在我再次尝试我的代码之前,这种“锁定”似乎会在一段时间后被清除。我将改变我执行这项特定任务的方式,但我很好奇是什么导致了这种锁定。
var collection = database.search("Form = 'Request01' & Status='Approved'");
if (collection.getCount() == 0)
{
getComponent("panel1").setRendered(false);
getComponent("panel2").setRendered(true);
getComponent("panel4").setRendered(true);
return;
}
dBar.info("Approved Requests Found= " + collection.getCount());
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
var doc:NotesDocument = collection.getFirstDocument();
while (doc != null)
{
try
{
var tmpDoc = collection.getNextDocument(doc);
item.appendToTextList(doc.getNoteID());
dBar.info("Processing document: " + doc.getNoteID() )
doc.recycle();
doc = tmpDoc;
}
catch(e)
{
dBar.error(e.message);
}
}
document1.save();
以下行...
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
...返回 void,您的变量项未定义。与此的下一个操作
item.appendToTextList(doc.getNoteID());
抛出一个错误,并最终始终在您的捕获块中。然后,下一个文档永远不会被提取,你有一个无限循环。
编辑:
replaceItemValue方法通常返回NotesItem,但不返回NotesXspDocument!
我不确定您的数据库中有多少文档。我看到两个潜在的问题:
1) db.search(在我看来)不推荐使用,因为它会导致性能问题。不确定这是否与您的问题有关,但我建议您不要使用db.search,而是使用其他工具,例如具有与您的查询匹配的选择公式的视图。
2) 如果数据库中有许多与查询匹配的文档,那么java代码可能会导致问题。据我所知,您不应该使用java获取超过10k个domino对象。
至少有两种调试方法。
在服务器上安装XPages工具箱。使用CPU探查器查看最耗时的部分。
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument
将代码重写为 java,在服务器上启用调试,然后进行远程调试。这是一个视频,向您展示如何做到这一点:
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Debug_Java_for_XPages_in_NSFs