2024/06/17

すべての LotusScript をリコンパイルは ”すべて” ではない !?

このブログでは、汎用的な関数など共通の関数やクラスなどはスクリプトライブラリで管理し、各アプリケーションではそれを利用する方法をお薦めしています。プログラムの独立性の向上や分業化など開発効率が上がると考えているからです。

今回はスクリプトライブラリを使用した環境で、気がついた障害(?)と注意点についてまとめます。


すべての LotusScript をリコンパイル

Domino デザイナーのメニューには[ツール]-[すべての LotusScript をリコンパイル]があります。一般的に、スクリプトライブラリに変更があった場合など、LotusScript のプログラム全体をチェックしたい場合に利用します。実行すると開発中のアプリケーション内のすべての LotusScript に対して文法的な整合性チェックを行います。

ライブラリの新バージョンがリリースされてそれを開発中のアプリに組み込んだ時、ライブラリ内の関数のインタフェース(引数など)を修正した場合に利用すると便利な機能です。


発見した問題と再現方法

先日、この『すべての LotusScript をリコンパイル』という機能が、すべてのコードを対象にしていないという問題を発見しました。

まずは、現象の再現です。

次のような単純なスクリプトライブラリとそれを利用するビューのアクションボタンを作成します。


プリビューして、ボタンをクリックすると ”テスト” とメッセージが表示されます。当たり前ですが...

この状態で、スクリプトライブラリを下記の通り、引数を削除して、メッセージを固定の文字列に変更して保存します。

Option Declare

Public Function ShowMsg()
   MsgBox "テスト", 64
End Function

この状態で「すべての LotusScript をリコンパイル」を実行します。引数が合わないので文法エラーとなるべきところなのですが、正常に終了してしまいます。

ただ、コンパイルが成功したからと言って、ノーツからそのボタンを押すとエラーが発生します。

エラーメッセージには、引数が正しくないことと関数名が表示されていますので、この現象はコンパイルの機能に問題があるということになりますね。


問題の詳細と対策

調査した結果この現象は、Notes 6 のころから発生している既知の問題(問題報告番号 GFLY5VWM3C)で、現在(14.0)でも発生するそうです。詳細が以下のサポート情報に掲載されていますのでご確認ください。

すべての LotusScript をリコンパイルを実施してもアクションボタンの LotusScript が精査されない

Workaround として、エラーが出るべき設計要素をデザイナーで編集し、再保存するタイミングでエラーが検知されるので取り除く、と紹介されています。設計数が多い時には少々つらい対策ですね。

現時点で開発者が注意すべきは「すべての LotusScript をリコンパイル」機能を過信しないことになります。今回事例にあげた引数の変更以外に、サポート情報にある関数名の不一致なども検知できないようです。アプリ利用時に文法エラーのような基本的なエラーに出くわした場合、この問題を疑ってみるべきかもしれませんね。

ちなみに、修正は『問題の重要度やリクエスト数など複数の要素で勘案される』そうです。開発ツールとして恥ずかしいレベルの問題と思うので、勘案している場合じゃないぐらい重要度は高いと感じますけどね...


0 件のコメント:

コメントを投稿