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ブロックで終了します。次に、次のドキュメントがフェッチされず、無限ループが発生します。

EDIT : replaceItemValue
メソッドは通常、NotesItem を返しますが、NotesXspDocument の場合は返しません!

于 2012-11-22T07:28:43.250 に答える
1

データベースにドキュメントがいくつあるかわかりません。2つの潜在的な問題があります。

1)db.searchは、パフォーマンスの問題を引き起こすため、(私の意見では)使用することはお勧めしません。問題に関係があるかどうかはわかりませんが、db.searchを使用するのではなく、クエリに一致する選択式を含むビューなど、別のものを使用することをお勧めします。

2)データベースにクエリに一致するドキュメントが多数ある場合、Javaコードが問題を引き起こす可能性があります。私の知る限り、Javaを使用して10,000を超えるドミノオブジェクトをフェッチするべきではありません。

于 2012-11-21T20:19:25.913 に答える
0

これをデバッグするには、少なくとも 2 つの方法があります。

サーバーに 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 に答える