Interactive FileMaker Containers are Webviewers

Did you notice that the interactive Containers in FileMaker are really Webviewers?

Even a simple picture is shown using a Webviewer with an IMG tag:
<html style="height: 100%;">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            body {background-color:rgba(100%,100%,100%,1);}
    <body style="border:0; margin:0; padding:0; overflow: hidden; height: 100%; ">
        <img src="file:////Volumes/Mac/Users/cs/Library/Caches/FileMaker/ContainerCache/Interactive_Container_Webviews/5B5E9D4AA552A54E72180807B75548D6/LocalThumbs/45/7D/15B8790A/D6942AC2/400D5012/8E5DW/968x645.jpg" width="484" height="323" style="position:absolute; top:53px; left:0px;">
We get the html text using the WebView.GetHTMLText. Please define a name for the container control, so you can reference it later in the Webviewer calls. (more)

Last week for early bird tickets for MBS Xojo Conference

Last week to get early bird tickets for the conference. If you like to come, please check soon and make your reservations. On Saturday, the early bird price expires as well as our hotel room contingent.

Monkeybread Software is pleased to announce the MBS Xojo Conference in metropolitan Berlin, Germany. We will meet in the lovely Ellington hotel in the center of west Berlin. The hotel is near Kurfürstendamm, the Zoo and KaDeWe. Beside our two conference days, we will have an accompanying social program with our dinner event and optional two training days. For the evenings we will have a casual get-together in the hotel bar or beer garden.

We are happy to have Xojo engineers join our conference. Geoff Perlman, CEO of Xojo Inc. and other engineers will join us and present news about Xojo. Bob and Carol Keeney will share knowledge about reporting and databases, Yousaf Shah will show Raspberry Pi uses and talk about running a business. Jens Boschulte, our PDF specialist and creator of the DynaPDF library will be available for questions. And of course we have a few other well known Xojo developers coming.

The schedule:

May 3rd: Xojo Training in English
May 4th: Conference, first day with dinner event
May 5th: Conference, second day
May 6th: Xojo Training in German

See website for details:

Meine Bundestagspetitionen

Da ich für meine Firma viel Papierkram machen muss, hab ich letztes Jahr zwei Petitionen beim Bundestag eingereicht um die Arbeit etwas einfacher zu machen:

Petition 68061: Umsatzsteuer - Erhöhung der Grenze für Kleinstrechnungen in der UStDV

Petition 68062: Einkommensteuer - Grenzen für geringwertige Wirtschaftsgüter anpassen

Die erste zielt auf die Anforderungen an die Rechnungen. Ist schon oft passiert, dass wir Quittungen hatten über 150 Euro. Wenn man die Vorsteuer ziehen will, dann braucht man eine Rechnung mit der Anschrift vom Leistungsempfänger. Allerdings fehlt der oft und dann ist die Rennerei lästig. Wäre schön, wenn die Grenzen mal angepasst werden, so dass wir weniger oft bei Firmen nach einer ordentlichen Rechnung fragen müssen.

Beim zweiten geht es um die Abschreibungen. Die GWG Grenze liegt seit 60 Jahren bei 800 Mark, heute 400 Euro. Ich würde es begrüßen, wenn die Grenze mal angehoben wird um man direkt Sachen bis 800 oder 1000 Euro abschreiben kann ohne lange sich um die Abschreibung zu kümmern. Es gibt zwar die Möglichkeit GWGs als Paket über Jahre abzuschreiben, aber das ist ja auch Aufwand für die Buchhaltung.

Vielleicht habt ihr 5 Minuten um das mit zu zeichnen?
Gibt auch noch andere gute Petitionen auf

Query geolocation in FileMaker via MBS Plugin and Google Maps API

You may know that we have CLGeocoder functions in our plugins to query geo coordinates for addresses on Mac. But some users need it cross platform and I recently implemented a sample script for an user.
So first get a Google Account. It's always good to separate this, so best may be to make a new account for a project where you need maps. Best on the client, so Google knows where to complain about abuse.
Than go to the developer page for the google maps api. There you can request a new API key. Please copy the API key into the field of my example database. Or just hard code it in the script. Although for client projects, it's always good to have a preferences layout where you can set global settings like this and you don't need to check all scripts whether they use the key.
The script starts a CURL session, encodes the address to query into the URL and runs the query. The JSON is put in a field and the interesting values are extracted: Latitude, longitude and formatted address. Please check the script:

#Start new session

Set Variable [$curl; Value:MBS("CURL.New")]

#Set URL to load (HTTP, HTTPS, FTP, FTPS, SFTP, etc.)

Set Variable [$result; Value:MBS("CURL.SetOptionURL"; $curl; "" & MBS("Text.EncodeToURL"; Substitute(Google Maps API::Address to query; ¶; ", "); "utf8") & "&key=" & Google Maps API::API Key)]

#RUN now

Set Field [Google Maps API::Result; MBS("CURL.Perform"; $curl)]

#Check result

Set Field [Google Maps API::JSON; MBS("CURL.GetResultAsText"; $curl; "UTF8")]

Set Field [Google Maps API::Debug Messages; MBS("CURL.GetDebugAsText"; $curl)]

Set Variable [$httpResult; Value:MBS("CURL.GetResponseCode"; $curl)]

Set Variable [$status; Value:MBS( "JSON.GetPathItem"; Google Maps API::JSON; "status"; 1 )]

If [$status = "OK"]

Set Field [Google Maps API::Latitude; MBS( "JSON.GetPathItem"; Google Maps API::JSON; "results¶0¶geometry¶location¶lat"; 1 )]

Set Field [Google Maps API::Longitude; MBS( "JSON.GetPathItem"; Google Maps API::JSON; "results¶0¶geometry¶location¶lng"; 1 )]

