关于在 FileMaker Server 和 FileMaker Cloud 上运行脚本

位于 FileMaker Server 和 FileMaker Cloud 所托管文件中的脚本通常在客户端上运行。但是,您可以通过以下方法在服务器上运行脚本(服务器端脚本):

运行服务器端脚本的不同之处

通过以上两种方法启动的脚本由 FileMaker Script Engine (FMSE) 运行,它是 FileMaker Server 和 FileMaker Cloud 的组件。FMSE 是一个在服务器上以单独的会话运行每个脚本的客户端。因此,服务器端脚本:

  • 不具有客户端的上下文(当前布局、搜索结果、排序顺序、记录、全局字段值,以及本地或全局变量值)

    您可以使用“在服务器上执行脚本”脚本步骤将客户端上下文的有关信息传递到服务器端脚本。服务器端脚本可以使用转到布局脚本步骤执行查找脚本步骤等脚本步骤中的信息指定要进行操作的布局和搜索结果。

  • 支持多达一百万个字符的脚本参数和脚本结果。

  • 只要在以下两个条件为“真” (True) 时才能访问其他 FileMaker Pro 文件:

    • 文件位于同一主机上

    • 文件已由启动服务器端脚本的客户端打开,或者通过在文件的“文件选项”对话框中指定的帐户名和密码进行设置。

服务器端脚本的运行方式相同,与其启动方式无关,但以下情况除外:

  • 使用“在服务器上执行脚本”脚本步骤的客户端具有等待脚本在服务器上完成的选项并使用 Get (脚本结果)函数捕捉结果。

  • 如果运行脚本超过指定的时间限制,可以设置计划来中断。

处理不受支持的脚本步骤

许多脚本步骤受 FMSE 的支持。但是,尝试执行不受支持的脚本步骤会返回错误 3(“命令不可用”),跳过不受支持的步骤,并且继续进行下一步。要处理不受支持的步骤,您的脚本可以使用 If 脚本步骤:

  • Get (上一个错误)函数位于步骤之,以检查步骤是否不受支持,然后执行支持的步骤。例如“打开文件”脚本步骤不受 FMSE 支持,因此服务器上运行的以下脚本将跳过该步骤并在结果中返回“不受支持”。

    复制
    打开文件 [打开隐藏:关闭 ; "发货单备份"]
    If [ Get(上一个错误) = 3 ] 
        退出脚本 [ 文本结果:"不受支持" ]
    End If

  • Get (应用程序版本)函数位于其他步骤之,以检查脚本是否在 FileMaker Server 或 FileMaker Cloud 上运行,然后只执行受支持的步骤。例如:

    复制
    If [ PatternCount (Get (应用程序版本) ; "服务器") > 0 ]
    # 继续执行受 FMSE 支持的脚本步骤
    End If

要查看受 FMSE 支持的脚本步骤,在 FileMaker Pro 的“脚本工作区”中,打开脚本,单击 兼容性按钮,然后选择“服务器”。不受支持的脚本步骤以不同颜色显示。您还可以参阅兼容性表,了解脚本步骤参考中的每个脚本步骤。

在服务器上运行脚本的原因

  • 通过减少客户端与服务器之间的网络流量改进性能

  • 从较慢客户端卸载长时间运行的任务,并将其转移到较快的服务器

  • 让 FileMaker Go 客户端执行需要插件的任务,这些插件在 FileMaker Server 上受支持,但在 FileMaker Go 上不受支持

  • 使用包含 ODBC 数据源(利用服务器的 DSN)的“导入记录”或“执行 SQL 语句”脚本步骤

注释 

  • 如果记录被客户端锁定,则服务器端脚本将无法访问未提交的数据或更改这些记录的内容。

  • 运行服务器端脚本将打开并关闭包含脚本的文件。因此,在脚本启动时 OnFirstWindowOpen 脚本触发器将激活,在脚本结束时 OnLastWindowClose脚本触发器将激活。

  • 服务器端脚本可以使用执行脚本脚本步骤来执行子脚本,这些子脚本在同一 FMSE 客户端会话中运行,前提是这些子脚本在同一服务器上的文件中。此外,当客户端使用“在服务器上执行脚本”脚本步骤运行执行其他文件中子脚本的脚本时,包含子脚本的文件必须已经由客户端打开。

    服务器端脚本也可以以类似的方式使用“在服务器脚本上执行脚本”步骤,但调用的脚本在单独的 FMSE 客户端会话中运行。“等待完成”选项的工作原理与 FileMaker Pro 客户端运行的脚本相同,将脚本结果或错误代码传递回调用方,本例中为调用的 FMSE 客户端。然而,关闭此选项后,调用脚本可以继续执行,调用的脚本可以在自己的线程中运行。

  • 服务器端脚本也可以以类似的方式使用“在服务器上执行脚本”脚本步骤,但调用的脚本在单独的 FMSE 客户端会话中运行

  • 由“在服务器上执行脚本”运行的脚本使用同一帐户作为客户端。由计划运行的脚本使用在计划中指定的帐户。

  • 脚本在客户端上运行时,服务器端脚本不能使客户端显示 FileMaker 警报消息,因此服务器端脚本会一直执行,如同将设置错误捕获脚本步骤设置为“开启”一样。使用服务器端脚本中的 Get (上一个错误)函数可以处理错误条件。为帮助您排除问题的故障,错误也会写入 FileMaker Server 和 FileMaker Cloud 上的事件日志。

  • 客户端无法停止服务器端脚本。但是,在以下情况下,可以停止服务器端脚本:

    • 服务器管理员停止脚本,它会显示为独立的客户端并且可从 用于 FileMaker Server 或 FileMaker Cloud 的 Admin Console 断开

    • 运行的脚本超出启动它的计划中指定的时间限制

    • 脚本遇到未知的脚本步骤(请参阅允许用户异常中断脚本步骤

    请参阅 FileMaker Server 帮助FileMaker Cloud 帮助

  • 在服务器端脚本中,与 Get(系统 IP 地址)等硬件相关的功能从 FileMaker Server 和 FileMaker Cloud 的数据库服务器组件而不是客户端返回信息。

  • 对于服务器端脚本,访问限制为 Documents 文件夹和临时文件夹。请参阅服务器端脚本中的路径

  • 在服务器端脚本中,打开包括对话框选项无法显示对话框,并可能返回错误。要避免此错误,请在服务器端脚本中关闭包括对话框