Функция JavaScript для извлечения полей связанных объектов
Я использую следующий запрос, чтобы попытаться извлечь поля из поиска пользователя в учетной записи. В учетной записи есть поле с именем Dedicated_Rep__c, которое является поиском пользователя. Я строю свою кнопку на этой возможности и хочу получить имя, фамилию и адрес электронной почты выделенного представителя учетной записи. Вот мой код:
function getDedicatedAccountRep (oppId) {
var result = sforce.connection.query("select Account.Id, Account.Dedicated_CS_Rep__r.FirstName from Opportunity where Id = '" + oppId + "' ");
if(!result || result['size'] != 1) {
return null;
}
var DedRepRole = result.getArray('records')[0];
return DedRepRole.Account;
}
var dedicatedRep = getDedicatedAccountRep('{!Opportunity.Id}');
Я получаю ошибку:
Не удается прочитать свойство 'Dedicated_CS_Rep__c' из неопределенного
Я ссылаюсь на код позже в кнопке и создаю его экземпляр, добавив:edicRep.Dedicated_CS_Rep__r.FirstName
1 ответ
Начните с чего-то подобного (я предпочитаю консоль JavaScript в Google Chrome, вы можете открыть ее с помощью Ctrl+Shift+J; но вы можете свободно использовать Firefox + Firebug или инструменты разработчика IE...)
{!requireScript("/soap/ajax/29.0/connection.js")}
var result = sforce.connection.query("SELECT Account.Dedicated_CS_Rep__r.FirstName FROM Opportunity WHERE Id = '{!Opportunity.Id}'");
console.log(result);
debugger;
Это позволит вам проверить результат запроса и поиграть с результатами. Я думаю, что ваша проблема в том, что полное выражение может выглядеть так:
result.records.Account.Dedicated_CS_Rep__r.FirstName
Здесь многое может пойти не так. result
должно быть в порядке и records
должно быть всегда 1 строка, так как мы запускаем его для одной возможности (давайте не будем обращать внимание на сумасшедшие сценарии, когда кто-то удалял Opp, когда вы переходили на страницу и нажимали кнопку... Но все же:
Account
может быть пустым (из коробки вполне допустимо иметь личные возможности; возможно, ваша организация пометила поле как обязательное).- И, аналогично, в теории действительно иметь учетную запись без пользователя.
Итак, у вас есть 2 шанса поразить исключение нулевого указателя:
Поэтому правильно защищенный код будет иметь такую оргию нулевых / неопределенных проверок:
{!requireScript("/soap/ajax/29.0/connection.js")}
var result = sforce.connection.query("SELECT Account.Dedicated_CS_Rep__r.FirstName FROM Opportunity WHERE Id = '{!Opportunity.Id}'");
console.log(result);
if(result != null
&& result.records != null
&& result.records.Account != null
&& result.records.Account.Dedicated_CS_Rep__r != null){
alert(result.records.Account.Dedicated_CS_Rep__r);
// return result.records.Account.Dedicated_CS_Rep__r;
} else {
alert('Nope');
// return null;
}