Set Field [Google Maps API::Found; MBS( "JSON.GetPathItem"; Google Maps API::JSON; "results¶0¶formatted_address"; 1 )]


Set Field [Google Maps API::Latitude; ""]

Set Field [Google Maps API::Longitude; ""]

Set Field [Google Maps API::Found; ""]

End If


Set Variable [$result; Value:MBS("CURL.Cleanup"; $curl)]

I hope this helps you. The example database will be in the next plugin release. Or email me if you need a copy today.

Neujahrsempfang im K&K Verlag

Für alle FileMaker Anwender im Raum Hamburg:

Neujahrsempfang mit Sekt & Fingerfood

am 28. Januar 2017, 11.00 Uhr

Liebe Freunde des FileMaker Magazins,

jeder Jahreswechsel bringt neuen Schwung mit sich und der Blick richtet sich wieder erwartungsvoll nach vorn. Wir freuen uns auf das neue Jahr in der FileMaker Welt – am liebsten mit Ihnen zusammen!

Deshalb laden wir Sie herzlich zu einem kleinen Sektempfang in unsere Verlagsräume in Hamburg-Ottensen ein.

Bitte lassen Sie uns vorher wissen, ob wir uns auf Ihre Teilnahme freuen dürfen.

Auf ein schwungvolles, erfolgreiches und positives neues Jahr!

Klemens Kegebein
und das Team des K&K Verlags

Dieses Jahr komme ich auch nach Hamburg und zum Empfang. Man sieht sich!

Xojo Inc. is welcoming more pre-release testers

Xojo Inc. posted on the forum that they look for new beta testers:

This year, we are looking to expand our pool of testers for pre-release versions of Xojo. Over time we have been contacted by users- who do not have a Xojo Pro or Enterprise license- asking if there was a way for them to help test. Since more testing can benefit both the tester- and all of us as a community- we are expanding our testing group.

It should be noted that a Xojo Pro or Enterprise license today grants access to pre-release versions that we put up for testing, regardless of any criteria here. We are just allowing more opportunity for those without that license benefit to apply to join the testing group.

If you'd like to join, here's our basic criteria:

  • Be on the forum. If you're reading this- you've already met this one!
  • You have a current Xojo license.
  • You have filed a Feedback case. If you haven't filed a Feedback case before, but want to apply- go ahead and do so now. You can read about Feedback here:

  • If you meet these criteria and want to join the testing group, please email us at and let us know. Acceptance is at Xojo's discretion, and we won't necessarily be able to let everyone in immediately. But we'd love to hear from anyone who uses Xojo regularly and wants to help make it better for all of us in the community.

I hope they find a few new beta testers which try a few more edge cases!

PS: If you want to know what may need beta testing, check the XDC 2016 Recap with the roadmap.

MBS FileMaker Plugin 7.0 - More than 4400 Functions In One Plugin

Nickenich, Germany - (January 23rd, 2017) -- MonkeyBread Software today is pleased to announce MBS FileMaker Plugin 7.0 for Mac OS X, Linux and Windows, the latest update to their product that is easily the most powerful plugin currently available for FileMaker Pro. As the leading database management solution for Windows, Mac, and the web, the FileMaker Pro Integrated Development Environment supports a plugin architecture that can easily extend the feature set of the application. MBS FileMaker Plugin 7.0 has been updated and now includes over 4400 different functions, and the versatile plugin has gained more new functions:

New functions help you read details from X509 certificate files. You can read PKCS12 files and extract public and private keys as well as additional certificates. You can than write keys or certificates as PEM files and use them with our CURL functions.

Our new XML functions help you find nodes and attributes in XML text. You can extract text and subtrees. To process XML efficiently you can let the plugin read XML and put values in local variables in your script.

For CURL we added new functions to batch download files via FTP. Of course you can still query yourself the list of files via plugin in a directory and than download several files one after each other. But now we have options to do this all in one transfer and with the use of wildcards to specify which files to fetch.

Using the new function FM.AllowFileDragDrop you can allow users to drag and drop container with files from FileMaker to other applications, e.g. the Finder. And if needed you can switch this on/off on layout changes.

For DynaPDF we added new functions to query or set raw content of a page. You can rotate page templates and add page links or watermark annotations to your PDF pages.

As FileMaker on Mac is now 64-bit in most cases, we include an Apple Script to create 32 or 64-bit only plugin. The MBS Plugin in our plugin download is for both and you can split it to get a smaller plugin file if needed.

The functions to work on Word files have been improved. They should now be able to replace tags with multi line texts. And if you have a table in your template, we can now remove rows there, too.

When you run SQL queries in FileMaker using our FM.SQL.Execute functions, you can later query result as text. Or we provide the results properly encoded for CSV export.

We improved PrintDialog, PortMidi, LDAP, Audit, ImageCapture, SerialPort line reading, SmartCard, SQL functions and more. DynaPDF is updated to, LibXL to version 3.7.2 and SQLite to 3.16.2.

See release notes for a complete list of changes.

MonkeyBread Software Releases the MBS Xojo plug-ins in version 17.0

NICKENICH, Germany (January 23rd, 2017) -- Monkeybread Software releases version 17.0 of the MBS plug-in for Xojo and Real Studio.

The MBS plug-in comprises a collection of several plug-in parts which extend the Xojo (Real Studio) development environment with 2,400 classes featuring over 61,000 documented functions. Our plugins support all three platforms Mac OS X, Windows and Linux with all project types desktop, web and console including 64-bit and ARM targets.

Some of the highlights on the 17.0 update:

