1

我正在使用以下查询尝试从帐户上的用户查找中提取字段。帐户上有一个名为 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”

我稍后在按钮中引用代码,并通过放置来实例化它: dedicatedRep.Dedicated_CS_Rep__r.FirstName

4

1 回答 1

0

从类似的东西开始(我更喜欢 Google Chrome 的 javascript 控制台,您可以使用 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可以是空白的(开箱即用,拥有私人机会是完全有效的;也许您的组织已根据需要标记了该字段)。
  • 同样在理论上,在没有用户的情况下拥有 Account 是有效的。

所以 - 你有 2 次机会遇到空指针异常:

在此处输入图像描述

因此,受到适当保护的代码将具有这种 null / undefined 检查的狂欢:

{!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;
}
于 2014-05-23T22:30:21.173 回答