打开事务处理
开始事务处理;后续记录更改在“提交事务处理”或“还原事务处理”脚本步骤执行之前将保留在事务处理中。
注释 事务在发起的窗口中处理。在非发起事务窗口执行的窗口操作将自动在现有事务外部提交。
另请参阅
选项
-
“跳过数据输入验证”直接提交记录,而不考虑为字段设置的任何数据输入验证选项。该选项只跳过对使用“字段选项”对话框中的“仅在数据输入过程中”验证选项设置的字段的验证;即使选定了“跳过数据输入验证”选项,设置为“始终”验证的字段仍需要验证。请参阅定义字段验证。
-
“覆盖 ESS 锁定冲突”允许 ODBC 数据源的客户在乐观锁定阻止提交操作时强制提交更改。ODBC 数据源也称为外部 SQL 源 (ESS)。
兼容性
产品 | 是否支持 |
FileMaker Pro | 是 |
FileMaker Go | 是 |
FileMaker WebDirect | 是 |
FileMaker Server | 是 |
FileMaker Cloud | 是 |
FileMaker Data API | 是 |
自定义 Web 发布 | 是 |
原始版本
19.6.1
说明
事务处理包括对当前窗口中一条或多条记录的更改。事务中的更改可能会影响多个数据库文件中的多个表。一个事务中的所有更改将一起提交,或者,如果发生错误,将一起还原。事务从“打开事务处理”脚本步骤开始。在开始事务后,后续记录更改将保留在事务中,直到执行“提交事务处理”或“还原事务处理”脚本步骤。下列步骤可以更改数据库架构中存储的记录,可用作事务性脚本步骤。
-
如果导入目标是新表,则在事务未提交时,该表、表摹本和布局都会删除。如果“提交事务处理”脚本步骤返回错误或者执行“还原事务处理”脚本步骤,则事务不会提交。
-
插入脚本步骤:插入音频/视频、插入计算结果、插入当前日期、插入当前时间、插入当前用户名、插入文件、从设备插入、从索引插入、从最后一次访问处插入、从 URL 插入、插入 PDF 、插入图片、插入文本
向脚本添加“打开事务处理”脚本步骤时,“提交事务处理”脚本步骤会自动与之配对。
事务:
-
在继续之前,请先尝试退出并提交当前活动记录的任何更改。如果它无法退出活动记录,Open Transaction 将返回错误,并跳过事务中的脚本步骤。
-
将一个或多个字段或表修改合并为一个更改集
-
提交或还原整个更改集
-
对“打开事务处理”与“提交事务处理”脚本步骤之间的字段或表修改进行分组
-
允许您创建更可靠的更改集
-
可以使用“还原事务处理”脚本步骤自动还原
-
作为一个组成功(提交)或失败(还原)
-
符合架构规则时成功
-
不符合架构规则时自动还原
-
可以选择在不符合架构规则时跳过验证设置并覆盖自动还原。覆盖架构规则可能会破坏事务的完整性。
-
在“提交事务处理”脚本步骤之前修改临时本地文件会将更改保存至主文件
事务处理在以下情况时自动提交并结束:
-
以下脚本步骤更改布局窗口:“新建窗口”、“关闭窗口”或“选择窗口”
-
使用以下对话框:“管理数据库”、“管理容器”或“管理数据源”
-
执行以下操作或脚本步骤:“副本另存为”或“重新登录”。
-
文件关闭
默认情况下,事务处理在以下情况下自动还原:
-
在开始事务之前存在未解决的架构错误。发生此情况时自动跳过事务处理。
-
字段更改(设置为始终验证)与字段的验证选项不匹配
-
使用“还原事务处理”脚本步骤
-
脚本已取消
-
在事务中使用“中断脚本”脚本步骤
-
使用脚本调试器取消了脚本
-
具有权限错误,例如无字段访问权限、无记录访问权限、无表访问权限
要控制当某些错误发生时事务处理是否自动还原,请使用发生错误时的还原事务处理设置脚本步骤。
注释
-
嵌套的事务处理:
-
“删除记录”操作在事务中使用时每次删除一条记录。
-
“清空表记录”操作无法还原。
-
“导入记录”操作在事务中使用时不显示摘要。
-
“还原事务处理”脚本步骤不还原“自动输入序列增量”值。
-
布局设置中的“自动保存记录更改”选项在事务期间将被忽略。
-
“执行 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 ]
提交事务处理