admin

This user hasn't shared any biographical information


Posts by admin

Trigger a script from a link in a web viewer

Since the introduction of the webviewer layout object back in version 8.5, folks have wanted a way to trigger a script by clicking a link in the webviewer.   Why?  Because the webviewer offers so many other ways to display and interact with data.  Here’s a practical example.  Let’s say you have a huge layout covered with fields.  Instead of making the user scroll around, or click tabs, or go to another layout, you want a spot where all the important data is nicely displayed and formatted.  No big deal.  You could do that with another field that combines the important fields into one text block.  Well, what if you wanted to click on a word or phrase in that text block to trigger a script that displays extra details?  You can’t apply a button action to a word in a text field.   But you can apply a hyperlink to a word in an HTML page.

If you google around, you’ll be told that you can’t trigger a script from an element in a webviewer without a plugin, or javascript, or an external html file, or a web server.  But you can.

I wrote a really nice description of the solution on FileMaker Forums, but the site wouldn’t accept any of the code for some reason.  Maybe a copyright thing, I don’t know.  I closed the post before I copied the description.  So I’m not going to rewrite it all here.

I will say that it involves using the “FMP://” hypertext prefix designed by FileMaker to launch a file and run a script from an external source like an email message or web site.  The trick to making it work within a web viewer is to know how host file paths work.

Here’s a teaser:

If you make a calc field called ‘path’ that does this…

“\”FMP://”&Get ( HostIPAddress )&”/”&Get(FileName)&”?script=hello&param=world\”"

and then a webviewer with address calculated to do this…

“data:text/html,
<html>
<body>
<a href=”
&
mydatabase::path
&
“>Run My Script</a>
</font></body></html>”

You’ll see a link in your webviewer that will run the hard coded named script along with a parameter.

Come to our next meeting for more about this solution.  Join the mailing list if you want to be reminded about the next meeting.

October 2013 Meeting Recap

October saw our lightest attendance to date – TWO enthusiasts – including the moderator.  Hey, it’s all good.  Tracy is normally very reserved, so enjoyed some valuable one on one attention to her issues.  I always said that if just one member shows up, or even nobody, that the meeting will still go on.  It’s about dedication and commitment.  You can’t develop a FileMaker database without committing to it and seeing it through no matter how hard or lonely it gets.   For me as a developer, the most enjoyable part of the job is listening to a user’s challenges.  Novice users speak in the most innocent and unassuming terms when describing what they want their database to do.  Every wish list item is an opportunity to  find the best solution.  I walked away from this meeting with the spark of an idea to a problem that’s been bothering me for years.  And the following day I solved it.  So October was one of the most enjoyable and rewarding meetings to date.  That’s not to say don’t show up, no no no.  It just means you get out of things what you put into them.

Designated Drivers

Don’t Forget FileMaker Fans,

We have an exciting meeting today at 4pm at La Pietra.  There are two changes to the agenda.

First Change:  Refreshments will be served courtesy of Island Network Solutions, LLC!

Second Change:  I’ll  kick off our “Designated Driver” party by creating an empty FileMaker database.  In FileMaker Advanced I’ll convert it to “KiosK Mode”.  This will make our little community app look much cleaner in FileMaker Go.  Then I will upload it to FileMaker Server.

From that point on, we can all develop the app simultaneously. This experience will show us some of the limitations of co-development or working on a solution while clients are connected. But we’ll also see our work appear before our eyes in real-time!  It also means you won’t be limited to 10 minutes, and not everyone will be watching you work.  Pheew! Pressure off.  It’s going to be crazy and fun.

So bring a laptop with FileMaker Pro 12 or FileMaker Advanced 12.  I’ll bring several laptops with FileMaker 12 to share around.

See you at 4,

Kent

photo

Best Meeting So Far

Noriko, Jesse, Mike, Jordan, Sandi, Milton, Jaye, James, JJ, and several others who arrived a little late.

We had a really great meeting in November, and not just because Milton showed off an iPad Mini.  Jesse Pu’a of In Touch Info Tech systems joined us.  As an IT consultant and solutions and service provider, he’s seen a lot of database systems.  But when it came to deciding on a new system for his own company, FileMaker was the compelling choice.

The format for the meeting was Jesse assuming the role of the “customer”, and the more experienced members of the group took the role of FileMaker “developer”.  We discussed the needs of his database and reviewed the all important design aspects of a good database.  Then we got to work actually building it.

The less experienced members of the group received important training on the fundamentals of good design.  Sometimes we inherit databases from others, and don’t always understand the initial logic used to create it.  By starting a database from scratch, we’re reminded of the issues the initial designers may have faced.

Everyone contributed to the design and development of the sample database.  We kept things simple and stuck to the basics.  Above all, we had fun laughing over the complex and challenging issues that arise even with a seemingly simple solution.

Photo May 01, 4 18 43 PM

FileMaker 12!

Alexi Folger, FileMaker Senior Systems Engineers, points out a powerful new feature in version 12.

