триггер для заполнения дочернего поля из родительского объекта с использованием запроса отношения от родительского к дочернему

У нас есть два стандартных объекта - аккаунт (родительский) и контакт (дочерний). Я хочу написать триггер для заполнения поля фамилии контакта с полем имени учетной записи

Триггер ниже выполняет ту же задачу, но запрос soql передается от дочернего к родительскому.

Мне нужен триггер, который выполняет ту же работу, но использует запрос soql (запрос отношения) от родительского к дочернему.

trigger trgSetLastName on Contact (after insert) 
{
List<Contact> lstConUpdate = new List<Contact>();
List<Contact> lstContact = [select id,Account.Name from Contact where 
id in:  trigger.newmap.keyset()];
for(Contact con: lstContact)
{
    con.LastName = con.Account.Name;
    lstConUpdate.add(con);
}
if(lstConUpdate.size() > 0){
    update lstConUpdate;
}
}

мне нужен триггер для этого .help


person user3827145    schedule 17.07.2014    source источник


Ответы (1)


Шаг 1. Создайте Set<id> идентификаторов учетных записей:

for (Contact c : trigger.new){
    acctIdSet.add(c.AccountId);
}

Шаг 2. Выберите связанные учетные записи в Map<Id,Account>, используя:

[SELECT {fields}
FROM Account
WHERE Id IN :acctIdSet];

Шаг 3. Пройдитесь по trigger.new и извлеките соответствующую Учетную запись из вашей Карты.

Шаг 4. Обновите значение LastName при контакте со значением в вашей учетной записи, если оно существует.

Шаг 5. Сделайте выстрел из курка перед тем, как вставить:

trigger trgSetLastName on Contact (before insert, before update) 
person Caspar Harmer    schedule 28.07.2014