Что на самом деле делает oldmap здесь?Может кто-нибудь объяснить - PullRequest
0 голосов
/ 28 ноября 2018

Это код для создания новой задачи, когда этап вставлен или обновлен до «Закрыт»

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 голосов
/ 04 декабря 2018

Trigger.newMap - карта идентификаторов новых значений объекта.Доступно в триггерах вставки, обновления и восстановления, а «новые» записи могут быть изменены только до триггеров.

Trigger.oldMap - это карта идентификаторов старых значений объекта.Доступно только в триггерах обновления и удаления.

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 - это просто удобный способ получения обобщенных данных в виде карты вместо списка.

...