首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在销售线索自定义公式字段中获取销售线索所有者的姓名?

如何在销售线索自定义公式字段中获取销售线索所有者的姓名?
EN

Stack Overflow用户
提问于 2010-04-16 07:06:15
回答 4查看 24.3K关注 0票数 4

我有一个通过API从Salesforce读取销售线索记录的应用程序,我想将Lead Owner字段链接到应用程序中的一个属性。Lead Owner字段不在可用字段列表中,但所有自定义字段都在列表中。

因此,我在解决方案中的第一个尝试是创建一个显示潜在客户所有者姓名的自定义字段。在SF公式编辑器中,据我所知,它不显示实际的数据字段,而是显示ID字符串。在我需要它的背景下,这是非常没有意义的。

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

有没有一种方法可以获取ID字符串引用的对象中的数据?

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

我有红色的盒子,但需要绿色的盒子。

编辑:我不能更改调用API的应用程序代码。我只能改变salesforce。因此,这更像是一个salesforce超级用户/公式编写者的问题,而不是一个关于编写调用SF的代码的问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-04-16 08:20:44

Salesforce允许通过他们所谓的relationship queries访问相关数据。您可以按如下方式指定查询,而不是连接:

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

尝试在系统日志中运行它,只需将销售线索ID替换为您正在查看的ID。

当通过API访问数据时,原理是相同的,您的代理对象应该允许您访问Lead.Owner.Name。

编辑:

我同意eyescream的观点,因为您不能更改应用程序代码,因此创建Apex触发器将是最好的方法。下面是一些代码,可以帮助您入门:

代码语言:javascript
复制
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需要是包含所有者名称的lead对象上的自定义字段的名称。键入Text,长度121。

票数 5
EN

Stack Overflow用户

发布于 2012-11-20 03:27:48

我也有类似的问题,但我希望所有当前和未来的用户字段都可用。由于用户的自定义查找字段不受公式字段的限制,因此我在Opportunity和Account对象上创建了一个名为OwnerLookup的字段,然后在创建或编辑时使用触发器填充该字段。例如,机会触发器是这样的:

代码语言:javascript
复制
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代码)是:

代码语言:javascript
复制
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对象上创建公式字段,以转到任何所有者(用户)对象字段,例如Oppty owner Name公式字段:

代码语言:javascript
复制
OwnerLookup__r.FirstName & " " & OwnerLookup__r.LastName
票数 3
EN

Stack Overflow用户

发布于 2010-04-16 08:33:55

VLOOKUP函数将是一个很好的尝试,但是

  • 它仅在验证规则中可用,在字段定义中不可用
  • 它只能用于自定义对象,并且您需要来自User

的数据

我认为您需要从您的应用程序中查询

代码语言:javascript
复制
SELECT Owner.FirstName, Owner.LastName FROM Lead

除此之外。一些“插入后,更新后”触发器,当所有者改变时,将填充您的自定义字段?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2649588

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档