@CheckFormulaSyntax (式言語)

コメントアウトされた式言語コードのブロックにエラーがあるかどうかを調べます。

注: この @ 関数は、Release 6 で新しく追加されました。

構文

@CheckFormulaSyntax(formulaText)

パラメータ

formulaText

文字列。エラーがあるかどうかを調べる、コメントアウトされた式コードです。コードをコメントアウトするには、式コードを中カッコ ({}) で囲みます。

戻り値

errorInformation

文字列または文字列リスト。

使用法

チェックする式は「コメントアウト」されません。{) は引用文字です。 この関数に対する引数は、コメントではなく、チェックされる式が含まれた文字列です。文字列引数を取る他の関数との違いはありません。より一般的な二重引用符ではなく { } が例に使用されている理由は、引用する文字列に二重引用符が含まれる可能性があるためです。{ } を使用すると、文字列内の引用符が「エスケープ」されるのを回避できます。値がハードコーディングされるのではなくフィールドから読み取られる場合、これは問題になりません (大半のアプリケーションでは値がフィールドから読み取られます)。

この @関数から報告されるのは、ランタイムエラーではなくコンパイルエラーです。ランタイムエラーが生成されるのは、例えば関数に渡された引数が足りないときです。この関数は実行時に、@Eval 関数を使用して文字列式を実行する場合に特に便利です。この関数を使用すると、@Eval に指定した任意のテキストの構文を最初にチェックできます。

注: エラーがないかテストする際には、@CheckFormulaSyntax(...) = "1" 式を使用しないでください。この理由は、返されるエラー情報の要素に「1」が含まれていると (例えば 1 行目にエラーがある場合など)、戻り値が True になるためです。

  1. 次の例を文字列フィールドのデフォルト値として使用すると、"Unknown @Function":"4":"1":"60":"8":"@MailSnd" が返されます。
    formula := {subject:="test";
    remark:="ok";
    SendTo:="Darrin Dogs/Star";
    @MailSnd(SendTo;"";"";subject;remark;"ID";[Sign]:[Encrypt])};
    @CheckFormulaSyntax(formula);
  2. 次のコードを文字列フィールドに対するデフォルト値として使用すると、「1」が返されます。
    formula := {subject:="test";
    remark:="ok";
    SendTo:="Darrin Dogs/Star";
    @MailSend(SendTo;"";"";subject;remark;"ID";[Sign]:[Encrypt])};
    @CheckFormulaSyntax(formula);
  3. 次の入力確認式は、ユーザーがテキストフィールドに有効な式を入力したかチェックします。
    @If(@ThisValue= ""; 
    @Return(@Failure("You must enter a formula here.")); 
    0);
    -tmp[1] :=  @CheckFormulaSyntax(@ThisValue);
    @If(_tmp[1] = "1";
    = "1"; 
    @Success; 
    @Failure("Invalid formula: " + -tmp[1] + " on line " + -tmp[2]))