DML 选项

在 DML 语句执行的时候可以设置选项。这些选项用 DML.Options 类来表示。

完整的介绍在官方文档中。

在建立一个 DML.Options 实例之后,可以使用 setOptions() 函数来使用。

比如:

Database.DMLOptions dmo = new Database.DMLOptions();
dmo.allowFieldTruncation = true; Account a = new Account(); // 设置 Account 的各种属性值
// ... // 将 DML 选项设置到 Account 对象中,然后插入。这些选项就会被应用了
a.setOptions(dmo);
insert a;

可用的属性主要有:

  • allowFieldTruncation:设置是否自动截断数据,布尔值。比如当某字符串太长,超过了系统中相应字段的长度,DML 语句可以自动截断字符串,从而顺利保存在相应的字段中
  • assignmentRuleHeader:用于建立个案(case)和潜在客户(lead)对象,包括布尔型选项 useDefaultRule 和 ID 类型选项 assignmentRuleID
  • dupicateRuleHeader:用于设置当一条记录被认为重复的时候,如何处理,包括一个布尔型选项 allowSave 来设置是否允许保存
  • emailHeader:可以设置在某些事件满足时是否自动发送电子邮件
  • localeOptions:设置相关的语言
  • optAllOrNone:设置当某条记录出现错误的时候,是否要继续处理其他的记录

SavePoint 对象和数据回滚

SavePoint 对象可以将 DML 语句的执行结果回滚到之前的状态,多用于 DML 出错的情况下恢复数据。基本用法如下:

Savepoint sp1 = Database.setSavepoint();
Account a = new Account();
// 设置 Account 对象的属性
// ...
insert a; Savepoint sp2 = Database.setSavepoint();
// 更改 Account 对象的属性
// ...
update a // 回滚数据到 sp1 的状态
Database.rollback(sp1);

需要注意的是:

  • 在 rollback() 函数回滚到很早的 SavePoint 对象之后,其后面的 SavePoint 对象就都失效了。比如上面的例子在回滚到 sp1 的状态后,变量 sp2 就失效了
  • 回滚数据的操作也被计算到 DML 的限制中,所以如果回滚太多 DML 语句,有可能超出限制,出错

锁住数据记录

在 SOQL 语句中更新某条记录时,我们可以使用 FOR UPDATE 关键字锁住当前记录,使得它不会被其他的线程影响,从而导致数据出错。

比如:

Account [] accts = [SELECT Id FROM Account LIMIT 2 FOR UPDATE]; // 这两条 Account 数据会被锁住,直至当前 Apex 的代码段执行完毕

注意,ORDER BY 语句不能和 FOR UPDATE 一起使用。

当一条记录被锁住之后,其他线程如果也想对它进行更新,则要等待它被解锁。如果等待超过10秒,就会出错。

最新文章

  1. MyCAT ER分片的验证
  2. vim 使用 YouCompleteMe
  3. 简单的验证码识别(opecv)
  4. Network - SSH
  5. Android View事件机制 21问21答
  6. spring3.2.8+quartz2.2.0(比较全,对比quartz1.x的配置)
  7. du命令 实现Linux 某个文件夹下的文件按大小排序
  8. 数据库 一致性读&&当前读
  9. bzoj1560
  10. css考核点整理(十)-响应式开发经验,响应式页面的三种核心技术是什么
  11. JavaScript typeof obj === ‘object’ 这样写有什么问题
  12. 普通用户之间的ssh无密码访问设置方法
  13. 5.6.3.4 trim()方法
  14. CABasicAnimation学习Demo 包含了一些经常使用的动画效果
  15. Oracle B-tree、位图、全文索引三大索引性能比较及优缺点汇总
  16. lazy ideas in programming(编程中的惰性思想)
  17. 阻止安卓实体返回键后退的网页js实现
  18. Java虚拟机运行时栈帧结构--《深入理解Java虚拟机》学习笔记及个人理解(二)
  19. hive字段名、注释中文显示问号
  20. 二,Request和Response

热门文章

  1. Introduction to Semidefinite Programming (SDP)
  2. python yield: send, close, throw
  3. 分布式中session共享的解决方案:spring-session
  4. 如何在 C# 中自定义 Comparer,以实现按中文拼音(a-z)来排序
  5. Entity Framework 导航属性(2)
  6. Log4Net记录日志(mvc)
  7. Gitlab的CI/CD初尝试
  8. c++实现文件复制并修改相应属性
  9. string 字符串 的一些使用方法
  10. nodejs-翻转算法