Developer’s Guide
Table Of Contents
- Chapter 1 Welcome to FileMaker Developer
- Chapter 2 Installing FileMaker Developer in Windows
- Chapter 3 Installing FileMaker Developer in the Mac OS
- Chapter 4 Creating a database solution
- Overview of preparing your solutionfiles
- Considerations for a runtime databasesolution
- Considerations for Kiosk mode
- Using scripts to control your solution
- Protecting your database solution files
- Providing user documentation
- Design tips for cross-platform solutions
- Creating a consistent appearance
- Simulating outline and shadow text styles
- Using common character sets
- Designing text layouts for cross-platform solutions
- Using a common color palette
- Using graphics in cross-platform solutions
- Using QuickTime movies in cross-platform solutions
- Showing the status bar in Windows
- Using separate scripts for printing
- Using the Status (CurrentPlatform) function
- Creating platform-specific scripts
- Your responsibilities as a developer
- Testing before and after creating your solution
- Converting and upgrading solution files
- Chapter 5 Creating custom layout themes
- Chapter 6 Using the FileMaker Developer Tool
- About the solution examples
- Using the FileMaker Developer Tool
- Binding your databases into a runtime database solution
- Creating Kiosk-mode solutions
- Renaming your databases
- Removing design access to your databases
- Customizing the About, Help, and Scripts menus
- Adding the FileMaker Pro extension to database filenames
- Saving your settings in the Developer Tool
- Chapter 7 Distributing FileMaker Pro runtime database solutions
- Chapter 8 Publishing your database on the Web
- Types of web publishing
- Using the FileMaker Pro Web Companion
- Creating a custom home page
- Creating a custom home page for Instant Web Publishing
- Creating a custom web site using a database layout
- Web Companion support for Internet mediatypes
- Monitoring your site
- Exporting data to a static HTML page
- Testing your site without a network connection
- Opening password-protected databases remotely
- Chapter 9 Custom web publishing using CDML
- About the CDML examples
- General steps for custom web publishing using CDML
- About CDML format files
- Generating FileMaker Pro CGI requests using CDML
- Using the CDML Tool and templates
- About the CDML Reference database
- Creating error messages
- Using an encoding parameter with a CDML replacement tag
- Planning your web site
- Chapter 10 Using FileMaker Pro XML to deliver your data on the Web
- About the XML examples
- General process for custom web publishing using XML
- Generating an XML document
- Using the FMPDSORESULT grammar
- Using the FileMaker Pro Extended XML grammars
- About UTF-8 encoded data
- Generating FileMaker Pro CGI requests for an XML document
- Using style sheets with your XML document
- Comparing CSS, XSLT, and JavaScript
- Looking at the XML Inventory example
- Chapter 11 Using JDBC to deliver your data
- About the JDBC examples
- About JDBC
- Using the FileMaker JDBC Driver
- SQL supported by the FileMaker JDBC Driver
- FileMaker Pro support for Unicode characters
- About the FileMaker JDBC Driver interfaces and extensions
- Example 1: Looking at the FileMaker Pro Explorer application
- Example 2: Creating the JBuilder Inventory application
- Example 3: Creating the Visual Cafe Inventory application
- Chapter 12 Understanding external function plug-ins
- About external functions
- About the plug-in example file
- Installing, enabling, and configuring the example plug-in
- Description of the FMExample plug-in’s external functions
- Using the example plug-in
- Customizing the plug-in example
- Requirements for writing an external function plug-in
- FileMaker Pro messages sent to the plug-in
- Debugging your plug-in
- Avoiding potential Mac OS resourceconflicts
- Providing documentation for your plug-in
- Registering your plug-ins
- Appendix A Feature comparison of the runtime application and FileMaker Pro
- Appendix B Valid names used in CGI requests for FileMaker Pro XML data
- Generating a –find, –findall, or –findany request
- Generating a –view request
- Generating a –new request
- Generating an –edit request
- Generating a –delete request
- Generating a –dbnames request
- Generating a –layoutnames request
- Generating a –scriptnames request
- Generating a –dbopen request
- Generating a –dbclose request
- Generating a -dup request
- Generating an -img request
- Specifying parameters for the request
- –db (Database)
- –lay (Layout)
- –format (Format)
- –recid (Record ID)
- –modid (Modification ID)
- –lop (Logical operator)
- –op (Comparison operator)
- –max (Maximum records)
- –skip (Skip records)
- –sortfield (Sort field)
- –sortorder (Sort order)
- –script (Script)
- –script.prefind (Script before Find)
- –script.presort (Script before Sort)
- –styletype (Style type)
- –stylehref (Style href)
- –password (Database password)
- field name (Name of specific field)
- Appendix C FileMaker Pro values for error codes
- Index
Understanding external function plug-ins 12-11
The Initialization message
The Initialization message, kFMXT_Init, is sent to the plug-in
whenever it is enabled in FileMaker Pro. This may or may not
correspond with the startup of the FileMaker Pro application,
depending on whether the plug-in is enabled in the Application
Preferences dialog box.
There are three possible result values that the plug-in should return
in response to the Initialization message:
• kBadExtnVersion should be returned if the version number passed is
less than the value of
kMinExtnVersion or greater than the value of
kMaxExtnVersion. This prevents the plug-in from running on an
incompatible version of the API it was compiled with.
• kDoNotEnable should be returned if the plug-in should not be
enabled. This could be the result of a specific piece of hardware
missing or that a certain system software component was not of the
proper version number. If the plug-in is going to return this value, it
should first display some type of alert telling the user why it could
not be enabled.
• kCurrentExtnVersion is the only other result value that should be
returned. This causes the plug-in to be enabled.
For the FMExample plug-ins, the Do_PluginInit function is called
when the Initialization message is received. The Do_PluginInit
function first checks the version of the API that the plug-in was
compiled with to verify if it’s compatible with the version of
FileMaker Pro that has loaded it. Then the function checks for
preferences and sets them if they exist. If no preferences currently
exist, it will create them with default values.
In Windows, these preferences are stored as registry entries. In the
Mac OS, they are stored in a file within the Preferences folder of the
System Folder. Due to the differences between the way this
information is stored on the two platforms, the Do_PluginInit
function uses preprocessor instructions to choose the correct code at
compile time. The preprocessor flags controlling the selection
process can be found in the FMFlags.h file.
If the preferences are set properly and the API version is okay, the
Do_PluginInit function in the FMExample plug-in will return
kCurrentExtnVersion—otherwise, it will return an error and the plug-
in will not be enabled by FileMaker Pro.
The Shutdown message
The Shutdown message kFMXT_Shutdown, is sent to the plug-in
whenever it is disabled in FileMaker Pro. This may or may not
correspond with the quitting of the FileMaker Pro application,
depending on whether the plug-in is disabled in the Application
Preferences dialog box.
The FMExample plug-in does not allocate any persistent memory on
the heap, and therefore does not do anything when it receives the
Shutdown message. You should implement a clean-up function in
your plug-in, however, to deallocate anything you have on the heap
and exit from any OS services you may be using. Remember that it’s
possible for a plug-in to be enabled and disabled multiple times
during a session so it’s important that your plug-in will clean up
memory.
The Idle message
The Idle message, kFMXT_Idle, is only sent to the plug-in during idle
time if the idle feature flag was set to “
Y” in the feature string and the
plug-in is currently enabled.