Sometimes you need to provide certificates and SSL keys to CURL plugin for secure transfers. To make it easier to query details from those certificates, we added a X509MBS class. The PKeyMBS class helps working with private or public keys, which you can read using our new PKCS12MBS class.

For better encryption you can now use our TwoFishMBS class. TwoFish is derived from the older Blowfish encrypter and was one of the AES finalists. Rijndael was choose for AES, but Twofish may be a good alternative in some cases.

For macOS we added the LAContextMBS class to query local authentication. This includes using TouchID on the latest Macbook Pro. Please note that this feature is only available for 64-bit applications.

Our DynaPDF plugin now supports loading newer DynaPDF libraries and use them instead of the built-in library. For page templates we added a convenience function to rotate them. The DynaPDFEditTextMBS class provides now more details on the text to replace so you can use it to find texts on PDF pages and highlight them. As we fixed a few things for printing with DynaPDF, please update your code to match our examples to keep it working well.

The WordFileMBS class to work on Word files have been improved. It should now be able to replace tags with multi line texts. And if you have a table in your template, we can now remove rows there, too.

Our WKWebViewControlMBS control to use WebKit 2 on Mac in 64-bit applications now supports more events. You can use that control instead of a HTMLViewer control. In 32-bit applications, you get WebKit 1.0 while in 64-bit applications you get WebKit 2.0. We try to keep functionality equal for both implementations.

We improved PHP class, PortMidiStreamMBS, CGImageSourceMBS, JSONMBS classes and more. We added MeasureRotatedTextMBS to measure size of text for drawing with DrawRotatedTextMBS.

Finally we updated DynaPDF to version, LibXL to version 3.7.2 and SQLite to 3.16.2.

See release notes for a complete list of changes.

MBS FileMaker Plugin 7.0 - 4400 Funktionen in einem Plugin

23. Januar 2017 - Monkeybread Software veröffentlicht heute das MBS Plugin für FileMaker in Version 7.0, mit inzwischen über 4400 Funktionen eines der größten FileMaker Plugins überhaupt. Hier einige der Neuerungen:

Mit neuen Funktionen können Sie jetzt Details aus X509 Zertifikate lesen. Sie können PKCS12 Dateien öffnen und die privaten und öffentlichen Schlüssel auslesen oder weitere enthaltene Zertifikate. Sie können dann die Schlüssel in PEM Dateien schreiben und Sie mit den CURL Funktionen benutzen.

Unsere neuen XML Funktionen helfen Ihnen XML Knoten und Attribute im XML Text zu finden. Sie können dann Texte und Teilbäume extrahieren. Um XML effizient zu verarbeiten können sie das XML einlesen lassen um automatisch Variablen für ihr Skript zu definieren.

Für CURL haben wir neue Funktionen für automatisierte Downloads von mehreren Dateien via FTP. Natürlich können Sie weiterhin selber per Plugin die Liste der Dateien abfragen und eine Datei nach der anderen runter laden. Aber jetzt haben wir Optionen um das automatisch in einem Transfer zu machen. Sie können ein Suchmuster angeben um nur bestimmte Dateien zu laden, zum Beispiel alle mit einer bestimmten Dateinamenerweiterung.

Über die neue Funktion FM.AllowFileDragDrop können Sie Drag & Drop erlauben für Container mit Dateien. So ziehen Sie Dateien aus FileMaker direkt auf den Schreibtisch oder in andere Programme. Natürlich kann man das pro Layout an/abschalten.

Für DynaPDF haben wir neue Funktionen um die Rohdaten von einer PDF Seite abzufragen oder zu setzen. Vorlagen für PDF Seiten können Sie jetzt drehen und Seitenverweise oder Wasserzeichen zu PDF Seiten hinzufügen.

Da FileMaker für Mac jetzt meistens in 64-bit läuft, liegen dem Plugin AppleSkripte bei mit denen Sie Plugins für 32-bit oder 64-bit erstellen können. Das MBS Plugin im Download enthält 32-bit und 64-bit Unterstützung und beim Aufteilen bekommen Sie eine kleinere Plugindatei.

Die Funktionen für Word Dateien wurden verbessert und Sie können jetzt mehrzeiligen Text ersetzen. Wenn Sie in der Vorlage eine Tabelle haben, können Sie jetzt extra Zeilen löschen.

Wenn Sie SQL Abfragen über die FM.SQL.Execute Funktion laufen lassen, können Sie jetzt auch das Ergebnis einfach als Text bekommen. Oder für einen CSV Export kann das Plugin die Texte passend kodieren.

Verbessert wurde außerdem die Funktionen zum PrintDialog, PortMidi, LDAP, Audit, ImageCapture, SerialPort mit lesen in Zeilen, SmartCard, SQL Funktionen und mehr. DynaPDF kommt jetzt in Version, LibXL in Version 3.7.2 und SQLite in Version 3.16.2.

Alle Änderungen in den Release Notes.

Dash help archives updated

Just updated the archives for the Dash application. Does the auto update work for you?

So here you can click to launch Dash and install our plugin help:
MBS Xojo Plugins and MBS FileMaker Plugin

You find the docset links also on our reference websites where you can download archive manually if needed:
MBS FileMaker Plugin Documentation for Dash and MBS Xojo Plugins Documentation for Dash

Feedback is welcome.

MBS FileMaker Plugin Schulung auf Deutsch bei der FMK 2017

Auch 2017 biete ich wieder eine MBS FileMaker Schulung auf Deutsch an.
Am Tag vor der FileMaker Konferenz in Salzburg, am 11. Oktober 2017 (Mittwoch) von ca. 9 bis 17 Uhr.
  • Neues im MBS Plugin.
  • Rundgang durch Beispiele
  • MBS Plugin verwenden mit FileMaker Cloud
  • MBS Plugin verwenden mit FileMaker iOS SDK
  • Erweiterungen im Skript Workspace
  • Beliebte Pluginfunktionen
    • FTP/SFTP Up/Download
    • Webservices einbinden
    • Bildbearbeitung
    • Barcodes generieren und erkennen
    • Arbeiten mit dem Webviewer
    • SQL Anfragen in FIleMaker oder an andere Datenbanksysteme
  • Zeit für Fragen
