Вот столкнулся с ситуацияй, но не знаю где ошибка
List<Records_c> recs = [ select name, (name from relations__r) from Records_c];
recs.name = 'new'; // значение записывается и позже успешно апдейтится
for (otherRecords__c r : recs.relations__r) {
r.name = 'new'; // значение записывается но не апдейтится во время ДМЛ - не меняется на записи
}
update recs;
так и должно быть?
придется кверить связанные записи отдельно, чтобы что-то менять в них?
Вот столкнулся с ситуацияй, но не знаю где ошибка List<Records_c> recs = [ select name, (name from relations__r) from Records_c]; recs.name = 'new'; [b]// значение записывается и позже успешно апдейтится[/b] for (otherRecords__c r : recs.relations__r) { r.name = 'new'; [b]// значение записывается но не апдейтится во время ДМЛ - не меняется на записи[/b] } update recs; так и должно быть? придется кверить связанные записи отдельно, чтобы что-то менять в них?
Правильную тему поднял. Сам буквально на днях задумался об этом, но не было времени проверить.
Сохраняются ли изменения в связанных объектах через relationsgins?
По логике не должны. Но где об этом написано?
Den, ты привел пример изадалека - обновление children при сохранении родителя.
А если так? Сохранение родителя при сохранении
Contact contact = [SELECT Id, Account.Name FROM Contact LIMIT 1];
contact.Account.Name = 'New name';
update contact;
Что получится? Account обновится?
PS. честно никогда не задумывался об этом и это не мешало программировать :). А вот сейчас столкнулся, а оказывается четкого ответа нет :)
Правильную тему поднял. Сам буквально на днях задумался об этом, но не было времени проверить. Сохраняются ли изменения в связанных объектах через relationsgins? По логике не должны. Но где об этом написано? Den, ты привел пример изадалека - обновление children при сохранении родителя. А если так? Сохранение родителя при сохранении [code]Contact contact = [SELECT Id, Account.Name FROM Contact LIMIT 1]; contact.Account.Name = 'New name'; update contact;[/code] Что получится? Account обновится? PS. честно никогда не задумывался об этом и это не мешало программировать :). А вот сейчас столкнулся, а оказывается четкого ответа нет :)
Твой пример аналогичен моему, но там связь от дочерней записи к родительской.
Мой пример - тоже самое, но наоборот - связь от родительской записи ко всем дочерним.
завтра буду все эти варианты детально проверять.
Твой пример аналогичен моему, но там связь от дочерней записи к родительской. Мой пример - тоже самое, но наоборот - связь от родительской записи ко всем дочерним. завтра буду все эти варианты детально проверять.
Недавно я смотрел видео(курс Apex наверное), так так было что при обнове родителя дети не обновятся. Если найду видео то скину силку.
Недавно я смотрел видео(курс Apex наверное), так так было что при обнове родителя дети не обновятся. Если найду видео то скину силку.
https://help.salesforce.com/HTTrainingModulesDetail?courseId=a1S30000000glxTEAQ&Catalog=Standard
Modele: Records in the Database -> sObjects RelationShips DML Example
Вот пример из видео:
Account a = new Account(name = 'Acme');
insert a; // Automatically assigns a value to its ID
Contact c = new Contact(lastName = 'Wissman');
c.accountId = a.Id;
insert c;
c.account = a;
// Now fields in both records can be changed through the contact
c.account.name = 'salesforce.com';
c.lastName = 'Roth';
update c; // This only changes the contact's last name
update c.account; // This updates the account name
[url]https://help.salesforce.com/HTTrainingModulesDetail?courseId=a1S30000000glxTEAQ&Catalog=Standard[/url] Modele: Records in the Database -> sObjects RelationShips DML Example Вот пример из видео: [code]Account a = new Account(name = 'Acme'); insert a; // Automatically assigns a value to its ID Contact c = new Contact(lastName = 'Wissman'); c.accountId = a.Id; insert c; c.account = a; // Now fields in both records can be changed through the contact c.account.name = 'salesforce.com'; c.lastName = 'Roth'; update c; // This only changes the contact's last name update c.account; // This updates the account name[/code]
[quote]update c; // This only changes the contact's last name update c.account; // This updates the account name[/quote] Вот и ответ на вопрос. Не обновляются объекты в связях. Сначала обновил контакт, а потом связанный аккаунт. В принципе это логично и никакой магии тут нет :)
вот это прекрасный ответ на вопрос.
Я раньше не видел такого синтаксиса.
у меня так получилось:
List<Master> masters имеет связь Child_records__r в каждой из кооторых есть по несколько записей Child
так не работает:
update masters.Child_records__r
пришлось двумя циклами собрать все Child записи в отдельный список и update их одним махом
try {update masters;
List <Child> childs = new List <Child> ();
for (Master m : masters) {
for (Child c : m.Child_records__r){
childs.add(c);
}
}update childs;
} catch(){}
Жду ваших рекомендации по оптимизации моего "костыли-велосипедного" кода
[quote="talex"] update c.account; // This updates the account name[/quote] вот это прекрасный ответ на вопрос. Я раньше не видел такого синтаксиса. у меня так получилось: List<Master> masters имеет связь Child_records__r в каждой из кооторых есть по несколько записей Child так не работает: [b]update masters.Child_records__r [/b] пришлось двумя циклами собрать все Child записи в отдельный список и update их одним махом [code]try { update masters; List <Child> childs = new List <Child> (); for (Master m : masters) { for (Child c : m.Child_records__r){ childs.add(c); } } update childs; } catch(){}[/code] Жду ваших рекомендации по оптимизации моего "костыли-велосипедного" кода
Привет!
Если логика позволяет (должна регулярно исполняться в одном и том же поведении - update), то Child записи можно апдейтить в триггере Master.
trigger ChildUpdate on Master(before update){
//
}
Пример:
http://developer.force.com/cookbook/recipe/mass-updating-contacts-when-an-account-changes
Привет! Если логика позволяет (должна регулярно исполняться в одном и том же поведении - update), то Child записи можно апдейтить в триггере Master. [code] trigger ChildUpdate on Master(before update){ // } [/code] Пример: [url]http://developer.force.com/cookbook/recipe/mass-updating-contacts-when-an-account-changes[/url]
Привет!
спасибо.
в данном случае не буду выносить код в отдельный тригер.
но сама идея интересная - можно подумать как можно это использовать.
может даже позже и этот код переделаю с выносом в отд тригер - еще до конца не сообразил, какие в этом премущества и подводные камни...
[quote="Art Vegas"]Привет! Если логика позволяет (должна регулярно исполняться в одном и том же поведении - update), то Child записи можно апдейтить в триггере Master. [code] trigger ChildUpdate on Master(before update){ // } [/code] Пример: [url]http://developer.force.com/cookbook/recipe/mass-updating-contacts-when-an-account-changes[/url][/quote] Привет! спасибо. в данном случае не буду выносить код в отдельный тригер. но сама идея интересная - можно подумать как можно это использовать. может даже позже и этот код переделаю с выносом в отд тригер - еще до конца не сообразил, какие в этом премущества и подводные камни...