基本 Apex 对象 ID
Posted
技术标签:
【中文标题】基本 Apex 对象 ID【英文标题】:Elementary Apex Object IDs 【发布时间】:2011-05-05 17:22:04 【问题描述】:快速提问。在下面的代码中,您可以看到 for 循环(获取 newTimecards 中的所有记录并将它们作为名为 timecard 的变量)并将 Resource_c 添加到 resourceIds 集中。我对如何将此对象视为 ID 数据类型感到困惑。在 Salesforce 中创建对象时,它是否会自动创建一个 ID,以便它知道 Resource_c ID 可以添加到集合中?请注意,在 Resource_c 对象中还有一个名为 Resource_ID_c 的字段。 Timecard_c 中的 Resource_c 是主从数据类型。 Resource_c 是 Timecard_c 的父级。
现在想来,resourceIds.add(timecard.Resource_c),是不是引用了两个对象之间的关系,然后通过Resource_c搜索并自动添加ID字段Resource_ID_c,因为它是一个唯一的字段?
感谢您的帮助。
public class TimecardManager
public class TimecardException extends Exception
public static void handleTimecardChange(List<Timecard__c> oldTimecards,
List<Timecard__c> newTimecards)
Set<ID> resourceIds = new Set<ID>();
for (Timecard__c timecard : newTimecards)
resourceIds.add(timecard.Resource__c);
【问题讨论】:
【参考方案1】:每个对象实例(这意味着每个对象实例,包括工厂实例)都有一个唯一的组织级别 ID,其字段名称始终为 Id
,被 Apex 类型 ID
覆盖,并且是一个区分大小写的 15 个字符的字符串它也有一个 18 个字符的不区分大小写的表示。前三个字符是对象前缀代码(例如,500 表示案例),因此同一对象的所有实例共享相同的前缀。您可以在整个 SF 中看到这些值(例如,在https://na1.salesforce.com/02s7000000BW59L 中,URL 中的02s7000000BW59L
是 ID)。当使用 INSERT DML 操作创建对象实例时,销售人员会根据前缀和下一个可用的事务子 ID 自动分配唯一值,这一切对您来说都是透明的。
不要与对象Name
字段混淆,对象Name
字段是您在创建对象时定义的字段,可以自动递增等等(例如MYOBJ-00000),并且可以具有更多含义给用户而不是一个神秘的 ID
当您创建查找或主从关系时,用于链接两个实例的是 ID,而不是名称。在上面的示例中,Resource__c 似乎是那个查找字段,它包含行主的 Id 值。
代码的作用是枚举时间线中使用的所有资源并构建它们的一组 ID,其目的很可能是通过WHERE Id IN :resourceIds
子句从主表加载资源详细信息。
【讨论】:
【参考方案2】:mmix 的回答很好地概述了 ID 是什么以及它来自何处。回答我认为您的具体问题:
任何时候存在从一个对象到另一个对象的引用(如这里,在 Timecard_c 和 Resource_c 之间),表示该引用的字段将是一个 ID。因此,调用resourceIds.add(timecard.Resource__c)
的for
循环只是在构建您的一组ID(那些15 个字符的字符串)。 timecard.Resource__c
不会通过 Resource__c 表查找 ID,timecard.Resource__c
是 ID。
【讨论】:
嗯,有道理。这就是我想的,但不确定。这可能有点令人困惑。以上是关于基本 Apex 对象 ID的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Oracle Apex 5 中为每一行唯一地更新列?