Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Salesforce 使用SF Apex更新表亲对象上的记录_Salesforce_Apex Code - Fatal编程技术网

Salesforce 使用SF Apex更新表亲对象上的记录

Salesforce 使用SF Apex更新表亲对象上的记录,salesforce,apex-code,Salesforce,Apex Code,我们有一个几乎完全由自定义对象组成的应用程序。为我们的用户创建一个流畅的工作流程对于该应用程序至关重要。我是apex的新手,但熟悉基本的代码编写 以下是对象之间的关系:-

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

以下是对象之间的关系:-<=1对多,M/D=Master/Detail

对象a-<对象b-M/D-<对象c; 对象a-M/D-<对象D

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


非常感谢您的帮助。

您需要在插入/更新对象时编写触发器,因为工作流规则不能在更新多个对象时触发,汇总摘要字段也不会帮助您,因为主控详细信息并不是到处都设置的

在深入研究编码之前,请考虑如果在数据加载程序中同时修改了超过1个对象,通过与某些外部系统或其他代码的集成,将会发生什么。如果有两条记录都与同一对象_A相关,其中一条记录的日期为今天,而另一条记录的日期为+7,那么哪个值应获胜

解决这个问题的一种方法是从要设置的对象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上放置unique text18字段,并有一个工作流,分别用a Id和B Id的值填充它:不过,您必须为现有数据填充它。