Anmeldung bei mir. Kosten 99 Euro + MWSt. inkl. Mittagessen und Kaffeepausen.
Bitte Umsatzsteuer ID angeben bei Anmeldung, Bezahlen.

Oder melden Sie sich bei der Denkform an für den MBS Workshop am 2. März und 7. Dezember 2017 in Hofheim (Taunus).

MBS Xojo / Real Studio Plugins, version 17.0pr4

New in this prerelease of the 17.0 plugins:
  • Updated DynaPDF to version
  • Added checks to Nikon module to avoid reentry and raise exceptions if you try to.
  • Added SetGestureConfig/GetGestureConfig methods in WinPointerEventsMBS to use controls as target.
  • Fixed bug with DynaPDFTableMBS.GetNextHeight function.
  • Added WinSelSubScriptMBS and WinSelSuperScriptMBS to TextArea control.
  • Fixed PageBreak event in DynaPDFMBS to work with addhandler.
  • Fixed DOMHTMLDocumentMBS.body function.
  • Changed DrawRotatedTextMBS to use symbol charset for Wingdings font on Windows.
  • Added PortMidiStreamMBS.currentTimeStamp.
  • Added NSExceptionHandlerMBS.Disable and Enable.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 7.0pr4

New in this prerelease of the 7.0 MBS FileMaker Plugin: Download at or ask for being added to the dropbox shared folder.

FileMaker DevCon 2017

See you in Phoenix Arizona for the FileMaker Developer Conference, 24th to 27th July 2017.
The ticket price is down to $899, but you also get only 2 conference days plus a day for keynote and/or training. Hotel $149/night.
FBA members get an extra day.

Field Colors in FileMaker via other field and Xojo app

There was a question on how set field background color in FileMaker based on a color in another field:

So we define a field which gets a color using formatting rules. The other field defines the hex color code to use. To keep it smaller, we only allow 4096 colors: Those where the two digits per color channel are equal. So from 000000 to FFFFFF with steps of 11. e.g. put FF0000 here to make field background red.

To generate the conditional formatting rules, we use a Xojo app:

The workflow is like this:
  1. Cut or copy a field in layout mode in FileMaker.
  2. Go in the app and type the right field name for the condition.
  3. Press the button to add formatting rules.
  4. Paste field in layout with colors.
Please try it. To change/build the Xojo app, please download Xojo on the Xojo website. For just running the project with your custom modifications in the IDE, you won't need to buy a license.

Download test database and project here:

FileMaker Pro 15.0.3 Update

FileMaker Inc today released FileMaker Pro 15.0.3, an update to address bug fixes and various compatibility issues.

You can read in the knowledge base about FileMaker Server 15.0.3 (6 fixes),
FileMaker Pro (Advanced) 15.0.3 (6 fixes) and FileMaker Go 15.0.3

As usual FileMaker provides updaters only for Windows and we miss the ones for Mac. So here are the links for Mac:

FileMaker Advanced 15.0.2 to 15.0.3:

FileMaker Pro 15.0.2 to 15.0.3:

Be sure to only apply them when you have the right 15.0.2 version before and FileMaker is not running.

curl meeting in Germany, March 2017

On the weekend of March 18-19, 2017, the first ever curl meeting is taking place is Nuremberg, Germany.

Users, developers, binding authors, application authors, curl maintainers, libcurl hackers and other people with a curl interest are welcome!

I will try to be there and finally meet the curl people. I've been using curl for various projects including Xojo and FileMaker plugins for over 10 years.

SuperScript and SubScript for Xojo Textarea

just added to MBS Xojo Plugins:

Our new example project shows how to use the new functions WinSelSubScriptMBS and WinSelSuperScriptMBS on the TextArea control. The example includes a module to do the same for Mac via NSTextViewMBS class.
Screenshots from Mac OS X 10.10, Windows 7 and Windows 10. If you like to try it, let me know.

MBS Xojo / Real Studio Plugins, version 17.0pr3

New in this prerelease of the 17.0 plugins:
  • Fixed an issue with DynaPDF printing blank papers.
  • Changed SQL plugin to detect ODBC to FileMaker and handle that better for reading text fields and avoid a crash.
  • Added MeasureRotatedTextMBS function.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 7.0pr3

New in this prerelease of the 7.0 MBS FileMaker Plugin:
  • Changed Audit: CurrentTimeStamp, CurrentTime and CurrentDate. Those can now be TimeStamp, Time, Date instead of Text fields.
  • Changed Audit: FieldID, TableID and RecordID can now be number fields instead of text fields.
  • Fixed progress dialog updates for macOS Sierra with CURL synchronous upload.
  • Fixed an issue with PrintDialog functions and Mac OS X 10.6.
  • Enabled script colors for German script editor for FileMaker 13 (broke in 6.5).
  • Added PrintDialog.GetReset and PrintDialog.SetReset.
  • Added progress window option to Files.CopyFile and Files.MoveFile for Windows.
  • Changed SQL plugin to detect ODBC to FileMaker and handle that better for reading text fields and avoid a crash.
  • Added enable parameter FM.AllowFileDragDrop, so you can disable/enable it when needed.
Download at or ask for being added to the dropbox shared folder.

Free tickets for young developers for MBS Xojo Conference

