Skip to main content

使用 sObject

学习目标

完成本单元后,您将能够:
  • 描述 sObject 和 Salesforce 记录之间的关系。
  • 创建和使用特定的 sObject 变量。
  • 将泛型 sObject 转换为特定 sObject。

使用 sObject

Apex 与数据库紧密集成,您可以直接从 Apex 访问 Salesforce 记录及其字段。Salesforce 的每条记录在 Apex 中代表一个原生 sObject。例如,Acme 客户记录对应于 Apex 中的一个客户 sObject。您可以在用户界面中查看和修改的 Acme 记录的字段,也可以直接在 sObject 上读取和修改。

下表列出了 Acme 客户示例记录的一些填充字段。客户 sObject 是客户记录的抽象类,并将客户字段信息作为对象存储在内存中。
表格 1.检索记录的客户 sObject
客户字段
Id 001D000000JlfXe
名称 Acme
电话 (415)555-1212
NumberOfEmployees 100

每条 Salesforce 记录在插入 Salesforce 之前,都表示为一个 sObject。同样,当从 Salesforce 检索持久化记录时,这些记录将存储在 sObject 变量中。

Salesforce 中的标准和自定义对象记录映射到 Apex 中的 sObject 类型。以下是 Apex 中用于标准对象的一些常见 sObject 类型名称。

  • 客户
  • 联系人
  • 潜在客户
  • 业务机会

如果您在组织中添加了自定义对象,请使用 Apex 中自定义对象的 API 名称。例如,名为 Merchandise 的自定义对象对应于 Apex 中的 Merchandise__c sObject。

创建 sObject 变量

要创建 sObject,您需要声明一个变量并为其分配一个 sObject 实例。变量的数据类型是 sObject 类型。

以下示例创建了类型为 Account、名称为 Acme 的 sObject 并将其分配给了 acct 变量。

Account acct = new Account(Name='Acme');

sObject 和字段名称

Apex 引用标准或自定义 sObject,字段用它们的唯一 API 名称。

对象和字段的 API 名称可以不同于其标签名称。例如,员工字段的标签为 Employees,在客户记录页面上显示为 Employees,但其 API 名称为 NumberOfEmployees。要在 Apex 中访问此字段,您需要使用该字段的 API 名称,即 NumberOfEmployees。

以下是自定义对象和自定义字段的 API 名称的使用规则重点。

对于自定义对象和自定义字段,API 名称始终以 __c 后缀结尾。对于自定义关系字段,API 名称以 __r 后缀结尾。例如:

  • 标签为 Merchandise 的自定义对象的 API 名称为 Merchandise__c。
  • 标签为 Description 的自定义字段的 API 名称为 Description__c。
  • 标签为 Items 的自定义关系字段的 API 名称为 Items__r。

此外,标签中的空格替换为 API 名称中的下划线。例如,自定义字段名称 Employee Seniority 的 API 名称为 Employee_Seniority__c。

查找对象和字段名称

要查找 Apex 中使用的标准对象及其字段的名称,请参阅 Object Reference for Salesforce and Lightning Platform(Salesforce 和 Lightning 平台的对象引用)

对于标准和自定义对象,请在组织中查找对象和字段 API 名称。从“设置”中,单击主页选项卡右侧的对象管理器选项卡,然后单击您的对象名称。

创建 sObject 并添加字段

在插入 Salesforce 记录之前,必须先在内存中创建一个 sObject。与其他对象一样,sObject 也是通过 new 运算符创建的:

Account acct = new Account();

API 对象名称成为 Apex 中 sObject 变量的数据类型。该实例中,Account (客户)是 acct 变量的数据类型。

Acct 变量引用的客户为空,因为还没有为其填充任何字段。添加字段有两种方法:通过构造器或者使用点记法。

添加字段的快捷方法是在构造器中将它们指定为名称-值对。例如,此语句创建了一个新客户 sObject 并使用字符串值填充名称字段。

Account acct = new Account(Name='Acme');

名称字段是客户的唯一必填字段,因此必须先填充该字段,然后才能插入新记录。但是,您也可以为新记录填充其他字段。此示例还添加了电话号码和员工数量。

Account acct = new Account(Name='Acme', Phone='(415)555-1212', NumberOfEmployees=100);

或者,您可以使用点记法为 sObject 添加字段。以下示例等效于前面的示例,不同的是以下示例需要多几行代码。

Account acct = new Account();
acct.Name = 'Acme';
acct.Phone = '(415)555-1212';
acct.NumberOfEmployees = 100;

处理泛型 sObject 数据类型

通常,在处理 sObject 时您使用的是特定 sObject 数据类型,例如客户用于标准对象或 Book__c 用于名为书本的自定义对象。然而,当您不知道正在处理的 sObject 类型方法时,您可以使用泛型 sObject 数据类型。

使用泛型 sObject 数据类型声明的变量可以引用任意 Salesforce 记录,无论是标准对象记录还是自定义对象记录。

泛型 sObject 变量可以指向任意 Salesforce 记录

此示例显示如何将任意 Salesforce 对象(例如称为 Book__c 的客户或自定义对象)分配给泛型 sObject 变量。

sObject sobj1 = new Account(Name='Trailhead');
sObject sobj2 = new Book__c(Name='Workbook 1');

相反,使用特定 sObject 数据类型声明的变量只能引用相同类型的 Salesforce 记录。

特定 sObject 变量只能指向相同类型的 Salesforce 记录

将泛型 sObject 转换为特定 sObject 类型

在处理泛型 sObject 时,有时需要将 sObject 变量转换为特定 sObject 类型。转换为特定 sObject 类型支持使用点记法访问字段,而泛型 sObject 却不支持。由于 sObject 是所有特定 sObject 类型的父类型,因此您可以将泛型 sObject 转换为特定 sObject。该示例展示了如何将泛型 sObject 转换为客户。

// Cast a generic sObject to an Account
Account acct = (Account)myGenericSObject;
// Now, you can use the dot notation to access fields on Account
String name = acct.Name;
String phone = acct.Phone;

了解详细信息...

只能通过 put()get() 方法访问泛型 sObject 的字段。

在本单元中,您学习了什么是 sObject 以及 sObject 的使用方法。但是,创建 sObject 并不会将其作为记录持久保存在数据库中。要将 sObject 保存为记录,并通过 sObject 执行其他操作,请使用 Data Manipulation Language (DML)。要检索记录,请使用 Salesforce 对象查询语言 (SOQL)。查看后续单元,了解 DML 和 SOQL 的更多信息。

资源

在 Salesforce 帮助中分享 Trailhead 反馈

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

了解更多 继续分享反馈