旧地图实际上在这里做什么?有人可以解释

时间:2018-11-28 14:52:27

标签: salesforce apex apex-code salesforce-lightning

这是一个代码,用于在插入阶段或将阶段更新为“封闭中标”时创建新任务

trigger ClosedOpportunityTrigger on Opportunity (after insert, after update) {

List<Task> tl = new List<Task>();

for(Opportunity op : Trigger.new) {


    if(Trigger.isInsert) {
        if(Op.StageName == 'Closed Won') {
            tl.add(new Task(Subject = 'Follow Up Test Task', WhatId = op.Id));
        }
    }


    if(Trigger.isUpdate) {
        if(Op.StageName == 'Closed Won' 
        && Op.StageName != Trigger.oldMap.get(op.Id).StageName) {
            tl.add(new Task(Subject = 'Follow Up Test Task', WhatId = op.Id));
        }
    }       
}

if(tl.size()>0) {        
    insert tl;        
}    
}

在这里,&& Op.StageName!= Trigger.oldMap.get(op.Id).StageName)有什么作用?为什么在这里使用oldMap?

1 个答案:

答案 0 :(得分:0)

Trigger.newMap是新对象值的ID的映射。在插入,更新和取消删除触发器中可用,并且“新”记录只能在触发器之前进行修改。

Trigger.oldMap是旧对象值的ID的映射。仅在更新和删除触发器中可用。

if (Trigger.isUpdate) {
    // Iterate updated opportunities
    for (Opportunity o : Trigger.new) {
        // Get the opportunity before update
        Opportunity oldOpp = Trigger.oldMap.get(o.Id);

        // Check if a value changed
        if (o.Some_Value__c == oldOpp.Some_Value__c) {
             System.debug('Value did not change.');
        } else {
             System.debug('Value changed!');
        }
    }
}

注意:我本可以使用Trigger.newMap而不是Trigger.new,但是我将遍历Trigger.newMap.values()-最终结果相同。 newMap只是一种以地图形式而不是列表形式获取批量数据的便捷方法。

相关问题