打开事务处理

开始事务处理;后续记录更改在“提交事务处理”或“还原事务处理”脚本步骤执行之前将保留在事务处理中。

注释  事务在发起的窗口中处理。在非发起事务窗口执行的窗口操作将自动在现有事务外部提交。

选项 

  • 跳过数据输入验证”直接提交记录,而不考虑为字段设置的任何数据输入验证选项。该选项只跳过对使用“字段选项”对话框中的“仅在数据输入过程中”验证选项设置的字段的验证;即使选定了“跳过数据输入验证”选项,设置为“始终”验证的字段仍需要验证。请参阅定义字段验证

  • 覆盖 ESS 锁定冲突”允许 ODBC 数据源的客户在乐观锁定阻止提交操作时强制提交更改。ODBC 数据源也称为外部 SQL 源 (ESS)。

兼容性 

产品 是否支持
FileMaker Pro
FileMaker Go
FileMaker WebDirect
FileMaker Server
FileMaker Cloud
FileMaker Data API
自定义 Web 发布

原始版本 

19.6.1

说明 

事务处理包括对当前窗口中一条或多条记录的更改。事务中的更改可能会影响多个数据库文件中的多个表。一个事务中的所有更改将一起提交,或者,如果发生错误,将一起还原。事务从“打开事务处理”脚本步骤开始。在开始事务后,后续记录更改将保留在事务中,直到执行“提交事务处理”或“还原事务处理”脚本步骤。下列步骤可以更改数据库架构中存储的记录,可用作事务性脚本步骤。

向脚本添加“打开事务处理”脚本步骤时,“提交事务处理”脚本步骤会自动与之配对。

事务:

  • 在继续之前,请先尝试退出并提交当前活动记录的任何更改。如果它无法退出活动记录,Open Transaction 将返回错误,并跳过事务中的脚本步骤。

  • 将一个或多个字段或表修改合并为一个更改集

  • 提交或还原整个更改集

  • 对“打开事务处理”与“提交事务处理”脚本步骤之间的字段或表修改进行分组

  • 允许您创建更可靠的更改集

  • 可以使用“还原事务处理”脚本步骤自动还原

  • 作为一个组成功(提交)或失败(还原)

  • 符合架构规则时成功

  • 不符合架构规则时自动还原

  • 可以选择在不符合架构规则时跳过验证设置并覆盖自动还原。覆盖架构规则可能会破坏事务的完整性。

  • 在“提交事务处理”脚本步骤之前修改临时本地文件会将更改保存至主文件

事务处理在以下情况时自动提交并结束:

  • 以下脚本步骤更改布局窗口:“新建窗口”、“关闭窗口”或“选择窗口”

  • 使用以下对话框:“管理数据库”、“管理容器”或“管理数据源”

  • 执行以下操作或脚本步骤:“副本另存为”或“重新登录”。

  • 文件关闭

默认情况下,事务处理在以下情况下自动还原:

  • 在开始事务之前存在未解决的架构错误。发生此情况时自动跳过事务处理。

  • 字段更改(设置为始终验证)与字段的验证选项不匹配

  • 使用“还原事务处理”脚本步骤

  • 脚本已取消

  • 在事务中使用“中断脚本”脚本步骤

  • 使用脚本调试器取消了脚本

  • 具有权限错误,例如无字段访问权限、无记录访问权限、无表访问权限

要控制当某些错误发生时事务处理是否自动还原,请使用发生错误时的还原事务处理设置脚本步骤

注释 

  • 嵌套的事务处理:

    • 不允许在同一脚本中(脚本工作区防止将一个事务处理放入另一个事务处理中)

    • 可以在主脚本中打开事务处理,然后使用执行脚本脚本步骤调用子脚本,以进行近似处理。子脚本中的所有内容都在当前打开的事务处理范围内执行。如果子脚本包含打开事务处理和提交事务处理步骤,则跳过这些步骤并返回错误 3(“命令不可用”),但子脚本中这些步骤之前、之间和之后的所有内容都在主脚本的事务处理中执行。如果子脚本包含还原事务处理步骤,则它可以还原主脚本的事务处理,并跳转到事务处理的匹配提交事务处理步骤。请参阅示例 4

  • “删除记录”操作在事务中使用时每次删除一条记录。

  • “清空表记录”操作无法还原。

  • “导入记录”操作在事务中使用时不显示摘要。

  • “还原事务处理”脚本步骤不还原“自动输入序列增量”值。

  • 布局设置中的“自动保存记录更改”选项在事务期间将被忽略。

  • “执行 FileMaker Data API 脚本”步骤所做的更改未包含在脚本的事务处理中。在此脚本步骤中完成的任何操作即使包含在事务处理中,将无法还原。

  • 要确定事务处理当前是否处于打开状态,请使用 Get (事务打开状态)函数

示例 1 

打开并提交事务。

复制
打开事务处理 []
    打开记录/请求
    设置字段 [ Assets::Description ; "描述性文本" ]
提交事务处理

示例 2 

打开并提交没有数据输入验证的事务。

复制
打开事务处理 [ 跳过数据输入验证 ] 打开记录/请求设置字段 [ Assets::Description ; "描述性文本" ] 提交事务处理

示例 3 

打开并提交没有 ESS 锁定保护的事务。

复制
打开事务处理 [ 覆盖 ESS 锁定冲突 ] 打开记录/请求设置字段 [ Assets::Description ; "描述性文本" ] 提交事务处理

 

示例 4

主脚本打开一个事务处理,设置 TextField,然后调用子脚本。由于子脚本是在事务处理已经打开时调用,因此其打开事务处理步骤被跳过,TextField 设置为不同的值,然后评估还原事务处理步骤中的条件。

如果 NumberField 为 1,则当前事务处理(在主脚本中打开)将恢复。跳过子脚本的提交事务处理步骤,然后控件传回主脚本的提交事务处理步骤,跳过执行脚本后的任何步骤。主脚本完成后,TextField 的值保持不变。

如果 NumberField 为 0,则子脚本不会还原事务处理,因此控制权传递回执行脚本后的步骤,其中 TextField 设置为 abc123,事务处理被提交。

主脚本

复制
打开事务处理 [ ]
    设置字段 [ Table::TextField ; "abc" ]
    执行脚本 [ 指定的: 来自列表 ; "Sub-script" ; 参数: ]
    设置字段 [ Table::TextField ; "abc123" ]
提交事务处理

子脚本

复制
打开事务处理 [ ]
    设置字段 [ Table::TextField ; "xyz456" ]
    还原事务处理 [ Condition: Table::NumberField = 1 ]
提交事务处理