New in MBS FileMaker Plugin 13.5

In this article we want to introduce you the new functions from the MBS FileMaker Plugin in version 13.5.

ListDialog

A very cool new feature is in the ListDialog Component. Because we now have checkboxes for the list dialog. These can be displayed using the ListDialog.SetShowCheckboxes function. You can now check boxes either manually or by script. If you want to check the boxes by script, use the ListDialog.SetCheckedfunction. Here you enter the list index of the row you want to check followed by the value. 1 for check and 0 for do not check. You can use the ListDialog.GetCheckedfunction to determine whether a field in a particular row is checked or not. To do this, enter the list index in the parameters and the corresponding value will be returned. We can also use the ListDialog.GetCheckedTags and ListDialog.GetCheckedTitles functions to obtain a list of the checked tags and titles. If you use the filter in the dialog, the boxes remain checked even if they are not currently visible and are returned in these lists.

Phidget

In the last release we already introduced our new component Phidget, which allows you to connect input-output devices of the brand Phidget Inc. with FileMaker and to manage the incoming and outgoing data. For this release we have completely redesigned the script trigger handling. They now work better with short successive events.
We now also have a function with which you can remove script triggers that have been set. This new function is called Phidget.ClearScriptTrigger.

JSON

New in the plugin is the possibility to work with JSON Path. With JSON.Query you can perform a JSON Path query. For example, if you have a JSON in which there are different objects in an array that describe different books with the keys category, author, title and price, then we can use the following code to determine the book whose author begins with „Evelyn“:

MBS("JSON.Query"; json; "$.store.book[?(@.author =~ /Evelyn.*?/)]"; 0)

Another new function that also uses JSON Path is the JSON.Replace function. It searches for all values that match the JSONPath expression and replaces them with the specified value. If we stay with our example, we would use this step to find all books with the title A Wild Sheep Chase and replace the price with 123.

MBS( "JSON.Replace"; json; "$.books[?(@.title == 'A Wild Sheep Chase')].price"; 123 )

Since this release, you can now also use JMESPath for your JSON documents. JMESPath is a language with which you can modify and search your JSON objects. You can find out more about JMESPath here: https://jmespath.org/
With the new JSON.Search function, you can, for example, filter the city names from several objects that describe cities in the USA whose objects have the state with the initials WA. These names should then be output with the key WashingtonCities separated by a comma

MBS( "JSON.Search"; "{ "locations": [ {"name": "Seattle", "state": "WA"}, {"name": "New York", "state": "NY"}, {"name": "Bellevue", "state": "WA"}, {"name": "Olympia", "state": "WA"} ]}"; "locations[?state == 'WA'].name | sort(@) | {WashingtonCities: join(', ', @)}")

We also have the new function JSON.Flatten that flattens a json object or array to a single depth object of key-value pairs. The corresponding function JSON.Unflattenunflatten that object back to the original json.

XML

With the new functions from the XML area, we can set and query extra field definitions. These are SQL field definitions, which we include in creating a table. Here you can see the creation of two such fields to which we assign properties like this

Set Variable [ $r ; Value: MBS("XML.Import.SetExtraFieldDefinitions"; "ImportRun DECIMAL DEFAULT 1¶ImportLabel VARCHAR DEFAULT 'test'") ]

Matrix

With the new Matrix.Lookup function, we now get back a value at a specific position in the matrix or the default value defined in the parameters. This means that there is no error if we query an incorrect value, because we have a fallback value.

Preview

In version 13.3 we already introduced the preview, with which you can view a PDF preview under Mac and Windows. Now the component gets the new function Preview.SetFocus. This function allows you to set the focus on this element using a script. Previously, this was only possible by clicking on the element.

DynaPDF

We also have a new function in DynaPDF. With the function DynaPDF.CreateGeospatialMeasure we create a geospatial measure dictionary. This kind of measure dictionary can be used to convert PDF units to geographic coordinates. A measure dictionary is used by the measure tool of Adobe's Acrobat and by other PDF viewers which contain a PDF compatible measure tool.

Window

There are also new features in the Window area. You can now determine the parent window of a card window or dialog window. The Window.Parent function gives you the reference number of the parent window and you can then query the title of the parent window using the Window.GetTitle function.

For Windows users, this component has another surprise in stock: you can now add a window to the taskbar with Window.AddToTaskbar. With Window.RemoveFromTaskbar you can then also remove windows again.

Plugin

We have two new functions in our component plugin. If you use the plugin frequently, you have probably come across functions that generate a reference number. These references must be released again at the end of their use so that they do not block the memory. With the Plugin.ObjectCounts function, you receive a JSON and can see where and how many references have not yet been released.

Another function we have added is the Plugin.UsedFunctionCounts. This function shows us which MBS function has been used how often. Here you can see a sample output.

For Mac users, we have extended the direct jump function that we previously had for mail addresses and links in the comments, so that you can now also jump to the beginning, the end or to a specific line within a script. This function is particularly useful for large scripts and is often used for documentation.

Mac and iOS

There are also new features for Mac and the iOS SDK

AVRecorder

Since MacOS Sonoma introduces reactions for video recording, you can configure this via AVRecorder functions. When running on macOS 14 or iOS 17, your application can check for effect availability and beside gesture also run effects via script via AVRecorder.PerformEffectForReaction function.

Files

We have added two new functions to the Files component for working on Mac and iOS. With the Files.IsApplication function, we can now check whether a path refers to an application. The Files.IsPackage function determines whether the path refers to a package.

We hope you will also find some interesting new features. We wish you a lot of fun with MBS FileMaker Plugin Version 13.5. If you need a license or have any questions, please contact us.

See also

1 Like

Another feature request here to help make the debugger more usable and user-friendly.

The FileMaker assigned shortcuts for the debugger are nasty and unintuitive - the function keys. Furthermore, most keyboards these days have primary uses for these keys other than function, and you need to hold a modifier for them to work.

Can MBS intercept another shortcut and map it to the actual shortcut? I was thinking something like this:

Step Over : Shift + Right Arrow (F5)
Step Into: Shift + Down Arrow (F6)
Step Out: Shift + Up Arrow (F7)
Set Next Step: Space bar ( shift+cmd+F5)
Halt Script: End (Cmd+F8)
Continue: Enter (option+F8)

These just seem so much more intuitive and easier to use than the debuggers existing convoluted keys.

The reason for shift modifier in mine instead of just arrows is just to allow you to use up/down arrow freely if you want to scroll through a script to then set a break point.

Another thing the debugger doesn't do well is w hen you use page up/down, it does move the script up or down but it does nothing to set the highlighted script line. If you wanted to page down a script to set a break point, you still need to reach for the mouse. If page up/down could also highlight the top row that would be good (though this one would be pretty low priority).

--

I realise the above can probably all be done within keyboard maestro but not everyone has this and it would take a bit of set up.

Unfortunately, the script debugger is some kind of special window in FM which does not warrant it's own menu set, and so whenever it is active the menu set remains that of the layout, which I assume may be why they use such random shortcuts so as to not interfere with any others.

1 Like

Great observations. The menu will change though if you open the script from the debugger.