5

APIを介してSalesforceからリードレコードを読み取るアプリケーションがあり、リード所有者フィールドをアプリケーションの属性にリンクしたいと思います。リードオーナーフィールドは使用可能なフィールドのリストに表示されませんが、すべてのカスタムフィールドは表示されます。

そのため、解決策として最初に試みたのは、リードオーナー名を表示するカスタムフィールドを作成することでした。SF数式エディタでは、私が知る限り、実際のデータフィールドは表示されず、代わりにID文字列が表示されます。これは、私が必要としている状況ではまったく意味がありません。

代替テキストhttp://skinny.fire-storm.net/forposting/insertfield.JPG

ID文字列が参照するオブジェクトのデータを取得する方法はありますか?

代替テキストhttp://skinny.fire-storm.net/forposting/havewant.JPG

RED BOXを持っていますが、GREENBOXが必要です。

編集:APIを呼び出すアプリケーションコードを変更できません。変更できるのは営業部隊だけです。したがって、これはセールスフォースのスーパーユーザー/フォーミュラライターの質問であり、SFAPIを呼び出すコードの記述に関する質問ではありません。

4

4 に答える 4

5

Salesforceでは、リレーションシップクエリと呼ばれるものを介して関連データにアクセスできます。参加する代わりに、次のようにクエリを指定します。

System.debug([SELECT Owner.Name FROM Lead WHERE Id = '00QS00000037lvv']。Owner.Name);

システムログでそれを実行してみてください。リードIDを現在のIDに置き換えてください。

APIを介してデータにアクセスする場合、原則は同じです。プロキシオブジェクトでLead.Owner.Nameにアクセスできるようにする必要があります。

編集:

アプリケーションコードを変更することはできないので、アイクリームに同意します。Apexトリガーを作成するのがここに行くための最良の方法です。始めるためのコードは次のとおりです。

trigger Lead_UpdateOwner on Lead(before insert, before update)
{
    Map<Id, String> ownerMap = new Map<Id, String>();
    for (Lead lead : Trigger.new)
    {
        ownerMap.put(lead.OwnerId, null);
    }

    if (ownerMap.size() > 0)
    {
        for (User[] users : [SELECT Id, Name FROM User WHERE Id IN :ownerMap.keySet()])
        {
            for (Integer i=0; i<users.size(); i++)
            {
                ownerMap.put(users[i].Id, users[i].Name);
            }
        }
        for (Lead lead : Trigger.new)
        {
            lead.OwnerName__c = ownerMap.get(lead.OwnerId);
        }
    }
}

Lead.OwnerName__cは、所有者名を保持するリードオブジェクトのカスタムフィールドの名前である必要があります。テキスト、長さ121と入力します。

于 2010-04-16T00:20:43.963 に答える
3

同様の問題が発生しましたが、現在および将来のすべてのユーザーフィールドを使用できるようにしたかったのです。ユーザーへのカスタムルックアップフィールドは数式フィールドによって制限されないため、OpportunityオブジェクトとAccountオブジェクトにOwnerLookupという名前のフィールドを作成し、トリガーを使用して作成または編集時にデータを入力しました。たとえば、Opportunityトリガーは次のとおりです。

trigger OpportunityTrigger on Opportunity (before insert, after insert, before update, after update) {
    if(trigger.isBefore && trigger.isInsert) {
        OpportunityTriggerHandler.newOpportunity(Trigger.old, Trigger.new);
    }    
    else if(trigger.isAfter && trigger.isInsert){
        //OpportunityTriggerHandler.futureUse(Trigger.new);
    }
    else if(trigger.isBefore  && trigger.isUpdate){
        OpportunityTriggerHandler.updateOpportunity(Trigger.new, Trigger.oldMap);
    }
    else if(trigger.isAfter && trigger.isUpdate){
        //OpportunityTriggerHandler.futureUse(Trigger.new, Trigger.oldMap);
    }
}

OpportunityTriggerHandlerクラス(Apexコード)は次のとおりです。

public with sharing class OpportunityTriggerHandler {
    public static void newOpportunity( List<Opportunity> oldOpportunitys, List<Opportunity> newOpportunitys ) {
        for (Opportunity opp: newOpportunitys) {
            updateOwnerData( opp );
        }
    }

    public static void updateOpportunity( List<Opportunity> oldOpportunitys, Map<Id, Opportunity> newOpportunitys ) {
        for (Opportunity opp: oldOpportunitys) {
            updateOwnerData( opp );
        }
    }

    public static void updateOwnerData( Opportunity opp ) {
        opp.OwnerLookup__c = opp.OwnerId;
    }
}

次に、Opportunity / AccountオブジェクトにFormulaフィールドを作成して、Oppty Owner Name数式フィールドなどの所有者(ユーザー)オブジェクトフィールドのいずれかにアクセスします。

OwnerLookup__r.FirstName & " " & OwnerLookup__r.LastName
于 2012-11-19T19:27:48.450 に答える
2

VLOOKUP関数は良い試みですが、

  • フィールド定義ではなく、検証ルールでのみ使用できます
  • カスタムオブジェクトでのみ使用でき、ユーザーからのデータが必要です

アプリケーションからクエリを実行する必要があると思います

SELECT Owner.FirstName, Owner.LastName FROM Lead

それ以外は...所有者が変更されたときにカスタムフィールドに入力する「挿入後、更新後」のトリガーはありますか?

于 2010-04-16T00:33:54.573 に答える
2

完全を期すために(そしてGoogle検索のために)投稿するだけ:この問題は、リードだけでなく、キューに入れることができるすべてのオブジェクトで発生します。これは、所有者がユーザー(通常どおり)またはキューのいずれかを参照できることが原因であるためです。物体。

これは、以下のように、トリガーの代わりに数式フィールドを使用して解決できます。

BLANKVALUE(Owner:Queue.QueueName, Owner:User.FirstName & " " & Owner:User.LastName)

基本的にBLANKVALUE、数式の関数は、が空白かどうかをチェックし、owner.queuename空白の場合はユーザーの名前を示します。

于 2014-11-24T13:23:09.880 に答える