问题描述
我正在尝试做一些简单的事情(我希望)。 我有 2x 个对象:Contact 和 Career_Path__c 联系人只有一个字段:Currency__c(选择列表) Career_Path__c 有一个字段:Next_Currency__c(选择列表) 这两个对象通过从 Career_Path__c 到 Contact
的循环关系相关联每次创建新的 Career_Path__c 记录时,我都会尝试更新 Next_Currency__c 字段。这似乎不起作用。感谢您的任何建议。
trigger Trigger_dynPicklist_2 on Contact (after insert) {
Map<Id,String> contactIdToCareerPathMap = new Map<Id,String>();
for (Contact c : Trigger.new) {
if (String.isNotBlank(c.Id)) {
//System.debug('El contacto tiene id: '+c.Id);
contactIdToCareerPathMap.put(c.Id,c.Currency__c);
}
}
List<Career_Path__c> careerPathToUpdate = [SELECT Id,Next_Currency__c,Contact__c
FROM Career_Path__c
WHERE Contact__c IN :contactIdToCareerPathMap.keySet()
];
if(careerPathToUpdate.size() > 0){
//System.debug('Tiene hijos');
for (Career_Path__c career : careerPathToUpdate) {
//System.debug('hijos: '+ career.id);
career.Next_Currency__c = contactIdToCareerPathMap.get(career.Contact__c);
}
update careerPathToUpdate;
}
}
解决方法
当您实际上需要在 Career_Path__c SObject 上设置它时,您正试图在 Contact 上设置它。您的代码应该看起来像这样以实现 Next_Currency__c 从相关的 Contact Currency__c 自动填充(还要注意触发器现在将在插入之前,因此您不需要再次更新记录):
trigger Trigger_dynPicklist_2 on Career_Path__c (before insert) {
Set<Id> relatedContactsIds = new Set<Id>();
for (Career_Path__c path : Trigger.new) {
if (path.Contact__c != null) {
relatedContactsIds.add(path.Contact__c);
}
}
Map<Id,Contact> relatedContactsMap = [SELECT Id,Currency__c FROM Contact WHERE Id IN :relatedContactsIds AND Currency__c != NULL];
for (Career_Path__c path : Trigger.new) {
if (path.Contact__c != null && relatedContactsMap.containsKey(path.Contact__c)) {
path.Next_Currency__c = relatedContactsMap.get(path.Contact__c).Currency__c;
}
}
}
另请注意,当 Contact 刚刚创建时(并且您在插入时处于触发器状态),它不能有相关的 Career_Path__c 对象。