0

我正在搜索然后遍历结果。这导致我的代码被锁定,更糟糕的是,它锁定了该数据库以防进一步使用。即使在浏览器关闭后。似乎这个“锁定”在一段时间后被清除,直到我再次尝试我的代码。我将改变执行此特定任务的方式,但我很好奇导致此锁定的原因。

     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();
4

3 回答 3

4

以下行...

var item:NotesItem = document1.replaceItemValue("DocIds","AAAA");

...返回void,您的变量item未定义。用这个的下一个操作

item.appendToTextList(doc.getNoteID());

引发错误并始终在您的catch -Block 中结束。然后,下一个文档永远不会被提取,你有一个无限循环。

编辑
replaceItemValue方法通常返回 NotesItem,但不返回 NotesXspDocument

于 2012-11-22T07:28:43.250 回答
1

我不确定您的数据库中有多少文档。我看到两个潜在的问题:

1) db.search (在我看来)不推荐使用,因为它会导致性能问题。不确定它是否与您的问题有关,而不是使用 db.search 我建议使用其他东西,例如具有与您的查询匹配的选择公式的视图。

2)如果您的数据库有许多与您的查询匹配的文档,则 java 代码可能会导致问题。据我所知,您不应该使用 java 获取超过 10k 的多米诺骨牌对象。

于 2012-11-21T20:19:25.913 回答
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

于 2012-11-22T06:12:20.823 回答