Недопустимая связь с внешним ключом, когда я пытаюсь добавить новый пользовательский объект в существующее преимущество - PullRequest
4 голосов
/ 25 сентября 2010

У меня есть Lead и пользовательский объект с именем Social Account (API Name = Social_Account__c).

Я установил отношения следующим образом: Ведущий является родителем социальных аккаунтов. так что у лидера много социальных аккаунтов.

В социальной учетной записи я создал настраиваемое поле с именем Lead (Тип данных: Поиск), чтобы установить связь.

и вот подробное описание:

Имя API: Lead__c

относится к свинцу

Имя, связанное с детьми: Social_Accounts

Метка связанного списка: Социальные аккаунты

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


Social_Account__c social_account = new Social_Account__c();
/*add whatever fields on social_account*/

List<Lead> leads =[select Id from Lead where Email =:emailAddress ];
if(leads.size()>0)
{ 
    Lead existing_lead = new Lead(Id = leads[0].id);
    //ideally i would like to do something like this
    social_account.Lead__c.id = existing_lead.id; //this is where I get an error from

    insert social_account;
    update existing_lead;
}

но я получаю следующее сообщение об ошибке:

Ошибка: Ошибка компиляции: Неверное отношение внешнего ключа: Social_Account_ c.Lead _c

что я делаю не так? Буду признателен за любые предложения.

спасибо

1 Ответ

7 голосов
/ 25 сентября 2010

Вы не можете «пройти через отношения» с оператором точки (.) С обновлениями, только с чтением данных.

Измени свой social_account.Lead__c.id = existing_lead.Id; в social_account.Lead__c = existing_lead.Id;

Должно быть все, что нужно. Отношения с Salesforce могут быть

SET путем непосредственного изменения созданного вами поля: Social_Account__c.Lead__c, с указанием идентификатора объекта, на который вы хотите указать.

GET (исследовано), немного изменив имя поля и используя точку, в вашем случае это, вероятно, Social_Account__c.Lead__r.(whatever fields on Lead you want).

"_c" и "_r" предназначены для пользовательских объектов, для стандартных, например, есть поле Opportunity.AccountId для настройки, но если вы хотите перейти к учетной записи, введите Opportunity.Account.Name.


Если у вас возникнут проблемы с запоминанием - не беспокойтесь, я тоже;) Обычно, когда я получаю такую ​​ошибку компиляции, я пытаюсь сделать это с помощью построителя запросов (в Apex Explorer или плагине Eclipse). Я просматриваю иерархию объекта, его детей, его родителей и т. Д. И обычно могу использовать фрагменты сгенерированного запроса непосредственно в своем коде Apex.

...