我们有一个由几乎完全自定义的对象组成的应用程序。为我们的用户创建流畅的工作流程对于此应用至关重要。我是apex的新手,但熟悉基本的代码编写。
以下是对象之间的关系:( - < = 1到很多,M / D =主/细节)
Object_a - < Object_b --M / D - < Object_c; Object_a - M / D - < Object_d
当用户在Object_c上填充日期字段并保存时,我们希望Object_d上的所有相关记录上的日期字段(即该特定Object_a记录的所有Object_d记录)都要使用相同的值进行更新。
感谢任何帮助。
答案 0 :(得分:0)
您需要在Object_c
的插入/更新上编写触发器,因为工作流规则无法在更新多个对象时触发,汇总汇总字段也无济于事(主要细节未在任何地方设置) )。
在深入研究编码之前,请考虑如果您同时修改了多个Object__c
会发生什么(例如,使用Data Loader,通过与某些外部系统或其他代码集成)。如果你有2条记录都与同一Object_A
有关,而其中一条记录有“今天”,而其他记录有“今日+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;