前回の投稿に続き、Lotus Notes 8.5.1からxPagesをComposite ApplicationにComponentsとして追加できる機能がついたので、早速試してみたのですが、Dblookupで他のデータベースからドキュメント情報を取得することは出来るけど、いざ、そのドキュメントをオープンさせようとしたときに、上手いこといかない、という問題に躓いたので記しておきます。
実際、なにが上手いこと行かなかったかというと、
- http:// のプロトコルでリンクを手前で生成しているような場合に、Lotus NotesはWebブラウザで開けようとするが、認証をもう一度求められてしまう。
- リンクを参照パスにしても、Proxyエラーや、404エラーとなってしまって開くことが出来ない。
で、どうするのかな~と思い調べてみると、答えはxPagesのブログに有りました。
?OpenXPage has been added as a supported parameters for the notes:// protocol to launch an XPage in the Notes client.
引用元: What’s New For XPages in 8.5.1 – XPages Blog – The XPages Blog.
Lotus Notes 8.5.1 のxPagesの新しい機能紹介の投稿なんですが、
Notes ClientでxPageをランチするために notes:// プロトコルの?OpenXPages というパラメータをサポートしました。
ということらしいので、自分の探していたのはこれかも?!と思い試してみたら見事に動きました。
自分の例では、
Link Core ControlのOptionsで「Link type」を「URL」にして、以下のようなComputed Valueで上手くいきました。
return “Notes:///88257656006337D3/content.xsp?OpenXPage”
余談ですがxPagesをComposite ApplicationのComponentとして使いたい場合は、極力xPagesで用意されたCore Controls等を使って作っていくのが近道っぽいです。もちろんThemeなども。
自分はxPagesのSourceタブからhtmlコードやCSSファイルをガツガツ埋め込んでいっていたので、Componentにしたとき、ほとんど動かず、結局かなり作り直すはめになっちゃいました・・・(涙)
追記:12月16日2009年
Domino Designere URLs for xPgages というエントリーがDomino Designer Wikiに追加されてます。
http://www-10.lotus.com/ldd/ddwiki.nsf/dx/Domino_Designer_URLs_for_XPages
タグ: Lotus Domino Designer, Lotus Notes, xPages
Posted by Viruke on 11月 11, 2009 in
Lotus Domino Designer,
xPages
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で動かす言った場合、このようなケースではただエラーが発生するので、丁寧なコードを書いていないとデバッグ作業は思いのほか時間がかかってしまいます。
タグ: Lotus Domino Designer, Lotus Notes, xPages
Posted by Viruke on 11月 6, 2009 in
Lotus Domino Designer
自分の使っているLotus Notes 8.5.1のメールで「All Documents」にフォルダ情報が表示されているのが不思議で、Designerで($All) view を開いてみたら「Folder」columnに@WhichFolders ってのが記載されていました。
@WhichFoldersなんて便利なコマンドあったっけ?と思ってググってみました。
Knowing which folder a document is in – @WhichFolders
Steve Castledine 8 September 2008 09:28:53
Sometimes people don’t see the release notes (I’m not saying this is definitely in them), or new formula etc can be forgotten, but a nice new formula in 8.5 was @WhichFolders which can be used to determine, surprisingly, which folder the current document is in.
To see it in action, it was added to the mail template, all documents view.
Funny, I’m not even sure this made it into the designer help db, I will have to check.
引用元: Knowing which folder a document is in – @WhichFolders.
Lotus Notes 8.5から出来たFormula だったんですね。
しかもドキュメントにはなっていないみたい。 隠しコマンド?
ちなみに、@WhichFolders を調べているときに発見した別のブログ「Interesting undocumented formulas」( http://lotus-blogs.blogspot.com/2009/01/interesting-and-undocumented-formulas.html )
にもいろいろと紹介されています。
さて、こんな便利なコマンドが@Formulaには用意されたみたいなんですが、自分への命題は「Lotus Notes C API」を使って同等の機能を実装できるか?
これが、簡単なようで上手くいかない。 IMAPコマンドをメールDBに対して掛けてやると$FolderRefが埋め込まれるのでこれによってフォルダ階層を割り出すことが可能になるのだが、もうちょっとスマートな方法を模索中・・・
と、またまた、ためにならない投げっぱなしな投稿でおわり。
タグ: formula, Lotus Domino Designer, Lotus Notes, Notes C API