插件更新示例

以下示例会将已安装的插件版本与位于 FileMaker Pro 文件的容器字段中的版本进行比较,并在必要时更新插件。

  1. 在定制化 App 文件中,创建一个名为"插件更新"的表用来存储插件信息。
  2. 定义以下字段:
  3. 字段名

    字段类型

    插件名

    文本

    所需的插件版本

    数字

    已安装的插件版本

    计算(不存储)。有关示例代码,请参阅下面的客户端插件版本计算

    已安装的插件状态

    计算(不存储)。有关示例代码,请参阅下面的客户端插件启用状态计算

    插件文件

    容器

  4. 创建名为“插件更新信息”的布局,并将其添加到您在步骤 2 所定义的字段中。
  5. 创建以下脚本并将其命名为“安装插件”:
    复制
    设置错误捕获 [打开]
    安装插件文件 [插件更新::插件文件]
    #
    #处理错误
    If [Get ( 上一个错误 ) ≠ 0]
        If [Get ( 上一个错误 ) = 3]
            显示自定义对话框 [插件更新::插件文件 & " 无法安装。确保在 "FileMaker Pro 插件设置" 中已选择 "允许解决方案安装文件"。]]
        Else If [Get(上一个错误) = 1550]
            显示自定义对话框 [插件更新::插件文件 & " 已安装但无法初始化。"]
        Else If [Get(上一个错误) = 1551]
            显示自定义对话框 [插件更新::插件文件 & " 无法安装。"]
        Else
            显示自定义对话框 ["安装" & 插件更新::插件文件 & "时发生了常规错误" & Get(上一个错误) ]
        End If
    End If
  6. 创建以下脚本并将其命名为“检查插件版本”。
    复制
    转到布局["插件更新信息"]
    转到记录/请求/页面[ 第一个 ]
    Loop [ 刷新: 始终 ]
        If [插件更新::已安装的插件版本 < 插件更新::所需的插件版本]
            #需要安装或更新插件。
                    执行脚本[指定的: 来自列表; "安装插件";
            参数: ]
        End If
        转到记录/请求/页面[下一步; 最后一步后退出: 打开]
    End Loop
  7. 创建以下脚本并将其命名为“检查是否已启用”:
    复制
    设置错误捕获 [打开]
    执行查找 [恢复]
    #在 "已安装的插件状态" 字段中查找 "已启用"
    If[Get (查找个数) < Get (总记录数)]
    显示自定义对话框 ["未启用部分所需的插件。确保在 "FileMaker Pro 插件" 设置中已选择 "允许解决方案安装文件"。]
    End If
  8. 创建一个名为插件更新脚本的启动脚本,在数据库打开时按顺序引用上述脚本:
    复制
    执行脚本[指定的: 来自列表; "检查插件版本";参数:]执行脚本[指定的: 来自列表; "检查是否启用"; 参数: ]转到布局[原始布局; 动画: 无]

客户端插件版本计算

复制
Let (
    [
    PluginNamePosition = Position ( Get( 安装的 FM 插件); Plugin Name ; 1 ; 1 );
    PluginVersionStart = PluginNamePosition + Length( Plugin Name ) + 1;
    PluginVersionEnd = Position ( Get( 安装的 FM 插件 ); ";" ; PluginNamePosition ; 2 );
    PluginVersionLength = PluginVersionEnd - PluginVersionStart
    ];
    If ( PatternCount ( Get ( 安装的 FM 插件 ) ; Plugin Name ) = 0 ; "" ; Middle ( Get( 安装的 FM 插件 ) ; PluginVersionStart ; PluginVersionLength ) )
)

客户端插件启用状态计算

复制
Let (
    [
    PluginNamePosition = Position ( Get( 安装的 FM 插件 ); Plugin Name ; 1 ; 1 );
    PluginStateStart = Position ( Get( 安装的 FM 插件 ); ";" ; PluginNamePosition ; 2 ) + 1;
    PluginStateEnd = If ( Position ( Get( 安装的 FM 插件 ); "¶" ; PluginNamePosition ; 1 ) > 0; Position ( Get( 安装的 FM 插件 ); "¶" ; PluginNamePosition ; 1 ); Length( Get( 安装的 FM 插件 ) ) + 1 );
    PluginStateLength = PluginStateEnd - PluginStateStart
    ];
    If ( PatternCount ( Get( 安装的 FM 插件 ) ; Plugin Name  ) = 0 ;
    "" ; Middle ( Get( 安装的 FM 插件 ) ;  PluginStateStart ; PluginStateLength ) )
)

注释 

  • 对于要安装的插件,必须在客户端的插件设置中选择“允许解决方案安装文件”选项。请参阅更改插件设置
  • 如果在客户端的“插件”设置中已禁用插件,也会安装该插件,但是在用户手动启用它之前,无法对其进行访问。
  • 在每个容器字段中只能存储一个插件,但是您可以通过在单个布局上创建多个插件容器字段,来查看所有插件信息。