[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 では発生しません。)
コメント
コメントはありません
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。