Modular FileMaker Goes Live

(originally posted on geistintertactive.com)

We are finally ready to go live.  Thanks to everyone who has pitched in so far.  Lets see how far this can go. 🙂

It has long been difficult to share code in the FileMaker world.  Traditional FileMaker coding styles made it difficult, and I think many of us old school FileMaker Devs still have pieces of “6 think” burned into our brains.  As a result we never really developed the techniques or the culture that encouraged the sharing of code.  However, recent versions of FileMaker have given us some new tools which can help us write code that is easier to share. Now we need to build on these new tools to further refine and develop the techniques, and built a culture and community centered on the sharing of FileMaker code.  A new project and website, ModularFileMaker.org, is dedicated to that purpose.

Code re-use is not a new problem. But attempts to solve it in the past have often lead to large monolithic frameworks.  These one size fits all, everything in there including the kitchen sink frameworks, have not been widely adopted outside of development shops that created them.  I think the reason is simple.  In order to use any of these frameworks, a developer has to adopt the entire FileMaker mindset of the developer who created the framework.  Thats a lot to ask.

ModularFileMaker.org avoids the “too big to adopt” problem by being very small, and very focused.  It provides a documented guideline for building and sharing small re-usable chunks of FileMaker code.  It focuses on solving only the problems that inhibit sharing. Everything else is left to the developer.  It has no solution wide naming conventions, graph organizational models, file architectures, or any other opinions on issues that don’t impact sharing.

We call these chunks of code, “modules”  or “mFM Modules” ( ModularFileMaker Modules ).  mFM Modules provide features like Navigation Bars, Transaction Frameworkssearch utilities , SQL helpers, etc.  These are all below the level of application or solution.  Essentially any re-usable feature can become a mFM Module if it is organized according to the guidelines.

The website is now live. There are already several freely available modules just waiting for you use and improve. Hopefully, if the community gets inspired, someday maybe there will be hundreds of modules to choose from.  Check it out!

Sessions

Introduction

The “session model” has been used for years with FileMaker Pro, even dating back to the pre FileMaker 7 days.  Its been called many things over the years, “main table”, central file.  Essentially it is the practice of creating a record when a user logs in so that you can give each user a unique record to call their own for the duration of the FileMaker “session”.  This is useful for many kinds of Dashbord like, or task centered designs where the data presented to the user is pulled from many different tables.  FM Devs like it a lot because it allows them to show data from more than one “context”

This module provides the session table and the code to manage it.  Drop it in, bang  your gavel and your FileMaker database session is in well…   “session”.   🙂

Download it here!

Navigation

Introduction

version 1.0.3  – 4/18/2013 – switched to using LayoutIDs instead of LayoutNumber. Handling nested NavBars better.

Honestly, there could be a lot more to this one. Its just a start. But it does work. 🙂  You can create navbars that are easy to style, and easy to use, and look great.

Credits

Bob Ellis

  • changed the setup to use LayoutIDs instead of LayoutNumbers. More robust
  • improved “navigate” script to better handle nested NavBars

Features

  • Style-able using conditional formatting
    • use layout name for self aware high-lighting
  • Nav Bar Button labels are not based on layout naming
    • More flexible
  • Respects FileMaker layout security
    • Layouts that are hidden to the user do not appear in the nav bars
  • Multi-Level – you can create nested Nav Bars
  • Remembers the last selection of nested navbars
  • Includes pre and post hooks that fire on button selection

