Регистрация  |  Вход

Записи полученные по связи не апдатируются?

Вот столкнулся с ситуацияй, но не знаю где ошибка

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]

update c; // This only changes the contact's last name
update c.account; // This updates the account name

Вот и ответ на вопрос. Не обновляются объекты в связях. Сначала обновил контакт, а потом связанный аккаунт. В принципе это логично и никакой магии тут нет :)

[quote]update c; // This only changes the contact's last name
update c.account; // This updates the account name[/quote]
Вот и ответ на вопрос. Не обновляются объекты в связях. Сначала обновил контакт, а потом связанный аккаунт. В принципе это логично и никакой магии тут нет :)

talex
update c.account; // This updates the account name

вот это прекрасный ответ на вопрос.

Я раньше не видел такого синтаксиса.

у меня так получилось:

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]

Art Vegas
Привет!

Если логика позволяет (должна регулярно исполняться в одном и том же поведении - update), то Child записи можно апдейтить в триггере Master.

trigger ChildUpdate on Master(before update){
//
}

Пример:

http://developer.force.com/cookbook/recipe/mass-updating-contacts-when-an-account-changes

Привет!
спасибо.
в данном случае не буду выносить код в отдельный тригер.
но сама идея интересная - можно подумать как можно это использовать.
может даже позже и этот код переделаю с выносом в отд тригер - еще до конца не сообразил, какие в этом премущества и подводные камни...

[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]

Привет!
спасибо.
в данном случае не буду выносить код в отдельный тригер.
но сама идея интересная - можно подумать как можно это использовать.
может даже позже и этот код переделаю с выносом в отд тригер - еще до конца не сообразил, какие в этом премущества и подводные камни...