Takenoff Labs

Lotus Notes/Domino に関する Tips や、クラシックの名曲などを紹介します

[Notes/Domino] @CheckFormulaSyntax の問題点

汎用的な処理を作成する目的で、わたしはわりと設定文書に@関数式を設定できるようにすることが多いです(で、その値を Evaluate や @Eval で評価する感じ)。多少遅くはなりますが、最近の PC は高速ですから、パフォーマンス的に問題ない場合が多いです。

で、このような場合、設定文書側で @CheckFormulaSyntax を使って、式の文法チェックを事前にしておくと、とても便利です(実行時のエラーを減らせるので)。なので、よく使っておりましたが、使っていくうちに、問題点が2点ほど発覚しました……orz (まだあるかもしれませんが)。以下、その問題点を列挙してみます。

2KB 以上の式がチェックできない

2KB 以上の式をチェックしようとすると、「Operation Failed」が出て、正しい式でも一律エラーになってしまうようです。制限があるにしても、2KBって少なすぎ……。せめて10KBくらいまでは OK にしてほしかった……orz

こればっかりはどうにも回避しようがないので、昔ながらの式フィールドを使うしかないかも(文書の場合限定ですけど)。他の回避策としては、@SetField や @MailSend などの副作用のある@関数を @Do に変換して無害化してからスクリプトの Evaluate で無理矢理チェックする、という手段もありますが(もちろんエラーがあるかどうかしか解らない)、こんな無茶な方法、良い子のみなさんは真似してはいけません(^^;

エスケープされた「\」を解釈できない

式ではダブルクォーテーションのエスケープに「\」が使われますが、「\」自体を表示するには「\\」のように、「\」を2つ続けて記述します。が、この「\\」を、@CheckFormulaSyntax では解釈できないようです。

たとえば、以下のコードは文法的に正しいはずですが、エラーとなってしまいます。

@CheckFormulaSyntax(\"\\\")

これを回避するには、「\\」を「\」に置き換えてからチェックすればいい……と思いきや、「\\\\」を置き換えると「\\」になってしまい、やっぱりエラーとなってしまいます。ここはおとなしく「\\」を NULL に置き換えてからチェックするほうが無難かと思われます。(その代わり、「\\」の文法エラーは検出できませんが。)

ちなみに、この問題、@Eval でも発生するみたいです……。(スクリプトの Evaluate では発生しません。)

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
読み込み中...

Navigation

トラックバック

トラックバックはありません

コメント

コメントはありません

※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。





(以下のタグが使えます)
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

For spam filtering purposes, please copy the number 9993 to the field below:

^
×