Monkeybread Software is pleased to announce the MBS Xojo Conference in metropolitan Berlin, Germany. We will meet in the lovely Ellington hotel in the center of west Berlin. The hotel is near Kurfürstendamm, the Zoo and KaDeWe. Beside our two conference days, we will have an accompanying social program with our dinner event and optional two training days. For the evenings we will have a casual get-together in the hotel bar or beer garden.

Monkeybread Software would like to offer young developers the possibility to meet the Xojo community, get in touch with other developers and maybe find first clients or an employer.

For the 2017 conference MBS decided to help your developers: Three conference tickets are provided free of charge to three young developers so they have the chance to join our conference. Please apply until 4th February 2017 to get one of the tickets.

The Xojo community is growing and we want to get more young people to join the conference. Especially younger people may hesitate to join a conference due to cost and by giving away free tickets, we encourage them to come. If you know a friend, student or pupil who is interested in Xojo, please tell them about this offer. Or maybe your own child may apply and join you coming to the conference?

  • You speak english and you can follow the conference.
  • You are 25 years old or younger.
  • You have done your first Xojo projects and know Xojo a little bit.
  • You are sure you can cover your cost of travel, food and hotel room.
  • You have the required passport or Visa to travel to Berlin on yourself.
If needed, we may provide help to find low cost traveling or hotel room.

If you like to apply, please get in touch.

Batch sending Emails in FileMaker via MBS Plugin

As you may know you can use CURL functions in MBS Plugin to send emails. We include examples to show you how to send with attachments, html text and inline graphics. A recent example coming with 7.0pr2 showed you how to batch send emails. But that example sends emails one by one and each time with a new connection. I already improved the example here to reuse connections which helps a lot on speed. Still the big problem is that network transfers with uploads take time. The script waits while the Kilobytes for the email go through the network cables. 


Background processing


Luckily our plugin offers a function for cURL to run a transfer in background: CURL.PerformInBackground. Using this function we can start a cURL transfer and the script continues. We can prepare and send the next email while the last one is still uploading. Now you need to be careful and manage the connections and their status. To show you how this can work, we show you what we did in our updated example. Here is an excerpt from the script where we look for a free cURL session: 



#Find a non busy curl connection

Set Variable [$index; Value:1]


If [$curls[$index] = ""]

#found free index, setup new CURL session

Set Variable [$curl; Value:MBS("CURL.New")]

Set Variable [$curls[$index]; Value:$curl]

Set Variable [$r; Value:MBS("CURL.SetOptionURL"; $curl; "smtp://" & $SMTPServer)]

Set Variable [$r; Value:MBS("CURL.SetOptionUsername"; $curl; $SMTPUser)]

Set Variable [$r; Value:MBS("CURL.SetOptionPassword"; $curl; $SMTPPass)]


Exit Loop If [1]


#found used index

If [MBS( "CURL.IsRunning"; $curls[$index] ) = 0]

#found used index which is done

Perform Script [“HandleFinishedCURL”; Parameter: $curls[$index]]

Set Variable [$curl; Value:$curls[$index]]

Exit Loop If [1]

End If

End If

Set Variable [$index; Value:$index + 1]

If [$index = 9]


Set Variable [$index; Value:1]

Pause/Resume Script [Duration (seconds): ,01]

End If

End Loop



Xojo job offer in southern France

MedinCell S.A. is a company located in Montpellier in southern France near the Mediterranean Sea.
They use my plugins for a few years now and are looking for another Xojo developer: (more)

Allow file drag and drop from FileMaker container field to Finder

On the weekend we run into the issue that you can store files in a container, but you can't simply drag them into other applications or to the Finder.

To enable the desired behavior with a new plugin function called FM.AllowFileDragDrop.

The plugin than intercepts the drag and drop in FileMaker and writes the data into a temp file, so the drag includes a file reference and does work with Finder and other applications.

Watch the video: AllowFileDrag
Requires MBS FileMaker Plugin 7.0pr2 plugin or newer.

MBS Xojo / Real Studio Plugins, version 17.0pr2

New in this prerelease of the 17.0 plugins:
  • Updated DynaPDF to version
  • Added LoadLibrary functions to DynaPDFMBS, so you can use other DynaPDF DLL, e.g. other version.
  • Due to changes in PrintPDFFile we had to update our print examples for DynaPDF. Please update your code, too.
  • Added RotateTemplate function in DynaPDFMBS class.
  • Added more events for WKWebViewControlMBS control.
  • Changed plugin file names to include name of plugin and name of part.
  • Updated SQLite to 3.16.1.
  • Fixed bug in PKeyMBS.PrivateKey.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 7.0pr2

New in this prerelease of the 7.0 MBS FileMaker Plugin: Download at or ask for being added to the dropbox shared folder.

Loading LibXL and DynaPDF libraries in our Xojo plugins

For the future you can provide a feature in your application to load a dynapdf or libxl library from a folder if needed. I added LoadLibrary methods there, so you can load a given version of those libraries and use those instead of the built in libraries. For example with DynaPDF:
MsgBox "Version before: "+DynaPDFMBS.DynaPDFVersion dim f as FolderItem = SpecialFolder.Desktop.Child("dynapdf.dylib") if DynaPDFMBS.LoadLibrary(f) then MsgBox "Version after: "+DynaPDFMBS.DynaPDFVersion else MsgBox DynaPDFMBS.LoadError end if
The idea is that in case a bug is found in dynapdf or libxl or a newer version released, you can yourself get a copy of the library and load the newer library in the plugin. If you implement the optional dynamic loading of the library from e.g. application folder, you can provide your customers an update to libxl or dynapdf without recompiling the application.

The new LoadLibrary function for DynaPDF will be available in 17.0pr2 plugins. Please do not hesitate to ask if you like to try it sooner.

