2010-04-15 2 views
3

Salesforce에서 API를 통해 리드 레코드를 읽는 응용 프로그램이 있는데 응용 프로그램의 특성에 리드 소유자 필드를 연결하려고합니다. 리드 소유자 필드는 사용 가능한 필드 목록에는 나타나지 않지만 모든 사용자 정의 필드는 수행합니다.리드 맞춤 수식 필드에서 리드 소유자의 이름을 얻으려면 어떻게해야합니까?

그래서 첫 번째 시도는 리드 소유자 이름을 표시하는 맞춤 입력란을 만드는 것이 었습니다. SF 수식 편집기에서 알 수있는 한 실제 데이터 필드를 표시하지 않고 대신 ID 문자열을 표시합니다. 나는 그것을 필요로하는 맥락에서 꽤 의미가 없다.

alt text http://skinny.fire-storm.net/forposting/insertfield.JPG

우리가 객체 그 ID 문자열 참조에있는 데이터를 얻을 수있는 방법이 있나요?

alt text http://skinny.fire-storm.net/forposting/havewant.JPG

나는 빨간색 상자를 가지고 있지만, GREEN BOX가 필요합니다.

편집 : API를 호출하는 응용 프로그램 코드를 변경할 수 없습니다. Salesforce 만 변경할 수 있습니다. 따라서 SF API를 호출하는 코드 작성에 대한 질문이 아닌 영업 사원 수퍼 유저/수식 작성자 질문에 더 가깝습니다.

답변

5

Salesforce는 관련 데이터에 대한 액세스를 relationship queries을 통해 허용합니다. 합류하는 대신 다음과 같이 쿼리를 지정하십시오.

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

시스템 로그에서 실행 해보십시오. 찾고있는 ID로 교체하십시오.

API를 통해 데이터에 액세스 할 때 원칙이 동일하므로 프록시 개체를 사용하여 Lead.Owner.Name에 액세스 할 수 있어야합니다.

편집 :

당신이 갈 수있는 가장 좋은 방법이 될 것 정점 트리거를 생성하는 응용 프로그램 코드를 변경할 수 없기 때문에 내가 eyescream에 동의합니다. 여기에 당신이 시작하는 몇 가지 코드는 다음과 같습니다

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

+0

Salesforce API를 호출하는 코드를 변경할 수 없다는 점을 제외하면 작동합니다. Salesforce 만 변경할 수 있습니다. 내 원래 게시물에 명시해야합니다. –

+0

내 대답의 일부로 샘플 트리거 코드를 추가했습니다 –

+0

회사 SF 계정에 정점 트리거가 없지만 가져 오는 중입니다. 고마워. –

2

VLOOKUP 기능은 좋은 시도가 될 것이지만,

  • 에만 사용자 정의 객체에 사용할 수없는 필드 정의에 만 유효성 검사 규칙에 사용할 수 당신이 필요 사용자의 데이터

난 당신이

SELECT Owner.FirstName, Owner.LastName FROM Lead 
01 응용 프로그램에서 조회 할 필요가있다라고 말하고 싶지만

그 외 ... 소유자 변경시 사용자 정의 필드를 채우는 일부 "삽입 후, 업데이트 후"트리거?

3

나는 비슷한 문제가 있었지만 현재 및 미래의 모든 사용자 필드를 사용할 수 있기를 원했습니다.사용자에 대한 사용자 지정 조회 필드는 수식 필드로 제한되지 않으므로 기회 및 계정 개체에 OwnerLookup 이라는 이름의 개체를 만든 다음 트리거를 사용하여 만들거나 편집 할 때 개체를 채 웁니다.

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 클래스 (에이펙스 코드)입니다 : 나는 다음 기회/계정 개체에 대한 수식 필드를 만들

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; 
    } 
} 

소유자의에 도착 예를 들어, 기회 트리거이있다

OwnerLookup__r.FirstName & " " & OwnerLookup__r.LastName 
1

그냥 완전성을 위해 게시 (및 Google 검색 용) : 같은 Oppty 소유자 이름 수식 필드로 (사용자) 객체 필드는,이 문제는 모든 개체 일에 발생 at는 리드뿐만 아니라 대기열에 넣을 수 있습니다. 소유자는 사용자 (평소대로) 또는 대기열 객체를 참조 할 수 있기 때문입니다.

이 대신 트리거 수식 필드를 사용하여 해결 아래와 같이 할 수있다 : 기본적

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

상기 owner.queuename가 비어 여부 식 검사의 BLANKVALUE 함수이므로 사용자의 이름을 준다면 .

관련 문제