0

次のコードは、XPage 上のスクリプト オブジェクトです。データベース内のすべてのフォームの配列をループし、フィールド「ACIncludeForm」を含むすべてのフォームを探します。私の方法は機能しますが、計算に 2 ~ 3 秒かかるため、XPage のロードが非常に遅くなります。私の質問は - これを達成するためのより良い方法はありますか? sessionScope 変数が null かどうかを確認するコードを追加し、必要な場合にのみ実行し、ページが 2 回目に読み込まれると 1 秒以内に読み込みます。したがって、私の方法は実際に多くのプロセッサ時間を消費します。

var forms:Array = database.getForms();
var rtn = new Array;
for (i=0 ; i<forms.length; ++i){
    var thisForm:NotesForm = forms[i];
    var a = thisForm.getFields().indexOf("ACIncludeForm");
    if (a >= 0){
        if (!thisForm.isSubForm()) {
            if (thisForm.getAliases()[0] == ""){
                rtn.push(thisForm.getName() + "|" + thisForm.getName() );
            }else{
                rtn.push(thisForm.getName() + "|" + thisForm.getAliases()[0] );
            }
        }
    }
    thisForm.recycle()
}
sessionScope.put("ssAllFormNames",rtn)
4

2 に答える 2

2

1 つの方法は、自分でフォームのインデックスを作成することです。たとえば、すべてのフォームを取得するエージェント (LotusScript または Java) を作成し、フォームごとに、たとえばフォーム名を含むフィールド「フォーム」と、すべてのフィールド名を含むフィールド「フィールド」を含むドキュメントを作成します (32K に注意してください)。限界)。

次に、これらすべてのドキュメントを表示し、最初の列に「フィールド」フィールドの値を含むビューを作成して、このフィールドの各値がこのビューに 1 行を作成するようにします。

このようなビューがあれば、XPage から @DbLookup を簡単に作成できます。

フォームが変更された場合、エージェントを再実行してインデックスを再構築するだけで済みます。@DbLookup はかなり高速である必要があります。

于 2013-11-05T06:20:50.060 に答える
0

フォーム リストをstaticJava クラスのフィールドに配置します。それは長い間そこにとどまります(おそらくhttpブートまで)。私の経験では、applicationScope値は 15 分で消えます。

于 2013-11-04T20:14:59.780 に答える