FileMaker Conference .fmp[x]Berlin 2017

Registration just started for the FileMaker Conference .fmp[x]Berlin 2017.

This conference is organized by Egbert Friedrich and takes place from 1st to 3rd June 2017 in Berlin, Germany.

As the conference is in english, this is your chance to meet people from around the world at a conference in Europe. And for a lot of people it's easier to get to Berlin than to cross the atlantic and deal with US immigration officers.

dotfmp is an effort of various leading European FileMaker Developers. It is meant to bring all kinds of higher level developers together to share knowledge, educate and challenge each other.
dotfmp starts at the 31 May 2107 in the later afternoon with a relaxed "Beer and Sausages" in one of the most famous Berlin Beergarden.The session days itself last from 1 until 3 June with various socialising events in the evenings. Additionally we offer suport on 4 June to see more from Berlin and its surroundings.
dotfmp is a 3 Day-Unconference, Meetup, Hangout or Barcamp. It is an informal and self-organized effort to meet on a personal base.
dotfmp takes place in one of the most famous spots in Berlin. The GLS Campus is located in a vibrant area with a very short walking distance to all the famous restaurants.
We feel there are far too few possibilities to talk to, learn from, and hangout with fellow developers in a relaxed and informal environment. And we'd like to share work and get feedback from people chewing on similar challenges.

If you like to join the conference and present something, please register soon.

FileMaker Stammtisch SaarLorLux

Next Thursday, 12th January 2017, I will visit the regular FileMaker meeting in Saarbrücken.

If you like to join us, please sign up on the website

Feel free to ask me about our MBS FileMaker Plugin. Or lets talk about upcoming conferences?

Audit with MBS FileMaker Plugin

How FileMaker Pro can log changes

Since 2012, the MBS plugin has an audit functions. With version 6.5 they got much faster and therefore you may want to take a closer look on our audit functions. In FileMaker Pro, you can use them to easily log all changes to the database. Later you can inspect who changed records and use the log to undo actions or display old values.

Audit with MBS

We start with a test database. For the example, we take the starter solution called event management. The audit function need an AuditLog table and a matching layout. Both of these should be available somewhere and can be in a different database. The MBS plugin looks into the AuditLog layout to determine which fields should be written. The records are then written internally using SQL commands. Therefore, there must be only a relationship to an AuditLog table, even if it is located in a different database. This is quite interesting for server-based solutions, if the log is split into several AuditLog tables and the relationships define which table logs into which AuditLog table.

We add fields to the AuditLog table. The following fields are required: FieldName, FieldHash, TableName and RecordID. The name for the field and the table define the field exactly. We know which record was changed via the RecordID and FieldHash is then the hash of the field value. The field value can be very long and can, but does not have to be written down.

The following fields can be defined:
FieldValue, FieldOldValue, FieldType, UserName, IP, CurrentTimestamp, TimeStamp, CurrentTime, CurrentDate, Action, CurrentHostTimeStamp, PrivilegeSetName, AccountName, LayoutNumber, ApplicationVersion, FileName, HostApplicationVersion, HostName, HostIPAddress, LayoutName, PageNumber, LayoutTableName, TableID, FieldID, ScriptName and WindowName.

In FieldValue, the plugin saves the new value. In the FieldOldValue field, it saves the old value of the field. This is, of course, only available if the plugin finds the older entry. FieldType saves the type of the field, for example text. UserName saves the user name and AccountName the current account name. The CurrentTimestamp, CurrentHostTimeStamp, TimeStamp, CurrentTime, and CurrentDate fields store all the current time and/or current date. Hostname and HostIPAddress define on which computer the change was made. LayoutName and LayoutNumber which layout was used, WindowName which window. TableID and FieldID store the IDs for the table and the field. Later you can then find values by IDs even faster.

Create an Audit table

So let's put a table called AuditLog and the fields FieldName, FieldHash, TableName, RecordID, FieldValue, FieldOldValue, FieldType, UserName, IP, CurrentTimestamp, Action, FileName and LayoutName. We also add an additional field to EventID. Because we can always save the ID of the event and then find the changes for an event. FileMaker automatically creates a layout for the new table. This layout is required by the current plugin to find the fields in the table. We can later see in the layout what was logged. Of course, regular users may not need to see the audit table or the layout.

You can create additional fields in the AuditLog table. For example, a LogTime field with the data type time stamp for the current time of logging. This field can automatically be filled by FileMaker. You can also pass these additional fields later using an audit call, for example, to log a variable.

Audit fields

In each table, we create an AuditTimeStamp field. This field is automatically set by FileMaker to the current time stamp when the record changes. If you already have a field with a different name, you can also use it and do not need a field with a redundant time stamp.

We also create a second field called AuditState. This will be a calculated value, which needs to be recalculated each time. So please uncheck the "Do not replace existing value of field" checkbox. The calculation is the call to Audit.Changed. This function has several parameters. First, we pass our time stamp, behind the name of the table itself, in this case events. Then we can specify fields that should be ignored. We can also use field name and | as a separator to fill a field with a given value. So, we set the value of the EventID field to the value of the EVENT ID MATCH FIELD field. Finally, we pass the label from the field "Task Label Plural" as this field should not be logged. This field is calculated easily from the other fields. Thus, the audit call looks like this:

MBS ("Audit.Changed"; AuditTimeStamp; "Events"; "EventID|" & EVENT ID MATCH FIELD; "Task Label Plural");

For the other tables, the calls would be:

