课程章节介绍
让我们来聊聊Salesforce中的sObject关系以及如何处理它们。
首先,想象一下Salesforce中的对象就像是一个个的文件夹,每个文件夹里都有不同的文件。这些文件夹之间可以通过某种方式连接起来,比如一个文件夹可以“指向”另一个文件夹。在Salesforce中,这种“指向”关系是通过字段来实现的,比如查找字段或主-详细关系字段。
现在,假设我们有一个父对象和一个子对象。父对象可以通过一个字段来指向子对象。这个字段的类型(是查找关系还是主-详细关系)在这里并不重要,重要的是它们之间是如何连接的。
在Salesforce中,每个对象都有一个唯一的ID,这个ID通常是18位的。你可以用15位或18位的ID来设置这个字段,但当你读取它时,Salesforce总是会返回18位的ID。
接下来,我们来看看如何处理这些关系。当你从一个对象读取数据时,如果相关的对象是空的(也就是说,没有数据),Salesforce不会抛出NullPointerException异常。这让你可以轻松地导航多个关系,而不需要每次都检查是否有空值。
但是,当你尝试修改一个空的相关对象时,Salesforce会抛出异常。这是因为你试图修改一个不存在的东西,这显然是不行的。
举个例子,假设你运行以下代码:
```apex
JOB_APPLICATION__c ja = [SELECT ID FROM JOB_APPLICATION__c WHERE Name = 'app-0001'];
System.debug(ja.position__r.Name);
```
这段代码会抛出SObjectException异常,因为你试图访问一个没有在查询中获取的相关对象字段。
但是,如果你运行这段代码:
```apex
JOB_APPLICATION__c ja2 = new JOB_APPLICATION__c();
System.debug(ja2.position__r.Name);
```
这段代码不会抛出异常,因为你只是创建了一个新的对象实例,并没有尝试访问任何未填充的字段。
最后,记住一点:相关的字段只有在通过SOQL或SOSL查询获取时才会被填充。如果你没有在查询中包含这些字段,那么它们就不会被填充,尝试访问它们就会抛出异常。
希望这些解释能帮助你更好地理解Salesforce中的sObject关系!