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;