Your Interests

  • Services
  • Functional areas
  • Events
  • Products
  • Case studies
  • Goals
  • tech

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

An Interest was added! Interests were added!

was were added to Your Interests Panel.

Within our site, when you click a that item is added as an Interest.

You can open "Your Interests Panel" with Open Side Panel Created with Sketch. below. Also, from the gray panel on the right (“Your Interests Panel”) you can select interests from drop-down lists, among several categories.

All interests you select can be submitted together on our contact form. This lets us know these are topics you’d like to discuss with us.


The bBox FileMaker plug-in is a toolbox of functions freely available to all developers. Use it with your Mac OS X-based FileMaker solutions to call programs, scripts, code libraries, and OS functions that are not available within FileMaker:

  • Python
  • Ruby
  • JavaScript
  • AppleScript
  • Shell scripts (sh, Bash)
  • SQLite3
  • curl HTTP (for SOAP or REST calls)
  • XPath

Offering dozens of powerful functions, bBox extends the reach of FileMaker’s existing commands. This makes it easier to get your projects done, and without the need for ugly workarounds to provide functionality that should be simple.

Some common uses are:

  • integration with Python-based libraries
  • Parse XML/XPath or JSON
  • AppleScripts that easily return results to FileMaker
  • accessing WSDL (SOAP) services
  • ad-hoc searches for layout elements using XML in clipboard
  • output formatted PDF or Excel files
  • shell access to manipulate file system
  • parsing text with regular expressions
  • customized SMTP email

FileMaker Function List

See the function documentation page for detailed usage information.

FileMaker Script Step List

These work much like their function counterparts, and may even call the exact same code internally. However, some simplification may be required for them to work as script steps, so for more complex scenarios also check for an equivalent function.

  • bBox Version
  • bBox Applescript
  • bBox Bash
  • bBox Perform Script
  • bBox Execute SQL
  • bBox File Read
  • bBox File Status
  • bBox Get Character Style
  • bBox Grep
  • bBox File Symlink
  • bBox File Write
  • bBox JavaScript
  • bBox Mac Notification
  • bBox Pasteboard Flavors
  • bBox Pasteboard Get
  • bBox Pasteboard Set
  • bBox Python3 Run (version 0.96+)
  • bBox Select Menu Item
  • bBox WebView Evaluate JS
  • bBox WebView Load HTML
  • bBox Zsh

FileMaker, Line Endings, and Character Encoding

FileMaker has several conventions that are very likely to cause issues with functions expecting New Line (ASCII 10) line breaks.

First and foremost, FileMaker will strip out line breaks completely with string literals. Because of this, always store scripts or other line delimited text in database text fields, use the Insert Text script step, or possible store it in a container field.

Even in cases where line endings are preserved by FileMaker, it defaults to using a Carriage Return for all line breaks. Any text going to or from a bBox function expecting POSIX formatted text will often not handle this correctly. Here however bBox typically defaults to translating the line endings for you. If needed, you may be able to override this translation by setting the necessary flag in a function’s mode parameter. See the function documentation page for details.

Finally, many POSIX commands expect UTF-8 encoded text. If you are using text that requires 16 or 32 bit Unicode characters they may not translate into a UTF-8 equivalent, and will be stripped out of the text when it is converted.

Python & JavaScript Functions

When bBox instantiates a JavaScript or Python VM, it adds in a custom class to its environment. The class functions implement callbacks to FileMaker, allowing your Python or JavaScript script to query FileMaker, update tables, or run scripts. For Python, you will need to add the following to your script:

import fm

Except for the executesql function, the parameters are identical for Python & JavaScript. In a future bBox version the JavaScript executesql parameters will be identical.

The functions are:

  • fm.evaluate (expression)
    • expression: text containing a valid FileMaker calculation
    • result: a Python value based on result of expression
  • fm.executesql (expression) [JAVASCRIPT]
    • expression: a FileMaker SQL expression
    • result: a string result from the SQL query (or ?)
  • fm.executesql (expression {, values} ) [PYTHON]
    • expression: a FileMaker SQL expression
    • values: one or more SQL parameters to be used in the SQL expression
    • result: a string result from the SQL query (or ?)
  • (filename, scriptname {, parameter} )
    • filename: FileMaker file name
    • scriptname: FileMaker script name to run
    • parameter: passed to FileMaker script

The evaluate function may seem to be mainly about pulling data out of FileMaker into Python, but you can also push data out by setting FileMaker variables within the evaluate statement.

executesql can naturally work in both directions using a SELECT statement to pull data in, or an UPDATE or INSERT to push data out to FileMaker. Rows and columns are returned as a non-mutable Python list (tuple), so there is no need to specify characters to delimit these like you would with FileMaker’s ExecuteSQL function.

Session and Re-entrancy/Thread-safe

It is possible with re-entrant calls or with server-side scripts that two calls to a function (or set of related functions) could occur at the same time.

We will use the term “session safe” if multiple PSOS or server script schedules can use the same function. If a function can (for instance) be used re-entrantly, then we will say that it is “thread safe”.

Most functions are thread-safe, but there are some exceptions to be aware of:

bBox_LastError: result is session safe for most cases; for SQLite it is also thread safe
bBox_ShellExitStatus: Not session or thread safe; use bBox_LastError instead
bBox_JavaScript: session and thread safe, but bBox_LastError(-5) is only session safe
bBox_Python: these functions are not thread safe (use the bBox Python3 Run script step instead)
bBox_SQLite: SQLite functions are session and thread-safe
bBox_XPath: session safe

Function Documentation by Version


The bBox Plug-in Demo file has 200 examples of the various functions, and is included with the bBox disk image.

Product Information

Related Blog Posts

Current Version

As of October 27, 2020 the current version is 0.97.

We use cookies to give you the best experience possible on our site. Learn More