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. Paper | Spatially Adaptive Computation Time for Residual Networks

    目录 摘要 故事 SACT机制 ACT机制 SACT机制 实验 发表在2017年CVPR. 摘要 在图像检测任务中,对于图像不同的区域,我们可以分配不同层数的网络予以处理. 本文就提出了一个基于Res ...

  2. ksync

    #include <linux/init.h> #include <linux/module.h> #include <linux/types.h> #includ ...

  3. hex2pcap

    #include <stdlib.h> #include <stdio.h> #include <string.h> typedef struct { unsign ...

  4. 小白专场-树的同构-python语言实现

    目录 一.题意理解 二.求解思路 更新.更全的<数据结构与算法>的更新网站,更有python.go.人工智能教学等着你:<https://www.cnblogs.com/nickch ...

  5. stacky footer

    div{border:1px solid #CCC;} .wrapper{ width:100%; height:100%; display:flex; flex-flow: column; } .c ...

  6. [ZJOI2019] 开关 (一种扩展性较高的做法)

    [ZJOI2019] 开关 (一种扩展性较高的做法) 题意: 有n个开关,一开始状态都为关闭.每次随机选出一个开关将其状态改变,选出第i个开关的概率为${ p_i \over \sum_{i=1}^n ...

  7. TP5 使用验证码功能

    工作中后台开发使用的是 TP5,但是对语法不是很熟悉,总是看着手册写代码.当时做 Java 的时候也是这样,很多语法需要靠百度.不是不能写代码,但是这样的效率感觉不高,没有行云流水的感觉,要是能有聊天 ...

  8. hdu-5573 Binary Tree

    The Old Frog King lives on the root of an infinite tree. According to the law, each node should conn ...

  9. DGCNN

    架构总览 模型的整体架构源于 WebQA 的参考论文 Dataset and Neural Recurrent Sequence Labeling Model for Open-Domain Fact ...

  10. SAP PI接口(RFC类型)在函数字段修改或增加后,出现字段映射错误问题

    在解决标题所言问题之前,我们先回头看看RFC和sproxy这两种接口的优缺点. 关于PI接口的实现,目前我了解到的各大国企项目像中海油.中石化.国网等,普遍实现方式是RFC和代理类sproxy这两种. ...