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

用于提取相关对象字段的JavaScript函数,javascript,salesforce,salesforce-service-cloud,Javascript,Salesforce,Salesforce Service Cloud,我正在使用以下查询尝试从帐户的用户查找中提取字段。帐户上有一个名为“专用”的字段,它是用户查找。我正在根据opportunity构建我的按钮,我希望能够提取opportunity帐户的专用代表的名字、姓氏和电子邮件。这是我的密码: function getDedicatedAccountRep (oppId) { var result = sforce.connection.query("select Account.Id, Account.Dedicated_CS_Rep__r.Fir

我正在使用以下查询尝试从帐户的用户查找中提取字段。帐户上有一个名为“专用”的字段,它是用户查找。我正在根据opportunity构建我的按钮,我希望能够提取opportunity帐户的专用代表的名字、姓氏和电子邮件。这是我的密码:

    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}'); 
我得到一个错误:

无法读取未定义的属性“专用\u CS\u Rep\u c”


我稍后在按钮中引用代码,并通过以下方式对其进行实例化:IdedicatedRep.Idedicated_CS_Rep_r.FirstName

从类似的内容开始我更喜欢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
这里可能会出很多问题。结果应该是确定的,记录应该总是1行,因为我们只运行了一次机会让我们忽略一些疯狂的场景,在您导航到页面和单击按钮之间,有人删除了Opp。。。但仍然:

该帐户可以是空白的开箱即用,拥有私人机会是完全有效的;也许您的组织已按要求标记了该字段。 同样,理论上,在没有用户的情况下使用帐户也是有效的。 因此-您有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;
}

转到安装程序,检查帐户上的自定义字段,找到专用代表检查字段的API名称-专用代表c或专用代表c?它是专用代表c。所以我的代码是正确的。我想知道我的返回声明是否有问题。现在看来我要把账户还回去了。我是否需要返回专用的_CS_Rep查找?