用于拉取相关对象字段的JavaScript函数

时间:2014-05-22 17:33:42

标签: javascript salesforce salesforce-service-cloud

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

我稍后在按钮中引用代码,并通过put:dedicatedRep.Dedicated_CS_Rep__r.FirstName

实例化它

1 个答案:

答案 0 :(得分: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可以为空白(开箱即用,拥有私人机会完全有效;也许您的组织已根据需要标记了该字段)。
  • 同样在理论上,没有用户的帐户也是有效的。

所以 - 你有2次机会击中空指针异常:

enter image description here

因此,受到适当保护的代码会产生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;
}