在自定义元数据的动态引用字段上触发Apex触发器



我在尝试当前问题时遇到了技能墙。我有一个自定义对象(Acq__c(,它上面有一系列到User的查找字段。更新这些字段时,特定的相关子对象将更新,以反映关联的新用户。这个初始部分很好。然而,需要能够扩展此功能所作用的字段。因此,如果构建了一个新的LookUp字段,则可以很容易地授予它相同的功能。我希望通过使用自定义元数据类型来实现这一点。在这种情况下,控制更新功能的触发器将查询自定义元数据类型记录,找到Acq__c对象上应该具有此更新功能的所有字段,测试它们是否已在DML语句中更新,然后根据更新的字段进行适当的激发。这将允许任何用户在未来创建新的查找,将它们添加到Acq__c对象,然后更新元数据以将触发器扩展到新字段。

触发器的直接部分,更新等-我没有任何问题。一旦我查询了Custom元数据并有了一个记录列表,每个记录都包含Acq__c对象上某个字段的API,我就不确定如何使用这个记录列表来查看哪些字段已经更新,然后相应地需要激发子对象更新。

我希望所有这些都是有意义的——任何帮助都将不胜感激。

N

自定义元数据可能有些过头了,看看字段集吧?它们现在有点过时了(它们在Visualforce页面中非常有用,在LWC中不那么有用(,但仍然——它们会"坐"在那里;更紧密的";对于正在更改的对象,管理员很可能不会忘记更改它们。

一旦您有了字段API名称的列表(或集合(,您就可以在trigger.new上循环。类似的东西

Set<String> watchedFields = new Set<String>();
for(Schema.FieldSetMember fsm : sObjectType.Acq__c.FieldSets.MyFieldsetNameHere.getFields()){
watchedFields.add(fsm.getFieldPath());
}
System.debug(watchedFields);
Map<Id, Acq__c> recordsWithKeyFieldsChanged = new Map<Id, Acq__c>();
for(Acq__c acq : trigger.new){
Acq__c old = trigger.oldMap.get(acq.Id);
for(String field : watchedFields){
if(acq.get(field) != old.get(field)){
recordsWithKeyFieldsChanged.add(acq);
break;
}
}
}
System.debug(recordsWithKeyFieldsChanged);
if(!recordsWithKeyFieldsChanged.isEmpty()){
doSomething(recordsWithKeyFieldsChanged);
}

这是一个循环中的循环,所以不太好,但如果不制作一个巨大的硬编码if语句,就很难做到这一点。在最坏的情况下,它会起作用,200条记录乘以多少字段~10?极限为40〃;自定义关系字段";所以不是世界末日。

最新更新