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 wikiのRobert Perronさんの記事:Simple_error_checking_in_server-side_XPages_JavaScriptが参考になります。