MBS ("Audit.Changed"; AuditTimeStamp; "Contributors"; "EventID|" & EVENT ID MATCH FIELD)
MBS ("Audit.Changed"; AuditTimeStamp; "Tasks"; "EventID|" & EVENT ID MATCH FIELD)
MBS ("Audit.Changed"; AuditTimeStamp; "Agenda"; "EventID|" & EVENT ID MATCH FIELD)
MBS ("Audit.Changed"; AuditTimeStamp; "Guests"; "EventID|" & EVENT ID MATCH FIELD)

So the plugin logs all the changes for the events. You can open the windows side by side, one with the events layout and one with the layout for the AuditLog table. For changes to the portals you have to click on a free space in the event to write the changes to the record. This writes the changes for all portals together. In the AuditLog, we see many new entries for the new records.

Positive or negative?

There are two Audit.Changed commands in the plugin. Audit.Changed takes the field names that are not to be observed. On the other hand, Audit.Changed2 is different and takes a positive list of fields. Basically, Audit.Changed2 is faster because it does not have to query which fields are available. Form fields or unsaved calculations are not monitored by default, since these are easy to recalculate.

With the Audit.SetIgnoreCalculations function, you can completely disable the monitoring of all calculation fields. With Audit.SetIgnoreSummaryFields, you can ignore the summary fields. Or with Audit.SetIgnoreUnderscoreFieldNames all fields with underline at the beginning of the word. You can also use Audit.SetIgnoredFieldNames to globally specify a list of field names for fields that you want to ignore. by default the plugin ignores the AuditState and AuditTimeStamp fields.

Display the audit

We can display the audit data for the record. Perhaps not for every user, but the display is always useful as a change log. To do this, create a relationship between Events::EVENT ID MATCH FIELD and AuditLog::EventID in the relationship diagram.

Now create space in the event layout and create a portal for the AuditLog table. If it is not found in the reference records pop-up menu, you have created the relationship above incorrectly. You could sort the fields down by CurrentTimeStamp. It is enough to take the fields FieldName, FieldValue and perhaps UserName.

Audit on deletion

If you want to log the deletion, you have two options. Either you let the user delete only by script and you always notify the plugin before deleting, or you use the security settings in FileMaker for a delete trigger.

The call from the plugin would then be via the Audit.Delete function:

MBS ("Audit.Delete"; MyTable::AuditTimeStamp; "MyTable")

The time stamp is passed, but not really used. Instead of using MyTable, you specify the current table from the current record. The plugin logs the record as with the other calls, so all the changes to the fields if needed and then an entry for deletion. You can of course do this in a script shortly before the delete command (with variable set).

Test users

First we need a test user to delete. In the Security dialog, we create a new user. We create a new set of permissions for this user. Best way is to duplicate and customize the permissions from the data input. In the settings for the calculation, there is a pop-up menu for records in the upper left corner. There, select "Custom privileges ...". A suitable dialog appears, where you can set the permissions for each table. For each table, select "Limited ..." instead of Yes. A new dialog box appears for the calculation of the limitation. Here, please insert the plugin call, for example for the events table:

MBS ("Audit.Delete"; AuditTimeStamp; "Events")

For testing, we are building a script called login. This script gets only one command: Re-Login [With dialog: On]. If everything works out, you can use the new script to log in again with the new user. There you create a new data record. Make sure you commit some changes. You will see the recording in a second window with the AuditLog table. If you delete the record now, the calculation will be executed and the record should be marked as deleted. Please note that FileMaker first performs the calculation and then displays a dialog. If the user presses Cancel there, the plugin has already set an entry and the record still remains undeleted.


Many plugin users use audit. Because FileMaker often stores changes, each database should have an audit. Easily a record is changed or deleted and no one knows later who has made what and why. In addition, you can offer an undo feature, if you can find what was previously in a field.

The table with AuditLog is growing quickly, because a record is created for each change. However, you can easily rotate the table, for example change it monthly. The AuditLog table and layout must be available only in an open file. Therefore, it is recommended to put the AuditLog table in another database file. You can even have different audit databases for different files and separate the log data. Thus, a table can log into an audit file and another table logs to another file. For this, however, the relationships must be true, so that under the name AuditLog is a reference in the relationships that point to the corresponding table. Those audit log tables have of course different names.

The whole auditing works at best, when the users don't know about it. If an employee then makes a mistake, a supervisor can undo the change. Or if the data does not agree, who has done what and when.

In version 6.5, we have significantly improved SQL statements for audit, so the new plugin is much faster in the network. For each change, we need to look for old entries in the AuditLog and see if the values have changed.
Give it a try!

Save the Date for XDC 2018 in Denver

Xojo Inc. just announced the date for next year's XDC:

Wishing everyone a happy New Year! There will be a lot of great things coming to Xojo in 2017. Though we won't have a conference this year, planning is already in full force for 2018. Mark your calendar today for XDC 2018, taking place April 25 - 27, 2018, in the Mile High City itself, Denver, Colorado! We will be staying at the lovely Magnolia Hotel, located very near Union Station and Larimer Square. More information, including registration information and the call for speakers coming soon.

I am looking forward to see you all in Denver!

The big Xojo conference 2017 will be 4th/5th May 2017 in Berlin, Germany.

Early bird offer ending for MBS Xojo Conference

In less than one month ends the early bird offer for our MBS Xojo Conference in Berlin from 4th to 5th May 2017. Join now for only 399 Euro plus VAT.

In the evenings we meet for dinner so you can meet other attendees. Registration is still available and we already have over 60 people coming from fifteen countries. This includes 6 Xojo engineers coming including all the 4 from Europe.

The early bird offer available till 4th February is just 399 Euro plus VAT. Attending the conference costs regularly 499 Euro plus VAT, including food and beverage in the Ellington Hotel as well as an accompanying social program.

