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

ここで多くの問題が発生する可能性があります。result1 つの Opportunity に対して実行するため、問題はなく、常に 1 行である必要recordsがあります (ページに移動してからボタンをクリックするまでの間に誰かが Opp を削除したというクレイジーなシナリオは無視しましょう... しかし、それでも:

  • 空白にするAccountこともできます (非公開の商談を持つことはそのままで完全に有効です。組織がこのフィールドを必須としてマークしている可能性があります)。
  • 同様に、理論的には、ユーザーなしでアカウントを持つことは有効です。

したがって、null ポインター例外が発生する可能性は 2 つあります。

ここに画像の説明を入力

したがって、適切に保護されたコードには、次のような null / 未定義のチェックが含まれます。

{!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 に答える