Lotus Notes XPages Tips (3) JavaScriptのデバッグ方法

今回は、サーバーサイドのJavaScriptのデバッグ方法についてです

サーバーサイドのJavaScriptの場合、alertなどの表示系の命令が使用できません。
また、処理の途中でブレイクさせ、変数、オブジェクトの内容を確認するなんてことも出来ないようです。
エラーメッセージも貧弱で、デバッグには非常に苦労しています。
もっと良いデバッグ方法は無いか模索中ですが、とりあえず、今行っている方法を紹介したいと思います。

◆プレビューについて

・基本的には「ノーツクライアント」を使ってプレビューしてます。

HTMLの確認が必要な場合はIEを使いますが、エラーメッセージが表示される
ノーツクライアントを利用してます。
「アプリケーションのプロパティ>XPageタブ>デフォルトのエラーページを表示」にチェックを入れると、
IEでもノーツクライアント並みにエラーメッセージを表示させることが出来るようですが、
ノーツクライアントで十分事足りてます。

◆変数、オブジェクトの確認

・「計算結果フィールド」を使って確認しています。

一時的に計算結果フィールドを、XPageの適当なところに配置します。
そして、確認したい変数や、文を記述してプレビューさせ、想定している値が出るか確認しています。

◆エラー発生時の場合

・「try ... catch」を指定します。

XPageのどこか一つでもエラーが発生してしまうと、「エラーが発生」したことが通知されるのみで、
エラーの発生部分以外の結果を確認することができません。
そこで、エラーの発生している文にtry...catchを設定すると、エラーメッセージを計算結果フィールドの値
として表示させたり、その後の処理を継続させたり出来ます。

例)計算結果フィールドでエラーが発生した場合
変更前: Dc1.getCount();
   //文書コレクションの件数を返す式であるが、変数Dc1が見つからずエラー発生

変更後: try{Dc1.getCount();}catch(e){e.toString()}
   //エラーメッセージを返して、後続の処理を継続してくれます

例)ボタンでエラーが発生した場合

変更前: var Dc1 = Dc2;
   //変数をコピーする式であるが、変数Dc1が見つからずエラー発生
   計算結果フィールドとことなり、エラーメッセージが表示出来ない  

変更後1: 
     try{var Dc1 = Dc2;}
     catch(e){requestScope.status = e.toString()}

   //エラーメッセージをリクエスト変数に出力します。このリクエスト変数を表示する計算結果フィールドを
   適当に配置すればエラーメッセージを確認することができます

変更後2: 
     try{var Dc1 = Dc2;}
     catch(e){
     var log = session.createLog("test");
     log.openFileLog("test.log");
     log.logAction(e.toString());
     }

   //エラーメッセージをファイルに出力してくれます
    この例ではC:\Program Files\IBM\Lotus\Notes\test.logにメッセージが出力されます

ご参考:
Lotus Notes and Domino Application Development wikiRobert Perronさんの記事:Simple_error_checking_in_server-side_XPages_JavaScriptが参考になります。

コメントを残す

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