The group rate for the hotel (108 Euro single or 118 Euro double room/night, Breakfast extra for 20 Euro/Person/Day) can be cancelled 14 days in advance for free and doesn't need pre payment or credit card. It is available till 4th February 2017. You may find other hotels with cheaper prices if needed in walking distance.

Registration and more Information. Training days in German and English.
For any questions, please contact Monkeybread Software directly.

MarkDown via HTMLViewer for Xojo and FileMaker

As you may know we have an example for FileMaker to convert from MarkDown to HTML via JavaScript library in a webviewer.
For a client I just converted that example to Xojo.

On Mac OS X it looks like this:

and for Windows:

This is using Internet Explorer on Windows and WebKit on Mac.

Both ways we load a local html file which contains two text areas in a html form. We fill the first text control with the input text, call a javascript function and read the output via the second form field. This way we can pass much more multi line text than we ever could through URLs.

Please try it. Will be included in next prerelease or if you need now, drop me a line by email.

SQLite Release 3.16.1

There is an update to SQLite.

The new version 3.16.1 was released yesterday and I already updated plugins here.

3.16.x is faster, fixes a few bugs and has some new shell commands.

If you need a copy now, you can email me as usual.

xDev Magazine Issue 15.1

The January/February (15.1) issue of xDev Magazine is now available. Here's a quick preview of what's inside:

VB6 DLL Class to Xojo by Eugene Dakin
If you have Windows software that depends on VB6 DLLs, here’s how you can convert them to Xojo and continue to use them.

Interview: Mark Franken by Marc Zeedar
Are you curious how one becomes a Xojo-using Emmy-winning sound editor? Marc was, so he asked Mark a few questions and got his life story. (With pictures!)

Xojo Pi Lab by Mattias Sandström
Mattias tells about a fascinating project he took on involving Xojo, Raspberry Pi, and a Web App for a technical school in Sweden.

Working with Bitmasks by JC Cruz
If you didn’t take computer science courses, you may be fuzzy on the use of bitmasks. Jose explains how to work with them.

Plus: Xojo 2016r4, Master Data Management, clear interface design, Profile Reader and Readability, and more!

FileMaker Magazin - MBS Artikel

For our German speaking users:

Wir haben die Artikel zum MBS Plugin aus dem FileMaker Magazin gesammelt hier online gestellt: FileMaker Magazin Artikel:

Wir empfehlen allen FileMaker Anwender ein Abo vom Magazin und den Kauf der alten Ausgaben. Das FileMaker Magazin ist eine excellente Quelle von Informationen, Anleitungen und Profitips.

MBS Xojo / Real Studio Plugins, version 17.0pr1

New in this prerelease of the 17.0 plugins:
  • Added LAContextMBS class to query TouchID authentication. (Mac 64bit only)
  • Optimized memoryblock and array access.
  • Fixed a problem with WordFile not finding tag if it is the last text in a document.
  • Fixed a crash with opening Midi devices on Windows in 64-bit application.
  • Added DeviceID and DeviceName to PortMidiStreamMBS class.
  • Removed Kagi classes and examples.
  • Added JSONMBS.ValueBoolean.
  • Changed JSONMBS.NewDoubleArray, JSONMBS.NewIntegerArray and JSONMBS.NewStringArray to no longer return nil for an empty Xojo array.
  • The draw events are no longer called for CustomPDFViewMBS and PDFViewControlMBS if the OS calls them on non-main thread.
  • Fixed a problem with HBITMAP handling in Xojo 2016r4 on Windows. Drag and Drop now shows drag image again.
  • Added X509MBS and PKeyMBS class for reading details from certificates.
  • Added Network.OptionReusePortMBS and Network.OptionReuseAddressMBS.
  • Changed SocketCore functions to raise exception in case of errors.
  • Changed WordFileMBS.ReplaceTag to create multiple paragraphs if text to replace contains multiple lines and is part of a normal text paragraph.
  • Added WordFileMBS RemoveTableRow function.
  • Updated RemoteControlMBS.MacKeyboardName for 64-bit.
  • Added CGImageSourceMBS kCGImageSourceShouldCacheImmediately.
  • Deprecated BinaryStringtoPictureMBS and PicturetoBinaryStringMBS. Please move to PNG format instead.
  • Added UseUTF8 property to PHPMBS class.
  • Fixed becomeFirstResponder for Cocoa controls event, e.g. in CustomNSSearchFieldMBS.
  • Updated LibXL to version 3.7.2.
  • Added TwofishMBS module.
  • Fixed ChartDirector examples to not flicker.
  • Updated DynaPDF to version
  • Added more parameters to PrepareWrite event in DynaPDFEditTextMBS class.
  • Comparing a DynaPDFMatrixMBS to nil does no longer raise exception.
Or ask us to be added to our shared Dropbox folder.

MBS FileMaker Plugin, version 7.0pr1

New in this prerelease of the 7.0 MBS FileMaker Plugin: Download at or ask for being added to the dropbox shared folder.


Jul 2024
Jun 2024
May 2024
Apr 2024
Mar 2024
Feb 2024
Jan 2024
Dec 2023
Nov 2023
Oct 2023
Sep 2023
Aug 2023
Jul 2023
Jun 2023
May 2023
Apr 2023
Mar 2023
Feb 2023
Jan 2023
Dec 2022
Nov 2022
Oct 2022
Sep 2022
Aug 2022
Jul 2022
Jun 2022
May 2022
Apr 2022
Mar 2022
Feb 2022
Jan 2022
Dec 2021
Nov 2021
Oct 2021
Sep 2021
Aug 2021
Jul 2021
Jun 2021
May 2021
Apr 2021
Mar 2021
Feb 2021
Jan 2021
Dec 2020
Nov 2020
Oct 2020
Sep 2020
Aug 2020
Jul 2020
Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008