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