子对象上的 APEX 触发器更新选项列表

问题描述

我正在尝试做一些简单的事情(我希望)。 我有 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 对象。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...