Coming full circle with JavaScript and SQLexplorer

Having the opportunity to work on a project like SQLExplorer UROBOROS ouroboros_knot_240has been a highpoint in my FileMaker career. It was a great way to participate in the collective learning of the ExecuteSQL function by the community when it first hit the scene. But, it’s also been a great way to get a handle on the increasingly popular interaction of FileMaker Pro and JavaScript.

The Idea: JavaScript Portals for FileMaker

SQLexplorer has always displayed your query results in a “JavaScript Portal” in a web viewer , and this was born from a pretty simple requirement. Since you can choose different columns for your SQL query, having pre-formatted fields in a traditional portal often didn’t “look right.” We thought that with a “simple” JavaScript grid we’d be able to dynamically set column widths as well as apply some basic formatting, i.e. text floats left and numbers float right. We settled on using jQuery and the jQGrid plug-in for this. They’re  easy to set up, and being able to use Theme Roller provided us an easy way to keep the “portal”‘s theme matching the layout’s theme. With this, we were able to get a great looking grid that not only met are original requirements, but also had some great additional features that came with the jQGrid plug-in; notably, column sorting, changing the column order via drag and drop and a filtering tool. The end result ended up very polished, and to our great delight, several developers have re-engineered this technique for their own solutions. Read Full Article →

FileMaker’s WebDirect offers some exciting deployment opportunities. However, not being able to create PDFs or print like we can with Pro and Go is a big limitation. For many of us, an invoice may exist in a database, but until it’s represented as a printable document, it’s just not a real invoice. Finding a solution to this for the new SeedCode Complete was a high priority for us.

We looked at some plug-ins out there that allow FileMaker Server to generate PDFs: MonkeyBread and 360Works’ Scribe are two that come to mind. These work fine, but Filemaker Server is headless; this means it can’t read layouts like the client can as far as object positions, etc. so these PDFs made by these plugins can’t be based on FileMaker layouts like we’re used to doing in Pro. We’d need to have the server use templates independent from FileMaker layouts to create these PDFs.

Our friend and colleague John Renfrew has been doing some very impressive work bridging this gap between server PDF generation and FileMaker layouts. We’re looking forward to the final results of his work here, set to be released early 2015 as we think basing PDFs on FileMaker layouts is an important part of the platform for all deployments.

For SeedCode Complete, we’re recommending that folks go with the tried and true approach of setting up robot station of FileMaker Pro to generate the PDFs for the WebDirect clients. In the past we could have done this with a plug-in or have the station run on a continuous loop looking for PDF requests coming from WebDirect clients and generating them as needed, but this year at DevCon (2014) we learned of a great technique from the folks at ClickWorks, so the robot client can do this natively with no continuous loops. The general idea is that by deleting a record (something I can do from WebDirect), I will change a found set on another client’s machine, which in turn causes the OnRecordLoad script trigger to fire! Basically I can trigger a script on another client natively. Here’s the ClickWorks blog post on this really clever technique.!

And here’s a video of the SeedCode Complete PDF Robot in action.



The new version of SeedCode Complete is almost here. This is the platform we use to start new projects and this new version lets us share a lot of what we’ve learned about FileMaker 13, about WebDirect, and about making solutions that are easy to maintain.

If you’re new to Complete, this unlocked template links contacts to projects, invoices, and activity on the calendar. Added to that in this version is purchasing, inventory, and shipments. We’ve wired up the tough stuff: you add the specifics for your business. Checkout the current version of Complete here.

Our Approach: designing with constraints

We’d been working on this new version of Complete for a while and at some point Jason was inspired to ask, “What if WebDirect were the only platform for FileMaker?” “How would we design things differently?” He thought about that for a while…and then he started over as if that were the premise. I think it was kind of an experiment at first, but he stuck with it and a lot of good stuff fell out of working with that kind of constraint. The SeedCode Complete we’re previewing today is a result of that change in direction.

What if WebDirect were the only platform for FileMaker?

Some of the things that came out of this are Selector Connector: this new way of managing the graph that focusses on simplicity and portability. We’ve also had to be very sensitive to the number of layout objects that are in WebDirect, lest the layouts bog down, so the layouts that are in SeedCode Complete are very simple: they don’t have a lot of stacked objects on them. We’ve taken great care to make them look elegant, but there aren’t a lot of objects a developer needs to wade through. (You’ll see some more of Complete in layout mode at the end of the video below.)

Contacts in Layout Mode

Contacts in Layout Mode

That means you end up with layouts that are a lot easier to modify–and that’s the whole point of Complete: giving folks a platform that’s both powerful and easy to work with.

One of the biggest things that came out of this is that Complete is so fast. You work so hard to make something perform well in WebDirect, you end up with an app that performs really well in FileMaker Pro. And of course we worked with a big sample data set in there while we were building so any speed issues showed up right away.