Glen Suarez and Alexi Folger were back in town for the May meeting.  Glen explained the new licensing guidelines of FileMaker version 12, and confirmed the fact that FileMaker Go 12 for iOS is a free download from the App Store. With 35 million iPhones and 11 million iPads sold last quarter, the ocean of devices for FileMaker solutions is vast.

Glen Suarez

After Glen’s presentation, Alexi wasted no time wading into the new waters of FileMaker 12.  indeed she could only wade within the short hour and half she had to cover a plethora of new features in both FileMaker Server as well as FileMaker Pro.  New tools for layout themes, alignment, and layout parts.  New tools for charting.  And new tools for storing container data outside of FileMaker at specified directories on the host computer.

 

3rd Meeting A Charm

The focus of the November 5, 2010 meeting was “anchor buoy” relationship graph design.  Eleven attendees relearned an effective way to structure table occurrences in FileMaker’s relationship graph.

Milton’s humble demeanor and unbridled enthusiasm for FileMaker made for an enjoyable and informative presentation. His MacBook Air was pretty cool too.

Milton Shak gave the presentation, building an invoice system from the ground up, stepping through the process of creating a common set of table occurrences for each table in the database.  Sensitive to everyone’s level of experience, Milton made no assumptions about our experience drawing an Entity Relationship Diagram (ERD), and dove right in to how FileMaker handles the concept.  Even the seasoned developers in attendance appreciated revisiting the practice of using a well organized relationship graph.

Look for Milton’s example database and other materials that will be available for download in the Solutions section.

We started the meeting on time as always.  Milton’s presentation took an hour, plus half an hour of Q&A.  We spent the last 30 minutes for open discussion.  Suggestions for our next meeting included best layout design practices, conditional formatting, and script triggers.  It was also proposed that we use the last half hour to break up into focus teams.  Members would bring their laptops and work directly on their issues along side others who are interested or struggling with similar issues.

Stay tuned for the next meeting announcement and agenda.  Until then, have a great FileMaker Weekend.

Dynamic Menu – Part 3

The heart of Dynamic Menu is the script that populates the repeating fields with the names of the layouts.

#_________________________________________clear menu
Set Variable [ $MenuCount; Value:60 ]
Set Variable [ $MenuNo; Value:1 ]
Loop
 Set Field [ !menu::menu[$MenuNo]; "" ]
 Exit Loop If [ $MenuNo = $MenuCount ]
 Set Variable [ $MenuNo; Value:$MenuNo+1 ]
End Loop
#_________________________________________set defaults
Set Variable [ $LayList; Value:LayoutNames("DynamicMenu") ]
Set Variable [ $LayCount; Value:ValueCount($LayList) ]
Set Variable [ $LayNo; Value:1 ]
Set Variable [ $LayCurrent; Value:GetValue($LayList; $LayNo) ]
Set Variable [ $LayCurrentMask; Value:Left($LayCurrent; 1) ]
If [ Get(CurrentPrivilegeSetName)="[Full Access]" ]
 Set Variable [ $Masks;Value:"0¶1¶2¶3¶4¶5¶6¶7¶8¶9¶~¶`¶!¶@¶#¶$¶%¶^¶&¶*¶(¶)¶_¶=¶+¶[¶]¶}¶¶|¶;¶:¶'¶,¶<¶.¶>¶/¶?" ]
Else
 Set Variable [ $Masks;Value:"0¶1¶2¶3¶4¶5¶6¶7¶8¶9¶~¶`¶!¶@¶#¶$¶%¶^¶&¶*¶(¶)¶_¶=¶+¶[¶]¶}¶¶|¶;¶:¶'¶,¶<¶.¶>¶/¶?¶{" ]
End If
Set Variable [ $MaskCount; Value:ValueCount($Masks) ]
Set Variable [ $MaskNo; Value:1 ]
Set Variable [ $MaskCurrent; Value:GetValue($Masks; $MaskNo) ]
Set Variable [ $MenNo; Value:1 ]
#_________________________________________start building the menu
Loop
 Set Variable [ $LayCurrent; Value:GetValue($LayList; $LayNo) ]
 Set Variable [ $LayCurrentMask; Value:Left($LayCurrent; 1) ]
 Set Variable [ $MenCurrent; Value:GetValue($LayList; $LayNo) ]
 Set Variable [ $MaskNo; Value:1 ]
#_________________________________________
  Loop
   Set Variable [ $HideLayout; Value:0 ]
   Set Variable [ $MaskCurrent; Value:GetValue($Masks; $MaskNo) ]
   If [ $LayCurrentMask = $MaskCurrent ]
    Set Variable [ $HideLayout; Value:1 ]
   End If
 Exit Loop If [ $MaskNo = $MaskCount or $LayCurrentMask =$MaskCurrent ]
 Set Variable [ $MaskNo; Value:$MaskNo+1 ]
 End Loop
#_________________________________________
  If [ $HideLayout=0 ]
   Set Field [ !menu::menu[$MenNo]; $MenCurrent ]
   Set Variable [ $MenNo; Value:$MenNo+1 ]
  End If
Exit Loop If [ $LayNo = $LayCount ]
Set Variable [ $LayNo; Value:$LayNo+1 ]
End Loop