Developer’s Guide
Table Of Contents
- Contents
- Chapter 1 Introducing FileMaker Developer 5
- Chapter 2 Customizing your database solution
- About the custom solution examples
- Using the FileMaker Developer Tool
- Binding your databases into a runtime database solution
- Displaying databases in Kiosk mode
- Renaming your databases
- Removing design access to your databases
- Customizing the About, Help, and Scriptsmenus
- Adding the FileMakerPro extension to database filenames
- Saving your settings in the Developer Tool
- Chapter 3 Preparing files for a custom solution
- About the Relational Example
- General steps for preparing your solutionfiles
- Issues to consider before creating a runtime database solution
- Opening files in Kiosk mode
- Design tips for navigating in Kiosk mode
- Creating startup scripts
- Using button image samples
- Documenting your database solution
- 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
- Protecting your runtime database solutionfiles
- Testing before and after creating yoursolution
- Converting and upgrading solution files
- Chapter 4 Distributing FileMakerPro runtime database solutions
- Chapter 5 Creating custom layout themes
- Chapter 6 Publishing your database on the Web
- Moving forward using open web standards
- Using the FileMakerPro Web Companion
- Displaying a custom home page
- Using a custom home page with Instant Web Publishing
- Monitoring your site
- Exporting data to a static HTML page
- Testing your site without a networkconnection
- Opening password-protected databasesremotely
- Using the Web Security Database
- Chapter 7 Using FileMakerPro XML to deliver your data
- About the XML examples
- General process for custom web publishing using XML
- Generating an XML document
- Using the FMPDSORESULT grammar
- Using the FileMakerPro Extended XMLgrammars
- About UTF-8 encoded data
- Generating FileMakerPro CGI requests for an XML document
- Using style sheets with your XMLdocument
- Comparing CSS, XSLT, and JavaScript
- Looking at the XML Inventory example
- Chapter 8 Using Java and JDBC to deliver your data
- About the JDBC examples
- About JDBC
- Using the FileMaker JDBC Driver
- SQL supported by the FileMaker JDBCDriver
- FileMakerPro support for Unicodecharacters
- About the FileMaker JDBC Driver interfaces and extensions
- Example 1: Looking at the FileMakerPro Explorer application
- Example 2: Creating the JBuilder Inventoryapplication
- Example 3: Creating the Visual Cafe Inventory application
- Using the FileMaker Java classes
- Chapter 9 Custom web publishing using CDML
- About the CDML examples
- General steps for custom web publishing using CDML
- About CDML format files
- Generating FileMakerPro CGI requests using CDML
- Using the CDML Tool and templates
- New and modified CDML tags
- About the CDML Reference database
- Creating error messages
- Using an encoding parameter with a CDML replacement tag
- Planning your web site
- Chapter 10 Writing external function plug-ins
- About the plug-in examples and templates
- Installing, enabling, and configuring FileMakerPro plug-ins
- Using external functions in a calculation
- Requirements for writing an external function plug-in
- FileMakerPro messages sent to theplugin
- Debugging your plug-in
- Avoiding potential MacOS resourceconflicts
- Providing documentation for your plug-in
- Naming and registering your plug-ins
- Appendix A Feature comparison of the runtime application and FileMakerPro
- Appendix B Valid names used in CGI requests for FileMaker 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
- 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
10-12
Developer’s Guide
The names of the external functions start at string ID 144 for
Windows and are defined as a STR# resource with ID 144 for the
Mac OS. The first exported function name is mapped to ID 0 and
increased incrementally by 1 for each following name. These ID
numbers are then used to switch to the correct processing routine.
The input and result parameters of the External Function message are
Mac OS style Handles that contain text using Macintosh character
set encoding. This means that all numbers are also represented as
text. The result Handle is always empty when the External Function
message is sent. You should only manipulate the Handles using the
memory manager callback routines that are defined in FMExtern.h.
In the Mac OS, the parameters will be real Mac OS Handles, but you
cannot depend on which heap they may be located in. In Windows,
these Handles exist in the FileMaker Pro memory manager pool and
have no relation to anything called a HANDLE in the Win32s APIs.
Depending on the value of the param2 variable, the Full Example
plug-in will run the following external functions:
For information on each external function, see “Description of the
Full Example plug-in’s external functions” on page 10-6.
The Preferences message
The Preferences message, kFMXT_DoAppPreferences, is sent in
response to a user clicking the Configure button for the selected plug-
in in the Application Preferences dialog box.
The plug-in should display a dialog box of some sort that will allow
the user to set any specific configuration data required by the plug-
in. If the plug-in requires user-definable preferences, you should
implement your UI here. The Configure button will only be enabled if
the sixth character of the feature string is set to “Y” (see “Required
feature string syntax” on page 10-8).
Any options that need to be saved should be placed in their own
registry entry or .INI file (Windows) or in their own preference file
(Mac OS).
The Full Example plug-in needs to implement a configuration dialog
box for the Xpl-Format function, so the flag has been set in the
feature string (
Xmpl1YYYnnn) and the function Do_AppPrefs is called
when the Preferences message is received.
Like the
Do_Init function, the code for displaying a dialog box and
setting the preferences is quite different on both platforms, so
preprocessor flags are used to select the appropriate code at compile
time. The Windows code passes the function
prefProc to the
DialogBox routine to control the dialog and set the registry entries.
The Mac OS code also calls an additional function called
writePrefs
to write the preference information to disk.
Debugging your plug-in
You can debug code resources or shared libraries easily if you use
the DisplayMessage function. The DisplayMessage function is
defined in the FMTemplate.c and FMExample.c files.
Your plug-in code could also include a preprocessor instruction to
cause your plug-in to behave differently during the debugging
process. For example, the Full Example plug-in will behave in the
following ways when the DEBUG_VERSION flag is set to “1”:
1 The DebugPlugin routine will be substituted for the PluginVersion
function.
This param2
value
Corresponds to this
external function name
And causes the plug-in
to run this function
0 Xpl-Version PlugInVersion
1 Xpl-BigPI funct_PI
2 Xpl-Format funct_Format
3 Xpl-NumWords funct_Num2Words