Core FileMaker Blog

Keep up to date with CoreSolutions

Simple Boolean Toggle

Toggle Switch

I’m going to keep today’s blog post simple and to-the-point.

It’s pretty common in programming to need to toggle between 2 states (boolean). FileMaker Pro however, doesn’t provide a boolean field, nor does it provide a function that will toggle a number field from a 0 to a 1 or vice-versa. Because of this, I’m guessing that most FileMaker developers end up using “If” statements to accomplish this kind of thing. While using an “If” statement in a situation like this isn’t going to be all that expensive (clock-cycle wise), I’d like to encourage developers to think a little outside of the box. There’s almost always more than one way to accomplish what it is you’re trying to do, and toggling boolean values like we’re doing here is certainly no exception.

Here’s one way that this toggle can be handled:

Abs ( $$booleanValue - 1 )

That’s it!
Subtract one from the current value, then take the absolute value of your result.
If your value was a 0, then we’ll subtract one from it… giving us -1. Then we take the absolute value of that, and voila… we’re back to 1.
If your value was 1, we subtract one from that, and we’re down to zero. Taking the absolute value of 0 won’t change anything here.

 

Leave a comment

5 comments

  • John
    John 16 December 2016 Report

    I don't quite follow this example.
    //* Toggle Boolean [ fieldName ] --- Set Variable [$fieldName ; Value:Get (ScriptParameter)] Set Variable [$fieldValue; Value:GetField ( $fieldName )] Set Field By Name [$fieldName; Abs ($fieldValue - 1)]
    *//

    What part is the code. Can you give another example?

    Comment Link

  • Matthew Leering
    Matthew Leering 16 September 2013 Report

    Yes, absolutely!
    I would say that the 'not' trick is probably the simplest and clearest way to do it.
    I know of some people toggling using XOR as well.
    I always find it interesting to see different approaches to the same problem.

    Comment Link

  • Jeremy
    Jeremy 13 September 2013 Report

    Isn't it simpler to just use this?

    not $booleanValue

    More importantly, I think this better expresses the developer's intent.

    Comment Link

  • Matthew Leering
    Matthew Leering 04 September 2013 Report

    Thanks for sharing this Marc;
    I love this kind of portable/modular code.
    We use scripts like this in our projects quite frequently,
    and even label script parameters in the script name using the same style you did.
    :)

    I should note that there is a distinction (albeit subtle) between your script, and my code example though.
    The script that you have provide will toggle the value of a field, whereas the code example I provided will toggle the value of a global variable.

    Comment Link

  • Marc Wood
    Marc Wood 03 September 2013 Report

    Here is a script using your calculation to toggle a boolean value in FileMaker, that can be pasted into any file with no dependencies:

    Toggle Boolean [ fieldName ]
    ---
    Set Variable [$fieldName ; Value:Get (ScriptParameter)]
    Set Variable [$fieldValue; Value:GetField ( $fieldName )]
    Set Field By Name [$fieldName; Abs ($fieldValue - 1)]

    Use the GetFieldName function to pass the parameter, and the script won't break if the field name changes in the future.

    Comment Link

CoreSolutions Logo

London Office:
1-1615 N Routledge Park
London, ON N6H 5L6

Toronto Office:
2425 Matheson Blvd East
7th Floor
Mississauga, ON L4W 5K4

Toll Free: (800) 650-8882
London: (519) 641-7727
Toronto: (416) 410-8649
Email: This email address is being protected from spambots. You need JavaScript enabled to view it.

SUBSCRIBE

Click the 'Subscribe' button to sign up for news & software tips.

Beyond Software

Copyright © 2018 CoreSolutions Software, Inc. All Rights Reserved