Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Salesforce 如何在Lead自定义公式字段中获取Lead所有者的名称?_Salesforce - Fatal编程技术网

Salesforce 如何在Lead自定义公式字段中获取Lead所有者的名称?

Salesforce 如何在Lead自定义公式字段中获取Lead所有者的名称?,salesforce,Salesforce,我有一个应用程序可以通过API从Salesforce读取Lead记录,我想将Lead Owner字段链接到应用程序中的一个属性。Lead Owner字段未出现在可用字段列表中,但所有自定义字段都会出现 因此,我的第一次尝试是创建一个显示Lead Owner名称的自定义字段。在SF公式编辑器中,据我所知,它不显示实际的数据字段,而是显示ID字符串。这在我需要它的背景下是毫无意义的 有没有一种方法可以获取ID字符串引用的对象中的数据 我有红色的盒子,但需要绿色的盒子 编辑:我无法更改调用API的

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

因此,我的第一次尝试是创建一个显示Lead Owner名称的自定义字段。在SF公式编辑器中,据我所知,它不显示实际的数据字段,而是显示ID字符串。这在我需要它的背景下是毫无意义的

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

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


编辑:我无法更改调用API的应用程序代码。我只能更换销售人员。因此,这更多的是salesforce超级用户/公式编写者的问题,而不是编写调用SF API的代码的问题。

salesforce允许通过调用的内容访问相关数据。您可以按如下方式指定查询,而不是加入:

调试([从Lead中选择Owner.Name,其中Id='00QS00000037lvv'].Owner.Name)

尝试在系统日志中运行它,只需将lead 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\u更新Lead上的所有者(插入前、更新前)
{
映射所有者映射=新映射();
用于(潜在客户:触发器。新)
{
ownerMap.put(lead.OwnerId,null);
}
如果(ownerMap.size()>0)
{
对于(用户[]用户:[从用户中选择Id和名称,其中Id位于:ownerMap.keySet()])
{
对于(整数i=0;i函数是一个很好的尝试,但是

  • 它仅在验证规则中可用,在字段定义中不可用
  • 它只能用于自定义对象,并且您需要来自用户的数据
我想说你需要从你的申请中查询

SELECT Owner.FirstName, Owner.LastName FROM Lead

除此之外…一些“插入后,更新后”触发器会在所有者更改时填充自定义字段?

我也有类似的问题,但希望所有当前和未来的用户字段都可用。由于用户的自定义查找字段不受公式字段的限制,我创建了一个名为 所有者Lookup 在Opportunity和Account对象上,然后在创建或编辑时使用触发器填充它。例如,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代码)是:


出于完整性考虑(以及谷歌搜索):问题出现在任何可以排队的对象上,而不仅仅是Lead,因为它的来源是所有者可以引用用户(像往常一样)或队列对象

可以使用公式字段而不是触发器来解决此问题,如下所示:

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

基本上,公式中的
BLANKVALUE
函数会检查
owner.queuename
是否为空,如果为空,则会给出用户的姓名。

可以,但我不能更改调用Salesforce API的代码。我只能更改Salesforce。我应该在我的原始帖子中指定它。我没有我公司的SF账户里有装配工,但我正在努力找到他们!谢谢。
OwnerLookup__r.FirstName & " " & OwnerLookup__r.LastName
BLANKVALUE(Owner:Queue.QueueName, Owner:User.FirstName & " " & Owner:User.LastName)