Lotus Notes XPages Tips (4) ページ間の受け渡し

今回は、オブジェクトのページ間の受け渡しについてです。

変数を他のページで使用する際は、セッション変数を使います。

文書コレクションなどのオブジェクトも、同様にセッション変数で受け渡すことができれば
有りがたいのですが、残念ながら出来ません。(IBMさんに確認済)

ヘルプをみても「オブジェクトはセッション変数で受け渡せない」とはっきりと書いてないので
しっくりこないんですが、テストしても受け渡し出来ないため、納得するしかないと思ってます。

じゃあどうするか...

全文検索して作成した文書コレクションを、他のページでもう一度、全文検索して作成する方法もありますが、
応答時間を考えると憂鬱になります。件数が極端に少なければこの方法もありかな...

で、考えたのが「配列」を利用する方法です。

文書コレクションからUniversalIDをセッション変数の配列に書き出しておきます。
別ページで、このセッション変数の配列を読み込み、文書コレクションを作成してやります。

この方法ならば、多少のオーバーヘッドはあるものの、再度全文検索して文書コレクションを作成するより
応答時間が期待できます。

サンプルソースを記載しておきます。

◆文書コレクションを配列に変換
sessionScope.list = new Array;
var Dc1 = database.getAllDocuments();
var doc = Dc1.getFirstDocument()
for(i=0;i<Dc1.getCount();i++){
? sessionScope.list.push(doc.getUniversalID());
? doc = Dc1.getNextDocument(doc);
}

◆配列を文書コレクションに復元
var Dc2 = database.FTSearch("");
for(i=0;i<sessionScope.list.length;i++){
? var doc = database.getDocumentByUNID(sessionScope.list[i]);
? Dc2.addDocument(doc);
}

◆配列の表示
var str = "";
for(i=0;i<sessionScope.list.length;i++){
? var str = str + i + "=" + sessionScope.list[i] + " |\n ";
}
return str;

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です