基本 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的主要内容,如果未能解决你的问题,请参考以下文章

在 ApEx 中从数据库集合对象创建 LOV

salesforce 知识整理

Oracle Apex:如何执行程序并在页面上显示结果

如何在 Oracle Apex 5 中为每一行唯一地更新列?

如何从 Apache Apex 应用程序内部获取 ApplicationID?

Apex 中操作用户和组