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秒,就会出错。

Apex 中 DML 进阶知识小结的更多相关文章

  1. 180531-Spring中JavaConfig知识小结

    原文链接:Spring中JavaConfig知识小结/ Sring中JavaConfig使用姿势 去掉xml的配置方式,改成用Java来配置,最常见的就是将xml中的 bean定义, scanner包 ...

  2. Android app开发知识小结

    Android知识小结 这是一个知识的总结,所以没有详解的讲解. 一.分辨率Android中dp长度.sp字体使用.px像素.in英寸.pt英寸1/72.mm毫米 了解dp首先要知道density,d ...

  3. Spring实战3:装配bean的进阶知识

    主要内容: Environments and profiles Conditional bean declaration 处理自动装配的歧义 bean的作用域 The Spring Expressio ...

  4. C/C++ 位域知识小结

    C/C++ 位域知识小结 几篇较全面的位域相关的文章: http://www.uplook.cn/blog/9/93362/ C/C++位域(Bit-fields)之我见 C中的位域与大小端问题 内存 ...

  5. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  6. JAVA 变量 数据类型 运算符 知识小结

    ---------------------------------------------------> JAVA 变量 数据类型 运算符 知识小结 <------------------ ...

  7. html5-基本知识小结及补充

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  8. HTTPS知识小结

    HTTPS知识小结 背景1:TCP握手 internet上的两台机器A,B要建立起HTTP连接了,在这之前要先建立TCP连接,情景大概是这样子的: A:你好,我跟你建立一个TCP好吗? B:好啊. A ...

  9. shell 环境变量的知识小结

    环境变量的知识小结:·变量名通常要大写.·变量可以在自身的Shell及子Shell中使用.·常用export来定义环境变量.·执行env默认可以显示所有的环境变量名称及对应的值.·输出时用“$变量名” ...

随机推荐

  1. 探索ASP.Net Core 3.0系列四:在ASP.NET Core 3.0的应用中启动时运行异步任务

    前言:在本文中,我将介绍ASP.NET Core 3.0 WebHost的微小更改如何使使用IHostedService在应用程序启动时更轻松地运行异步任务. 翻译 :Andrew Lock   ht ...

  2. 解决node fs.writeFile 生成csv 文件乱码问题

    解决node fs.writeFile 生成csv 文件乱码问题: fs.writeFile('xxx.csv', '\ufeff' + 要传入的数据, {encoding: 'utf8'}); \u ...

  3. 【Java语言特性学习之四】常用集合

    java中常见的数据结构

  4. ThinkPHP框架获取上一条插入语句产生的id

    今天在fastAdmin框架想搞一个拖动进行排序的功能 遇到一个问题是权重的字段值一样的话拖动会出bug,所以想让权重字段(weigh)的值等于当前id的值, 搜索看到的方法如下 实际应用的地方,是写 ...

  5. ELK 日志平台 For Windows

    一.Logstash 安装 1. 下载最新版本的logstash:  https://www.elastic.co/fr/downloads/logstash 下载zip格式的压缩包. 然后解压缩放到 ...

  6. Binding ,抄自 http://www.cnblogs.com/cnblogsfans/archive/2011/02/19/1958586.html

    1. 绑定到其它元素 <Grid> <StackPanel > <TextBox x:Name="textBox1" Height="150 ...

  7. MVC 创建Controllers 发生 EntityType has no key defined error

    发生如图错误 只需要在对应的类中指定Key即可 添加引用 : System.ComponentModel.DataAnnotations 参考:https://stackoverflow.com/qu ...

  8. Python笔记:threading(多线程操作)

    Python的线程操作在旧版本中使用的是thread模块,在Python27和Python3中引入了threading模块,同时thread模块在Python3中改名为_thread模块,thread ...

  9. CSS样式表及选择器相关内容(二)-伪类与伪元素选择器

    伪类与伪元素选择器归纳: 一.伪类选择器(伪类以":"开头,用在选择器后,用于指明元素在某种特殊的状态下才能被选中)    1.a标签伪类选择器,其他标签类似        eg: ...

  10. 为什么我推荐你用 Ubuntu 开发?

    微信.QQ.TIM.企业微信.钉钉等 1.首先需要安装 wine 环境,这里使用到开源的 deepin-wine-ubuntu (项目地址: https://github.com/wszqkzqk/d ...