trigger Updatechildrecord on Account(before insert, before update) {
   
    List<Contact> Conlist = new List<Contact> ();
    for(Contact c : [SELECT Name,Id,Phone From Contact Where AccountId IN: Trigger.New]) {
        for(Account acc : c) {
            c.MailingAddress = acc.BillingAddress;
            
            conlist.add(c);
            }
      Update conlist;
}
}

Получаю сообщение об ошибке: Ошибка: Ошибка компиляции: поле недоступно для записи: Contact.MailingAddress в строке 6, столбце 15

Кто-нибудь, помогите мне сбросить эту ошибку. Заранее спасибо

-1
Night Guy 17 Июл 2020 в 16:16

1 ответ

Лучший ответ

Поля адреса не доступны для записи. Вам необходимо обновить различные поля адреса, как показано ниже:

Account a;
for(Contact c : [SELECT Name,Id,Phone From Contact Where AccountId IN: Trigger.New]) {
        a = Trigger.newMap.get(c.AccountId);
        c.MailingStreet     = a.BillingStreet;
        c.MailingCity       = a.BillingCity;
        c.MailingState      = a.BillingState;
        c.MailingPostalCode = a.BillingPostalCode;
        c.MailingCountry    = a.BillingCountry;
    }
    update contacts;

См. это для составных полей -> https:/ /developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/compound_fields_address.htm

Кроме того, убедитесь, что вы следуете рекомендациям Apex по написанию своей логики. Попробуйте использовать карту вместо цикла for внутри for. См. https://developer.salesforce.com/wiki/apex_code_best_practices, чтобы ознакомиться с рекомендациями apex.

0
Aakriti.G 17 Июл 2020 в 10:31
Несмотря на то, что я изменил ваш код, я получаю сообщение об ошибке. Ошибка: Ошибка компиляции: цикл должен повторяться по сбору: контакт в строке 5 столбца 9
 – 
Mickey01
17 Июл 2020 в 10:13
Да, потому что в этом блоке вы пытаетесь перебрать учетную запись, но используете c, который является контактом. Пожалуйста, проверьте developer.salesforce.com/docs/ atlas.en-us.apexcode.meta/…, чтобы узнать о циклах.
 – 
Aakriti.G
17 Июл 2020 в 10:21
Intsead мы можем создать новую переменную для учетной записи acc : как это и может попробовать эти?
 – 
Mickey01
17 Июл 2020 в 10:25
Почему вы используете цикл for внутри for? Я обновил свой ответ. Вы можете проверить это
 – 
Aakriti.G
17 Июл 2020 в 10:33
Спасибо @Aakriti.G. Работает.
 – 
Mickey01
17 Июл 2020 в 10:55