[ba-button link=”http://www.modularfilemaker.org/wp-content/uploads/2013/04/Navigation.fmp12.zip” color=”blue” target=”self”]Download Navigation[/ba-button]

Transactions

FileMaker Transactions

Although it is not talked about as much as it should be, FileMaker does indeed support database transactions.  Thank goodness because sometimes you have to use them.  This module contains all the code you need to start coding using transactions.  The modules uses techniques that have been used and tested for almost a decade.  They are rock solid.

If you want more detail than whats covered below, you can about them over at geistinteractive.com.

Basic Principles

The key trick is this. As long as you make all your edits through relationships, FileMaker will save all of those edits in a single commit.  If any edit fails, they all do.  There is no in between state where some edits go through and some do not.

The module provides a Transactions table to use as a sort of Super Parent or master record.  As long as you make all your edits in the context of this master record, they will all be batched together when you commit this super parent record.

First you have to prepare the Graph and your Transactions layout.  Create relationships between the “Transactions” table and all the tables you want to edit in your transaction.  This is often done by using a global key in the “transactions” table to point at the given record you want to edit.

You create records using relationship set with Auto-Create related records on. You either navigate to the last row of a portal that uses that relationship, or use an empty key pointing at the primary key in your target table.  That second method does not require a portal.

The only way to delete a record through a relationship is by using a portal.  You “go to portal” row that has the record in it you want to delete, and use the script step “Delete Portal Row” to delete the record.

Scripting a transaction

You start by having your script call  the script “Start Transaction”.  That create the new transaction record and prepares it for use as the super parent.  Next you set your relationship to point at the records you want to edit, create, or delete.  Then you make all those changes, being careful not to commit the record, and trap for errors.  Finally you can End Transaction and give it any errors that may have occurred.  Thats it!

History

5/15/2013 – fixed a bug in the “End Transaction” Script

9/17/2013 – added better error trapping control to End Transaction

Here is the download.

Auto Quick Find

AutoQuickFind

Overview

Auto Quick Find is a single set of simple scripts that developers can use for find-as-you-type functionality in any context with minimal set-up. Unlike other existing approaches, this module improves perceived responsiveness by only performing finds during pauses in typing, so users don’t have to wait for find results after. Every. Keystroke.

Dependencies

Find field layout objects for each layout need to be named “AutoQuickFindField.” Solutions needing Find results to be sorted can accomplish that through OnModeEnter script triggers, which will be tripped by Auto Quick Find specifically for this purpose.

License

Anyone may do anything with this software. There is no warranty.

Download

Download Auto Quick Find from Github. If you are not comfortable working with GitHub, you can download the repository directly.

A view of @'s SQL clipboard

FileMaker SQL Sugar

A view of @'s SQL clipboard

Overview

“@” (FileMaker SQL Sugar) is a power tool that sweetens the task of writing clean, readable, well-structured FileMaker SQL

  • Makes it much easier to write powerful, unbreakable FileMaker SQL
  • Helps developers think and code directly in native SQL
  • Easily handles advanced SQL functions directly inline using an extensible, chainable syntax
  • Outputs ANSI-standard queries that can be shared / tested with internet SQL tools

Dependencies

None. @ is implemented as a lightweight set of namespaced custom functions, with no outside dependencies.

License

@ is free and open source, under the terms of the MIT Open Source License.

Documentation

@ comes with a demo file — a quick introduction to @’s purpose and philosophy, and an interactive SQL workbook that lets you view, modify, and test live @ queries. This is an ideal place to start.

In daily use, @ itself can be queried directly to get help directly within any solution where it’s installed. You can access @’s inline help in a Data Viewer or any context where a function can be evaluated, using the syntax @(“” ; “?” ). This will display a quick overview of @’s help syntax and options, and explain how to get detailed help on desired topics.

Support

Feel free to contact me with feedback or questions via email or on twitter

Download

Download @ from GitHub

Note: In the following window, you can either click the “download as zip” button to grab all files, or choose “View the Project on GitHub” for more granular options.

Enjoy!

Introducing Modular FileMaker

Several of my closest collaborators and I have been working for many years on coming up with a methodology for building highly re-usable FileMaker code. This has become easier in recent versions. There is still a long way to go.  But I think we have finally reached a state where we can begin to get some real benefit from adopting this style.

And thats just what Modular FileMaker is. It’s a style. It tries to be light and unobtrusive. It is NOT a large monolithic framework, or a comprehensive naming standard. It focuses only on the areas that impact sharing and modularity.  I will have lots more to say about this in the coming days, but for now you can read more on the About page.

This is a work in progress. The Spec is not done yet. But it is time to take it public 🙂

Master Detail

Update: version 1.1.3 available 4/13/2013

UPDATE –  version 2.0 was released. Major changes. You can get it here.

Overview

Master Detail is module designed to make it easy for you to make Master Detail views on any FileMaker Table.

  • Works on any found set
  • Uses normal FileMaker sorting order.
  • Can handle 10s of thousands of records.
  • It works on FileMaker Go and FileMaker Pro

Dependancies

  • Modules
    • HyperList
  • Custom Functions
    • Triggers – for enabling and disabling Script Triggers

License

MIT License, see README

Overview Video

[vimeo id=”64247130″]

Installation Video

[vimeo id=”64243912″]

Download

Here it is…

version 1.1.2 4/13/2013

version 1.2 8/20/2013 Fixes from DevCon

Please see Master Detail 2.0 

HyperList

Overview

(Update Version 2.0.1 1/29/2014 – fixed the bug reported by Tim Anderson – more info here)

(Update Version 2.0 1/8/2014 – added support for up to 5 fields, detects and uses ListOf)
Post and video over at geistinteractive.com

(Update 10/7/2013 – added trailing return to maintain backwards compatibility )

(Update 8/20/2013 – new and improved faster list function.  2 to 3 times faster then the previous version. )

(update 7/2/2013 fixed a bug that caused HyperList to drop records when hitting found counts that ended in “01”.  101, 301, 100201, etc.)

HyperList is a very fast, completely abstracted module for capturing a found set of Primary Keys to a variable, for use in FileMaker Virtual List techniques.  It has been shown to be faster than any other known method for gathering IDs in the current found set.  Yes it is faster than the Custom List Custom function. It is capable of capturing 80,000 primary keys in about 10 seconds. As of version 2.0 it can gather up to 5 fields per record.

  • Works on any found set
  • Uses normal FileMaker sorting order.
  • Can handle 10s of thousands of records.
  • It works on FileMaker Go and FileMaker Pro

Credits

Sam and Jesse Barnum of 360Works.com, figured out that string variables in FileMaker are probably immutable, which means they are never changed, only copied.  They also discovered that if you are building long strings with a looping FileMaker script, it can be faster if you write each loop’s string to it’s own $variable and then later compact those variables back into one variable.  HyperList builds on this insight.

Jason Young of seedcode.com built the multiple field support for version 2.0

Dependancies

None

License

Completely Free!

Support

email me for now

Download

Here it is…

HyperList2.0.fmp12