2

快速提问。在下面的代码中,您可以看到 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);  
        }
4

2 回答 2

4

每个对象实例(这意味着每个对象实例,包括工厂实例)都有一个唯一的组织级别 ID,其字段名称总是Id,由 Apex 类型覆盖,ID并且是一个区分大小写的 15 个字符的字符串,也有一个 18 个字符的不区分大小写表示。前三个字符是对象前缀代码(例如,500 表示案例),因此同一对象的所有实例共享相同的前缀。您可以在整个 SF 中看到这些值(例如,在https://na1.salesforce.com/02s7000000BW59L02s7000000BW59L,URL 中的就是 ID)。当使用 INSERT DML 操作创建对象实例时,销售人员会根据前缀和下一个可用的事务子 ID 自动分配唯一值,这一切对您来说都是透明的。

不要与对象字段混淆,对象Name字段是您在创建对象时定义的字段,可以自动递增等(例如 MYOBJ-{00000}),对用户而言,它比隐晦的含义更有意义ID

当您创建查找或主从关系时,用于链接两个实例的是 ID,而不是名称。在上面的示例中,Resource__c 似乎是那个查找字段,它包含行主的 Id 值。

代码的作用是枚举时间线中使用的所有资源并构建它们的一组 ID,其目的很可能是通过WHERE Id IN :resourceIds子句从主表加载资源详细信息。

于 2011-05-06T08:37:26.437 回答
1

mmix 的回答很好地概述了 ID 是什么以及它来自哪里。要回答我认为是您的具体问题:

任何时候存在从一个对象到另一个对象的引用(如这里,在 Timecard_c和 Resource_c之间),表示该引用的字段将是一个 ID。因此,for调用的循环resourceIds.add(timecard.Resource__c)只是建立您的一组 ID(那些 15 个字符的字符串)。timecard.Resource__c不通过 Resource__c 表查找 ID是timecard.Resource__c ID

于 2011-05-07T12:06:49.563 回答