Hi,
see
https://www.mbs-plugins.com/archive/2019-12-06/Formatting_and_error_checking_/monkeybreadsoftware_blog_filemaker
You may be designing databases, which store FileMaker calculations in fields to
evaluate them later. This may be to feed the MBS FileMaker Plugin functions
like HotKey.SetEvaluate, MenuItem.SetEvaluate,
SyntaxColoring.AddContextMenuCommand or one of the many others which take an
expression to evaluate in case something happens.
Format
Now if your database runs on a Mac and MBS FileMaker Plugin is installed, you
can use the syntax coloring of our plugin to format the formula, e.g. like this
script:
If [ MBS( "IsMacOS" ) = 1 ]
Set Variable [ $r ; Value: MBS( "SyntaxColoring.Format";
EvaluateTest::Expression; 0 ) ]
Set Field [ EvaluateTest::Expression ; $r ]
End If
The check For MacOS is to make sure we call it on MacOS and to check if the
plugin is installed at all. If the plugin is missing, this will fail as a
condition and then the format function is not called. The SyntaxColoring.Format
function uses the syntax coloring definitions the plugin uses for formatting
the expressions in the calculation dialog and you can change those. See
fmSyntaxColorizer or other databases which provide an interface on the MBS
Plugin function SyntaxColoring.AddTag to register those rules.
Check Error
To check for errors you may want to use EvaluationError on the result of
Evaluate function. But in the expression you may want to have a Let wrapped in
an If(false; ...) expression. The If makes sure the code will go through the
parser for the syntax check, but not actually run. The Let with the expression
makes sure we wrap your expression properly and you don't mess with the If. In
case there are comments in the expression, the ¶ will block any // comment
causing an error.
Finally we put all in a script to run when expression field is saved and we put
the error number into a field in our script:
Set Error Capture [ On ]
Set Variable [ $expression ; Value: "If(false; Let(r=" &
EvaluateTest::Expression & "¶;0))" ]
Set Variable [ $e ; Value: EvaluationError(Evaluate($expression)) ]
Set Field [ EvaluateTest::Error ; $e ]
To get a list of the error codes possible, please check the list in the
documentation in the 1200 to 1225 range.
Sincerely
Christian
--
Read our blog about news on our plugins:
http://www.mbsplugins.de/
_______________________________________________
[email protected] mailing list
%(list_address)s
https://ml-cgn05.ispgateway.de/mailman/listinfo/mbsfmplugin_monkeybreadsoftware.info