我正在搜索然后循环结果。这导致我的代码锁定,更糟糕的是,它阻止了该数据库的任何进一步使用。即使在浏览器关闭后也是如此。似乎这个“锁定”在一段时间后被清除,直到我再次尝试我的代码。我将改变我执行此特定任务的方式,但我很好奇导致此锁定的原因。
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();
答案 0 :(得分:4)
以下一行......
var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");
...返回 void ,您的变量 item 未定义。使用此
的下一个操作item.appendToTextList(doc.getNoteID());
抛出错误并始终在 catch -Block中结束。然后,下一个文档从不获取,你有一个无限循环。
修改强>:
replaceItemValue 方法通常返回NotesItem,但不返回NotesXspDocument!
答案 1 :(得分:1)
我不确定您的数据库中有多少个文档。我看到两个潜在的问题:
1) db.search(我认为)不建议使用,因为它会导致性能问题。 不确定它是否与您的问题有关,而不是使用db.search我建议使用其他东西,例如。 G。具有与您的查询匹配的选择公式的视图。
2)如果您的数据库有许多与您的查询匹配的文档,则Java代码可能会导致问题。据我所知,你不应该使用java获取超过10k的多米诺骨牌对象。
答案 2 :(得分:0)
至少有两种方法可以调试它。
在服务器上安装XPages Toolbox。使用CPU分析器查看花费最多时间的内容。
http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&name=xpages%20toolbox
将代码重写为java,在服务器上启用调试并远程调试。 这是一个视频,告诉你如何做到这一点:
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Debug_Java_for_XPages_in_NSFs