This is not only a platform for us to use for our own projects–and a platform for our customers to use as they’re starting new solutions–it’s an opportunity for us to share all the stuff we’ve learned since we’ve started digging into FileMaker 13 and WebDirect. Things we’ve learned about animations and how to get them smooth across all platforms, things about speed and slimming down layouts. We’re really looking forward to sharing all this more widely, in a format developers can really take advantage of.

A Preview

Here are a few screenshots, followed by a video of how this all feels in action:


Look for the new version some time in the next few weeks: it will be on sale through year end.

Reading The Soul of a New Machine,  Kidder 1981. Describing work on the Data General MV/8000 in 1979.

Alsing [lead architect] thought that even under the best circumstances, several kinds of fear attend a debugging. One was the fear of “The Big Mistake”, the one that would be discovered late in the game and would require a major redesign–and with it perhaps a fatal delay. There was “the flakey fear”: that they’d designed [the machine] and were debugging it in such a way that it would never be reliable or easy to build in large numbers. [They] had that one fairly well in hand. But there was also “the bogeyman fear”. “Just something dark and nameless,” said Alsing, “that the machine just won’t ever work.” “It’s the infinite page fault you didn’t anticipate. The bogeyman is the space your mind can’t comprehend.”



Sounds very contemporary for an industry that’s supposed to have changed so radically in the last 30 years. Reminds me that many of the problems of software production identified in the 60’s continue to be the problems we wrestle with today. So maybe we should own up to the enormity of what we’re working on and beat ourselves up just a little less.

The Soul of a New Machine

Love this little demo we put together for FileMaker DevCon 2009. A customer recently asked about this and I thought folks might like to see it. The demo shows how to create a grid of buttons without having to use different script parameters on all the different buttons. It’s also a tidy example of scripts used in drag and drop.


CellDownload “Drag & Drop Example File: Airplane Seating Demo” from

Oh, and check out that cell phone icon on About / Contact Us… it was 2009, LOL.


Using time words

Projects wander. Customers have unreasonable expectations. We make promises we can’t keep and that our customers misinterpret. Yet a simple grammar hack may help curb all of this.

Consider the difference in clarity between these two versions of a project’s “next steps” we might send to a customer:

“The project would cost $X,XXX and take about two weeks. We’ll also need your high-res images.”

Versus the clearer version:

“The project would cost $X,XXX. After we receive your payment and high res images, the project will then take us about two weeks.”

The words “after” and “then” make a huge difference. Include a payment link with the second version and the customer clearly knows what’s expected. Send the first version, and you’ll email back and forth a few more times before you get started. An even clearer version would be:

“The project would cost $X,XXX. After we receive your payment and high res images, the project will then take us about two weeks. If you can get the payment and images to us by 2pm Monday we’d be able to deliver your project the morning of the 21st.”

Time words are those that put a pin in the temporal map–day names like “on Monday” and times like “by 2pm”–as well as words that describe sequences in time: “before” “after”, “until”.

Communicating *without* time words is like sending someone a madlibs version of your plans

Sentences that include time words create a more explicit story about what you’ll be doing for someone or what you expect them to do for you. Lacking these words, people will fill in the gaps in the story you’re telling with their own specifics. Folks will also fill in their own details if you use vague time words like “soon” or vague calendar names like “next week” Our minds like to solve puzzles and finish incomplete stories. So communicating *without* time words is like sending someone a madlibs version of your plans.

70251Telling someone you’ll reply to them “next week” is a similar problem. Your type-A contact who has a high need for social inclusion may interpret that to be “as soon as next week begins,” meaning Monday morning. While I, perhaps more given to procrastination, may figure I’ve given myself until Thursday or Friday before I’m breaking my word by not replying yet. That gap between our two interpretations leads to disappointment and to stress: I know I’m disappointing my contact less if I reply earlier in the week and displeasing them more if I reply later in the week. Carrying around five or six such vague obligations–where the best case outcome is displeasing someone less–is a sure fire way to feel like you’re never keeping up.

(Like many things, this is really just an interpretation of the first of the Four Agreements.)

Making time words part of your routine

Giving your correspondence a quick read-through to make sure you’ve included specific time words takes only a minute and will really improve the quality of your interactions. Putting these specific times on the calendar at the same time (during that read-through) will help you record your commitments and assure you’re making new promises in the context of the commitments you’ve already made.

It would be great if there were a tool out there that could take your email containing time words and make a series of appointments out of it–make a little gantt chart for you automatically–so you could see your commitments in context. I’m sure someone’s working on that.

The data modeling sessions at Pause have always had a big impact and so far there are some great ones planned for October in Portland.

Dave Graham – : Let’s Party! – pitfalls and benefits to implementing a Party Model and generalized frameworks in FileMaker.

Jason Young – SeedCode : Wet and Dry Development in FileMaker checking our assumptions

Todd Geist – geistinteractive : Universal Context You can get there from here!

