xPages Componentを使ってLotus Notes Client 8.5.1上でxPagesを表示させる新しい機能を試したときに、自分のxPagesを以下のようにチューニングしないと上手く動かなかったので、注意が必要になります。

症状

xPagesをブラウザで見るとうまく表示されるのに、Notes Clientで見るとDblookup()でエラーが発生する。

状況

サーバのComposite Applicationを直接開いたときにエラーが発生するが、ローカルレプリカを開いたときは発生しない。

原因

@Dblookup()の1st パラメータの dbName が正しく設定されていなかった。

詳細

以下のコードではDblookup()が正常に値を返しません。

<![CDATA[#{javascript:var db = [“” ,”folder/cms.nsf”];
var viewName = “(vwTestLookup)”;
var key =”Keyword”;
var value = “”;
var value = @DbLookup( db , viewName , key , 6 );
var retValue = “”;
if(!@IsError(value)){
for( var i=0; i< value.length && i < maxEntry; i++){
retValue += “<li>”+value[i]+”</li>”;
}
}
else{
retValue = “Error happened in DbLookup(). “;
}
return “<ul>”+retValue+”</ul>”;}]]>

原因は一行目の

var db = [“” ,”folder/cms.nsf”];

にありました。 Webブラウザから見る場合はサーバ自身のfolder/cms.nsf データベースを参照してくれるので、問題なく期待した動作をするのですが、Notes Clientで開くと、ローカルPCのfolder/cms.nsfを参照しにいってしまうため、レプリケーションがない環境ではエラーが発生してしまいます。

対処法

Dblookup() のdbName Arrayの 1st elementにサーバネームを渡すようにする。

var db = [database.getServer() ,”folder/cms.nsf”];

としてやれば、どちらも動くようになります。

ちなみに、xPages Componentと同じDBを参照する場合は、

var db = @DbName();

としてやるだけでOKです。

複雑な処理をしている既存のxPagesをComponentで動かす言った場合、このようなケースではただエラーが発生するので、丁寧なコードを書いていないとデバッグ作業は思いのほか時間がかかってしまいます。

About ktatsuki

ktatsuki

ケートリック株式会社 代表をしています。 が、根っからのエンジニア脳です。 IBM Notes/Dominoの開発を得意としますが、 C++ / Java / PHP / Javascript などの言語を使ってWEBアプリ、iPhone / Android アプリ開発などをしたりします。 XPagesの仕事をしているとテンションが通常の1.25倍ぐらい高くなります。 I am owner of KTrick Co., Ltd. and Notes/Domino developer. IBM Champion for 2015 - 2017. I am interested in web application development and preferred languages are Notes/Domino, C++ / Java / PHP / Javascript.

コメントを残す

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