Skip to main content

通过 DML 修改记录

学习目标

完成本单元后,您将能够:

  • 了解如何使用 Developer Console 中的“查询网格”直接操作数据记录。
  • 了解如何使用 DML 把数据写入数据库。
  • 知道两种写 DML 命令的方法。

管理 Developer Console 中的数据

目前为止我们已经知道如何使用 Developer Console 来用 SOQL 和 SOSL 查询数据。您可能没有注意到 Developer Console 中显示的 Query Results(查询结果)窗格不仅显示结果,而且它还具有查询网格的功能。您可以点击结果网格,使用网格下面的按钮插入、更新或删除数据。

我们来试一下。

  1. 从“设置”中,选择您的名字 > Developer Console,打开 Developer Console。
  2. 在 Developer Console 中,单击底部窗格中的 Query Editor(查询编辑器)选项卡。
  3. 删除现有代码,插入以下片段:
    SELECT Id, Name, Industry FROM Account
    
  4. 单击执行。查询结果显示组织中的所有客户,以及总行数。请注意这个值是什么。
  5. 单击 Insert Row(插入行)。新的一行添加到网格最上方。
  6. 双击新的这一行输入名称和行业,但是 ID 值留空。
  7. 单击 Save Row(保存行)。请注意 ID 列自动显示一个值。记住,这个 ID 是主键,而且那个值是系统生成的。另外还要注意显示的总行数仍然是原始值。
  8. 单击 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 基本知识和数据库模块。它将进一步介绍如何插入部分成功的记录,以及如何插入相关记录。

资源

在 Salesforce 帮助中分享 Trailhead 反馈

我们很想听听您使用 Trailhead 的经验——您现在可以随时从 Salesforce 帮助网站访问新的反馈表单。

了解更多 继续分享反馈