Salesforce Apex (基础2)sObjects

学习目标

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

  • 描述sObjects和Salesforce记录之间的关系。
  • 创建并使用特定的sObject变量。
  • 将一个通用的sObject转换为一个特定的sObject。

使用sObjects

由于Apex与数据库紧密集成,因此您可以直接从Apex访问Salesforce记录及其字段。 Salesforce中的每个记录都本地表示为Apex中的sObject。例如,Acme客户记录对应于Apex中的Account sObject。您可以在用户界面中查看和修改的Acme记录的字段也可以在sObject上直接读取和修改。
下表列出了Acme客户示例记录的一些填充字段。 Account sObject是客户记录的抽象,并将客户字段信息作为对象保存在内存中。
表1.检索到的记录的AccountSObject
客户字段
Id 001D000000JlfXe
公司名称 Acme
电话 (415)555-1212
员工人数 100

每个Salesforce记录在插入Salesforce之前都被表示为一个sObject。同样,从Salesforce检索持久性记录时,它们存储在sObject变量中。

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

  • 客户
  • 联系
  • 潜在客户
  • 机会

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

创建sObject变量

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

以下示例创建一个类型为Account的sObject变量,并将其分配给名称为Acme的新客户。

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

sObject和字段名称

sObjects的名称对应于相应的标准或自定义对象的API名称。同样,sObject字段的名称对应于相应字段的API名称。

对象和字段的API名称可能与标签不同。例如,“雇员”字段具有“雇员”标签,并在“客户记录”页面上显示为“雇员”,但其API名称为“NumberOfEmployees”。要在Apex中访问此字段,您需要使用该字段的API名称:NumberOfEmployees。

以下是用于自定义对象和自定义字段的API名称的一些规则的亮点。

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

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

另外,标签中的空格在API名称中用下划线代替。例如,Employee Seniority的自定义字段名称具有Employee_Seniority__c的API名称。

查找对象和字段名称

要查找在Apex中使用的标准对象及其字段的名称,请参阅Salesforce和Force.com的对象参考。

对于自定义对象,请在您的组织中查找对象和字段API名称。从“设置”中,在“快速查找”框中输入对象,然后选择“对象”,然后单击对象的名称。

创建sObjects和添加字段

在插入Salesforce记录之前,必须首先在内存中创建它作为sObject。与其他任何对象一样,sObject使用新的运算符创建:

Account acct = new Account();

API对象名称成为Apex中sObject变量的数据类型。在这个例子中,Account是acct变量的数据类型。

由acct变量引用的客户是空的,因为我们还没有填充它的任何字段。有两种方法可以添加字段:通过构造函数或使用点符号。

添加字段的最快方法是在构造函数中将它们指定为名称 – 值对。例如,这个语句创建一个新的客户sObject,并用字符串值填充它的Name字段。

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数据类型

通常,在使用sObjects时,使用特定的sObject数据类型(例如标准对象的Account或Book__c)作为名为Book的自定义对象。但是,当您不知道您的方法正在处理的sObject类型时,可以使用通用的sObject数据类型。
使用通用sObject数据类型声明的变量可以引用任何Salesforce记录,无论它是标准还是自定义对象记录。
A generic sObject variable can point to any Salesforce record

此示例显示如何将通用的sObject变量分配给任何Salesforce对象:客户和名为Book__c的自定义对象。

sObject sobj1 = new Account(Name='Trailhead');
sObject sobj2 = new Book__c(Name='Workbook 1');
相比之下,使用特定的sObject数据类型声明的变量只能引用相同类型的Salesforce记录。
A specific sObject variable can point to the Salesforce record of the same type only

将泛型对象转换为特定的对象类型

当你处理通用的sObjects时,你有时需要将你的sObject变量转换为特定的sObject类型。这样做的好处之一就是能够使用点符号访问字段,这在通用的sObject上是不可用的。由于sObject是所有特定sObject类型的父类型,因此可以将通用sObject转换为特定的sObject。这个例子展示了如何将一个通用的sObject转换为Account。

// 将一个通用的sObject转换为一个Account
Account acct = (Account)myGenericSObject;
// 现在,您可以使用点符号来访问客户上的字段Account
String name = acct.Name;
String phone = acct.Phone;

告诉我更多…

与特定的sObjects类型不同,通用sObjects只能通过newSObject()方法创建。而且,只能通过put()和get()方法访问通用sObject的字段。

在这个单元中,你已经学习了什么sObjects以及如何使用它们。但是,创建一个sObject并不会将其作为记录保存在数据库中。要将sObject保存为记录,并用它来做其他事情,请使用数据操作语言(DML)。要检索记录,请使用Salesforce对象查询语言(SOQL)。查看以后的单元,了解DML和SOQL。