这是一个代码,用于在插入阶段或将阶段更新为“封闭中标”时创建新任务
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?
答案 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只是一种以地图形式而不是列表形式获取批量数据的便捷方法。