Kevin Frank : Runtime Code – Blurring the distinction between data and schema. If you have examples, bring them to share.

(Complete Schedule)

These remind me of the grand-daddies of data modeling sessions: Ernest Koe’s 2010 session on MVC, and Corn Walker’s followup in 2011: Beyond A/B: A Minimalist Graph Approach – What happens when you take Chris Crim’s vision seriously?

(Sessions won’t be recorded this year unless presenters want to record their own.)logo

A couple of demos showing how you can reveal additional text, or even new buttons, when rolling over buttons in FileMaker 13. We used to hide text from some button states by making the text unusually large, but Jason Young showed us a much better method. More in the video below.

Download the “Hover Tricks” example file towards the bottom of our downloads page.

Want more? Subscribe to SeedCode for more tips.

Testing code is one thing, but how do we test our ideas. (I’m not talking about validating ideas with customers as in Lean Startup, but testing an idea against your gut. Is there a way to measure that?)

When you’re small, opportunity costs are huge–your best customer is another customer you didn’t meet–so how do you know at a real gut level if you’re making a decision for the right reasons or if you’re reacting to fear? How you do test if you’re aligned with your idea?

runtestlg2The Running Test is one way to get information about decisions, and I’ve found its results surprising. When I’m mulling something over, I’ll find it has one of two impacts on my run. I’m not a brand new runner, but it’s not second nature either; each run has a good amount of talking to myself about slowing down or walking this part of the trail. But sometimes I move through those parts of the trail much more easily–if the idea I’m mulling over is a good one, I find it gives the run energy. I see the idea expanding and suggesting new ones. My run times are actually faster: sometimes a lot faster.

The opposite experience is pretty hard to miss also: there is more negative self-talk than usual on the run and I find myself rehearsing negative outcomes or confrontations. Run times are slower and I am walking up those hills. 

The first time this surprised me I was preparing my talk for DevCon and figured I should chastise myself just a little for agreeing to speak at the conference at all: it wasn’t strictly on mission and would take a lot of time I should be devoting to getting our new calendar wrapped up. Instead I found myself sketching segments of the talk on my run and really enjoying how the talk came together. I was running a bit faster than normal and not worrying about the hills or tough sections of the trail: there was no background worry for that trail-worry to attach itself to.

I was going to enjoy working on this talk and that was somehow not clear to me before the Running Test. It was also on mission as I now saw the talk connected to all the things we were doing in our new calendar. Maybe the run wasn’t so much a test as a creativity-lab, a place to spin up better versions of the idea. But while new ideas certainly come on runs,  the Running Test feels more like a gut check.

Good ideas let me run faster. Strangely, it’s sometimes that simple.

JavaScript Functions for Speed and Profit

The movie below is from one of our most popular demos from “Year in Review” at DevCon 2014. I was talking about what a breakthrough custom functions were back in 2004 and how they unlocked a whole new kind of code-sharing among FileMaker developers. JavaScript functions in FileMaker may unlock even more potential.

Jason Young introduced the idea of using JavaScript as a calculator–as a library of functions–instead of using it for perhaps the more obvious purpose of building interface elements. (Jason’s original article on this can be seen as part 1 of this post.) This gives us a huge opportunity to share and borrow code from the immense catalogue of JavaScript functions and examples.

FileMaker Custom Functions Forum

FileMaker engineers start posting custom functions to a public forum: March 2004

As just one example, we (Jason) rewrote the venerable “namwoB” function in JavaScript. namwoB was the first recursive functions I ever saw and was posted by Andy LeCates back in March of 2004. The title comes from Court Bowman’s name spelled backwards… which is all the functions does, rewriting a string of text in reverse. This simplicity makes it a great way to talk about the different kinds of recursion in FileMaker and what a faster version of the function might look like in JavaScript.

Our example file shows the same recursive custom functions done as a “stack” recursive function (limited to about 10k loops), as a “tail” recursive function (limited to 49,999 loops), and as a JavaScript function executed in a webviewer and then passed into a FileMaker script.

Download the example file

JavaScript Functions in FileMaker are Fast

Looping through 49,000 characters took our tail-recursive custom function almost 3 seconds.

The JavaScript version of the function looped through 10 times that much text–nearly 500,000 characters–in 3/10ths of a second.

And thanks to the improved fmp url in FileMaker 13, we can grab the results of functions like these quite easily. The movie below demos this and walks through our example file. It also gives a nice side-effect-demo of how webviewers get their own thread in FileMaker Pro and what that may mean for trying to measure performance.

Want more? Subscribe to SeedCode for more tips.

DayBack Calendar
Download DayBack and we'll send you a couple short emails with tips on how to modify it and use some of the little known features.
Thank you! Please download: DayBack Calendar
Want More?
Be the first to see articles and tips like these
Need More?
SeedCode tips & example files in your inbox
Need More?
SeedCode tips & example files in your inbox
Want More?
Be the first to see articles and tips like these