【问题标题】:Updating records on cousin object using SF Apex使用 SF Apex 更新表亲对象的记录
【发布时间】:2013-05-28 19:46:06
【问题描述】:

我们有一个几乎完全由自定义对象组成的应用。为我们的用户创建一个流畅的工作流程对于这个应用程序至关重要。我是 apex 新手,但熟悉基本的代码编写。

以下是对象之间的关系:(--

Object_a --

当用户在 Object_c 上填充日期字段并保存时,我们希望 Object_d 上所有相关记录(即该特定 Object_a 记录的所有 Object_d 记录)上的日期字段以相同的值更新。

感谢任何帮助。

【问题讨论】:

    标签: salesforce apex-code


    【解决方案1】:

    您需要在插入/更新Object_c 时编写一个触发器,因为工作流规则无法在更新多个对象时触发,并且汇总汇总字段也无济于事(并非在所有地方都设置了主详细信息)。

    在深入研究编码之前,请考虑如果您同时修改了多个 Object__c 会发生什么(例如,使用 Data Loader,通过与某些外部系统或其他代码段集成)。如果您有 2 条记录都与同一 Object_A 相关,并且一条记录为“today”,而另一条记录为“today + 7”,那么哪个值应该“获胜”?


    解决此问题的一种方法是从要设置的Object_A ID 和日期值的地图开始。我将构建地图的方式意味着我将继续覆盖重复 id 的值,这不是您可能需要的(可能选择稍后的日期?)。

    Map<Id, Date> datesToSet = new Map<Id, Date>(); // you could make it Map<Id, Object_C__c> too, principle would be similar
    
    for(Object_C__c c : [SELECT Id, Date_Field__c, Object_B__r.Object_A__c FROM Object_C__c WHERE Id IN :trigger.new AND Object_B__r.Object_A__c != null]){
        datesToSet.put(c.dObject_B__r.Object_A__c, c.Date_Field__c);
    }
    
    System.debug(datesToSet);
    

    现在我们有了唯一的 A id 和值的映射,我们应该将其应用于所有子 D 记录。

    List<Object_D__c> childsToUpdate = [SELECT Id, Some_Other_Date_Field__c, Object_A__c FROM Object_D__c WHERE Object_A__c IN :datesToSet.keyset()];
    
    System.debug('BEFORE: ' + childsToUpdate);
    for(Object_D__c d : childsToUpdate){
        d.Some_Other_Date_Field__c = datesToSet.get(d.Object_A__c);
    }
    System.debug('AFTER: ' + childsToUpdate);
    update childsToUpdate;
    

    【讨论】:

    • 感谢您的回复。从理论上讲,A、B 和 C 之间的关系都是一对多的。然而,我们的系统设置方式是一对一的。事实上,在未来的某个时候,我需要想出一种方法来防止在 B&C 上创建许多记录。
    • 在 B & C 上放置唯一的 text(18) 字段,并有一个工作流用 A Id(和 B Id 分别)的值填充它:) 你必须为现有数据填写它不过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多