Creating a custom app > Working with plug-ins > Plug-in update example
 

Plug-in update example

The following example compares the version of an installed plug-in to the version located in a container field in the FileMaker Pro Advanced file and updates the plug-in, if necessary.

1. In the solution file, create a table named Plugin Update to store plug-in information.

2. Define the following fields:

 

Field name

Field type

Plugin Name

text

Required Plugin Version

number

Installed Plugin Version

calculation (unstored). For example code, see Client plug-in version calculation below.

Installed Plugin State

calculation (unstored). For example code, see Client plug-in enabled state calculation below.

Plugin File

container

3. Create a layout named Plugin Update Information and add to it the fields you defined in step 2.

4. Create the following script and name it Install Plug-in:

Set Error Capture [On]
Install Plug-In File [Plugin Update::Plug-in File]
#
#Deal with errors
If [Get(LastError) 0]
If [Get(LastError) = 3]
Show Custom Dialog [Plugin Update::Plugin File & " could not be installed. Ensure Allow Solutions to Install Files is selected in the FileMaker Pro Advanced Plug-in preferences."]
Else If [Get(LastError) = 1550]
Show Custom Dialog [Plugin Update::Plugin File & " was installed but could not be initialized."]
Else If [Get(LastError) = 1551]
Show Custom Dialog [Plugin Update::Plugin File & " could not be installed."]
Else
Show Custom Dialog ["A general error " & Get(LastError) & " occured when installing " & Plugin Update::Plugin File]
End If
End If

5. Create the following script and name it Check Plug-in Versions.

Go to Layout ["Plugin Update Information"]
Go to Record/Request/page [First]
Loop
If [Plugin Update::Installed Plugin Version < Plugin Update::Required Plugin Version]
#Plug-in needs to be either installed or updated.
Perform script [Specified: From list ; "Install plug-in" ;
Parameters: ]
End If
Go to Record/Request/page [Next; Exit after last: On]
End Loop

6. Create the following script and name it Check If Enabled:

Set Error Capture [On]
Perform Find [Restore]
#Find for "Enabled" in the Installed Plugin State field
If[Get(FoundCount) 0]
Show Custom Dialog ["Some required plug-ins are not enabled. Ensure Allow Solutions to Install Files is selected in the FileMaker Pro Advanced Plug-in preferences."]
End If

7. Create a start-up script named Plugin Update Script that references the above scripts in order when the database opens:

Perform Script [Specified: From list ; "Check Plug-in Versions" ;
Parameters: ]
Perform Script [Specified: From list ; "Check If Enabled" ;
Parameters: ]
Go to Layout [original layout]

Client plug-in version calculation

Let (
[
PluginNamePosition = Position ( Get(InstalledFMPlugins); Plugin Name ; 1 ; 1 );
PluginVersionStart = PluginNamePosition + Length( Plugin Name ) + 1;
PluginVersionEnd = Position ( Get(InstalledFMPlugins); ";" ; PluginNamePosition ; 2 );
PluginVersionLength = PluginVersionEnd - PluginVersionStart
];
If ( PatternCount ( Get (InstalledFMPlugins) ; Plugin Name ) = 0 ; "" ; Middle ( Get(InstalledFMPlugins) ; PluginVersionStart ; PluginVersionLength ) )
)

Client plug-in enabled state calculation

Let (
[
PluginNamePosition = Position ( Get(InstalledFMPlugins); Plugin Name ; 1 ; 1 );
PluginStateStart = Position ( Get(InstalledFMPlugins); ";" ; PluginNamePosition ; 2 ) + 1;
PluginStateEnd = If ( Position ( Get(InstalledFMPlugins); "¶" ; PluginNamePosition ; 1 ) > 0; Position ( Get(InstalledFMPlugins); "¶" ; PluginNamePosition ; 1 ); Length( Get(InstalledFMPlugins) ) + 1 );
PluginStateLength = PluginStateEnd - PluginStateStart
];
If ( PatternCount ( Get (InstalledFMPlugins) ; Plugin Name ) = 0 ;
"" ; Middle ( Get(InstalledFMPlugins) ; PluginStateStart ; PluginStateLength ) )
)

Notes 

For plug-ins to install, the Allow Solutions to Install Files option must be selected in the client’s plug-in preferences. See Setting plug-in preferences.

If a plug-in has been disabled in the client’s Plug-in preferences, it will install but will not be accessible until it is manually enabled by the user.

Only one plug-in can be stored in each container field, but you can view all plug-in information by creating multiple plug-in container fields on a single layout.

Related topics 

Creating custom plug-ins

Get(InstalledFMPlugins)

Install Plug-In File