【Apex】子リレーションの更新
子リレーションを更新しようとした時に思い通りにいかなかったのでメモ。
例えばこんな感じのコードで、取引先(Account)と取引先責任者(Contact)の両方を一度にUpdateできると思っていました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/** Apexクラス */ public class SampleClass { public static void sampleMethod() { // 取引先を取得 List<Account> accList = [ SELECT Id ,Description //説明 ,(SELECT Id, Description FROM contacts) //取引先に紐づく取引先責任者 FROM Account WHERE Name = '◯◯株式会社' ]; for (Account acc : accList) { // 取引先の説明を設定 acc.Description = 'ああああああああああ'; // 取引先に紐づく取引先責任者の更新 for (Contact con : acc.contacts) { con.Description = 'いいいいいいいいいい'; } } // 取引先を更新 update accList; } } |
上記コードでは、取引先は更新されても取引先責任者は更新されません。
子リレーションを更新したい場合は下記のように書く必要がありそうです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
/** Apexクラス */ public class SampleClass { public static void sampleMethod() { // 取引先を取得 List<Account> accList = [ SELECT Id ,Description //説明 ,(SELECT Id, Description FROM contacts) //取引先に紐づく取引先責任者 FROM Account WHERE Name = '◯◯株式会社' ]; List<Contact> conUpdateList = new List<Contact>(); for (Account acc : accList) { // 取引先の説明を設定 acc.Description = 'ああああああああああ'; // 取引先に紐づく取引先責任者の更新 for (Contact con : acc.contacts) { con.Description = 'いいいいいいいいいい'; conUpdateList.add(con); } } // 取引先を更新 update accList; // 取引先責任者を更新 update conUpdateList; } } |