通过 DML 修改记录
学习目标
完成本单元后,您将能够:
- 了解如何使用 Developer Console 中的“查询网格”直接操作数据记录。
- 了解如何使用 DML 把数据写入数据库。
- 知道两种写 DML 命令的方法。
管理 Developer Console 中的数据
目前为止我们已经知道如何使用 Developer Console 来用 SOQL 和 SOSL 查询数据。您可能没有注意到 Developer Console 中显示的 Query Results(查询结果)窗格不仅显示结果,而且它还具有查询网格的功能。您可以点击结果网格,使用网格下面的按钮插入、更新或删除数据。
我们来试一下。
- 从“设置”中,选择您的名字 > Developer Console,打开 Developer Console。
- 在 Developer Console 中,单击底部窗格中的 Query Editor(查询编辑器)选项卡。
- 删除现有代码,插入以下片段:
SELECT Id, Name, Industry FROM Account
- 单击执行。查询结果显示组织中的所有客户,以及总行数。请注意这个值是什么。
- 单击 Insert Row(插入行)。新的一行添加到网格最上方。
- 双击新的这一行输入名称和行业,但是 ID 值留空。
- 单击 Save Row(保存行)。请注意 ID 列自动显示一个值。记住,这个 ID 是主键,而且那个值是系统生成的。另外还要注意显示的总行数仍然是原始值。
- 单击 Refresh Grid(刷新网格)。有没有注意到总行数增加了一个?很不错的小工具,是吧?
作为开发人员,我们知道您有时候需要在百忙中管理数据,我们希望尽可能让管理数据变得很容易。我们认为它肯定比键入 INSERT、UPDATE 或 DELETE 语句要好用。
您也可以用查询结果右下角的按钮来直接访问 Salesforce 中的记录。去试一下吧。
什么是 DML?
您在第一单元中学过,Salesforce 用 SOQL 来查询数据,但是管理数据用的是 DML。
作为 .NET 开发人员,您主要用 SQL 来查询和管理数据,因此使用另一种语言可能会觉得陌生。但是我们认为您会发现在 Salesforce 中使用 DML 命令要比对应的 SQL 命令容易得多。
由于 Force.com 是紧密集成的,所以您可以直奔主题,去操作您的数据,无需担心管理数据源的问题。这是 DML 简单易用的原因之一。
DML 语句
请看下表,了解有哪些 DML 语句可用。有些可能看起来很熟悉,它们的使用方法跟您想的差不多。更多信息请见《开发人员指南》。
语句 | 描述 |
---|---|
insert | 插入新记录。 |
update | 更新现有记录。 |
upsert | 这是一个特殊的操作,在一个语句内创建新纪录并且更新记录。它用一个指定字段来确定现有对象是否存在,如果没有指定字段,则使用 ID 字段。 |
delete | 删除现有记录。 |
undelete | 从回收站恢复一条或多条现有记录。 |
merge | 这是另一个特殊的操作,可以把同一个对象类型的最多三条记录合并到其中一条记录,然后删除其他记录并且重新设置任何相关记录的父级。 |
执行 DML 的两种方法
在 Apex 中,您可以通过两种方法来执行 DML 语句。
- 使用语句本身:您已经在 SOSL 单元看过这种方法,在这种方法中我们插入了客户和联系人数据。这种方法是最简单的。如果您不记得了,请看下面 SOSL 单元的一些代码。用 insert DML 语句插入了一个客户。
// Add Account Account acct = new Account( Name='Test Account', Phone='(225)555-8989', NumberOfEmployees=10, BillingCity='Baton Rouge'); insert acct;
- 使用数据库类方法:使用数据库类方法的优势是您可以使用可选的
allOrNone
参数来指定该操作是否允许部分成功。当这个参数设为 false 时,如果一部分记录发生错误,将提交成功的记录。返回失败记录的报错。另外,部分成功选项不会抛出异常。比如,创建一个客户,allOrNone
参数设为 false,以数组返回成功或失败信息,看起来是这样的。// Add Account Account acct = new Account( Name='Test Account', Phone='(225)555-8989', NumberOfEmployees=10, BillingCity='Baton Rouge'); Database.SaveResult[] results = Database.insert(acct, false);
了解详细信息
allOrNone 参数默认设为 true,表示数据库方法与其对应的 DML 语句采取同样的处理方法,遇到失败时会抛出异常。更多信息请见官方文档。
如果您想成为一名 DML 达人,请完成 Apex 基本知识和数据库模块。它将进一步介绍如何插入部分成功的记录,以及如何插入相关记录。