基本顶点对象ID

时间:2011-05-05 17:22:05

标签: salesforce apex-code

快速问题。在下面的代码中,您可以看到for循环(它接受newTimecards中的所有记录并将它们作为名为timecard的变量)并将Resource_c添加到resourceIds集。我对这个对象被认为是ID数据类型感到困惑。在Salesforce中创建对象时,它是否自动生成了ID,以便它知道可以将Resource_c ID添加到集合中?请注意,在Resource_c对象中还有一个名为Resource_ID_c的字段。 Timecard_c中的Resource_c是Master-Detail数据类型。 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);  
        }

2 个答案:

答案 0 :(得分:4)

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

这不应与对象Name字段混淆,对象WHERE Id IN :resourceIds字段是您在创建对象时定义的字段,可以自动递增等等(例如MYOBJ- {00000})并且可以具有对于用户而言比隐藏ID更具意义

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

代码的作用是枚举时间轴中使用的所有资源并构建一组ID,其目的很可能是通过{{1}}子句用于从主表加载资源详细信息。

答案 1 :(得分:1)

mmix的答案非常清楚ID是什么以及它来自何处。回答我的想法是你的具体问题:

任何时候从一个对象到另一个对象的引用(如此处,在Timecard_ c和Resource _c之间),表示引用的字段将是ID。因此,调用for的{​​{1}}循环只是构建一组ID(那些15个字符的字符串)。 resourceIds.add(timecard.Resource__c)未查看Resource _c表以查找ID,timecard.Resource__c 是ID