salesforce零基础学习(一百二十九)Lead Convertion 有趣的经历
本篇参考:https://help.salesforce.com/s/articleView?id=000382564&type=1
Lead Convertion 是salesforce中sales cloud的一个很好用的功能。sales cloud流程可以简单的理解成 lead to cash。当对lead进行打分以及不断的孵化以后,优质lead会转成 Account & Contact & Opportunity。
背景: Lead / Contact / Opportunity 都创建了自定义的Picklist字段 Primary,包含的值为True以及false。并且做了Convert的field mapping。

后来需求变化,Opportunity的Primary字段变成了Checkbox类型,并且UI上来看,Map Lead Fields区域匹配关系已经自动消失。

我们来做一下lead convert的实验。
1. 被validation rule拦截:这种报错的好处是特别好定位到错误的位置,系统会提示哪个表被触发了validation rule导致失败。

2. 未知错误。There was an error converting the lead. Please try again. If the problem persists, please contact your administrator:发生这种问题以后,即使查看debug log也很难查出来问题,下方demo中的debug就没有特别多的信息,那么如何去处理这种问题呢?

我们看到文档中主要包含4种定位的错误:
- Converting Lead into Existing Opportunity:多货币情况下,如果lead的货币(currency)和已有的Opportunity的货币不同,转换时会出现这种报错,这种情况下保证两边货币相同即可;
- Field mapped to package that is expired:如果有一个自定义字段被映射到Account或Contact Object,而该字段是已过期或已禁用的托管包的一部分,那么线索转换可能会失败。这种情况下检查为组织安装的软件包,找到任何接触到 Lead的软件包,并检查作为该软件包一部分的任何自定义字段,确保在该软件包过期或禁用的情况下,它们不会仍被用于映射;
- Discrepancy in the mapped picklist field:针对picklist类型字段,如果两边picklist value不同,可能会导致失败,这种情况下检查两者的value值;
- Flow Error related to automation:当Lead Convertion时,相关目标表的automation flow有bug导致的问题。这种情况下可以打一个debug log去诊断。
切回到上方的问题,如何来快速定位到呢? 下面是我当时的一个经历,说不上最优,仅供参考。
1. 首先定位到哪个表发生的问题,通过debug log发现日志已经走了 Account以及Contact并且没有报错,说明大概率是Opportunity出现了问题,导致了这个未知错误,在诊断时,先不选择Opportunity看是否转换成功,如果成功则证明Opportunity问题,否则重新定位。

2. 既然确定是Opportunity的问题,则优先调查process automation相关,即Workflow / Process Builder / Flow。通过日志我们发现没有Opportunity的报错,说明大概率不是automation导致的问题,保险起见,我们可以在测试环境关闭所有的automation,测试是否由这个引起。
3. 如果不是2引起的,大概率是picklist匹配问题导致,两种情况:
- picklist value不匹配;
- picklist类型变了其他的类型,导致类型不匹配。
类型不匹配比较较快,这里推荐一个简单的方法。我们把lead field mapping资源通过metadata 检索下来,再重新部署,如果不报错证明配置没问题,如果报错证明出现问题,则可以快速定位到问题。
xml如下:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns="http://soap.sforce.com/2006/04/metadata">
<types>
<members>*</members>
<name>LeadConvertSettings</name>
</types>
<version>56.0</version>
</Package>
效果如下:

通过这种方式就可以快速的定位到了问题,这个问题令人挺疑惑的,因为从最开始的gif可以看到,UI上来看,这个mapping已经解除了,但其实没有,metadata层面还保留,只有UI点击了save以后才生效。
总结:篇中主要介绍了针对Lead Convertion制定错误的思考,篇中不一定是最优解,仅供参考,有错误地方欢迎指出,有不懂欢迎留言。
salesforce零基础学习(一百二十九)Lead Convertion 有趣的经历的更多相关文章
- salesforce 零基础学习(二十九)Record Types简单介绍
在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...
- salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件
在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...
- salesforce 零基础学习(二十二)Test简单使用
本篇内容只是本人简单的mark开发中常出现的一些疑问,方便后期项目使用时奠定基础,如果对Test零基础童鞋,欢迎查看Test官方的使用介绍: https://help.salesforce.com/a ...
- salesforce 零基础学习(二十)简单APP制作
本篇参考链接:https://developer.salesforce.com/trailhead/project/salesforce_developer_workshop 本篇讲述的是最简单的AP ...
- salesforce 零基础学习(三十九) soql函数以及常量
在salesforce中,我们做SOQL查询时,往往需要用到计算式,比如求和,求平均值,或者过滤数据时,往往需要通过时间日期过滤,SOQL已经封装了很多的函数,可以更加方便我们的sql查询而不需要自己 ...
- salesforce 零基础学习(二十八)使用ajax方式实现联动
之前的一篇介绍过关于salesforce手动配置关联关系实现PickList的联动效果,但是现实的开发中,很多数据不是定死的,应该通过ajax来动态获取,本篇讲述通过JavaScript Remoti ...
- salesforce 零基础学习(二十四)解析csv格式内容
salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需要使用VF和apex代码来搞定. 基本想 ...
- salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)
salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...
- salesforce零基础学习(七十九)简单排序浅谈 篇一
我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...
- salesforce 零基础学习(五十九)apex:param使用以及相关的疑惑
做web项目难免要从一个页面传参数,解析参数中的值进行相关处理以后跳转到其他页面,VF中也不例外.使用传参的标签为apex:param. apex:param标签不可以单独使用,需要作为子标签嵌套在相 ...
随机推荐
- Redis报错MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on
1.错误信息 org.redisson.client.RedisException: MISCONF Redis is configured to save RDB snapshots, but is ...
- Linux tinyhttpd编译总结
编译环境:ubuntu16.04 x64 直接make编译tinyhttpd弹出如下错误和打印信息 其中报出两个错误信息,一个是cannot find -lsocket,另外一个就是pthread_ ...
- js中 call()与apply()方法 和 bind()方法
call与apply都属于Function.prototype(即原型对象身上的方法)的一个方法,所以每个function实例都有call.apply属性: call()和apply() 是静态方法, ...
- Python 项目:外星人入侵--第二部分
外星人入侵 6.驾驶飞船 玩家左右移动飞船,用户按左或右按键时作出响应. 6.1响应按键 当用户在按键时,在python中注册一个事件,事件都是通过方法pygame.event.get()获取的. 在 ...
- CST为什么要关闭 GPU 卡的 ECC 模式而开启 TCC 模式?操作使用【详解】
在使用CST软件之前,我们一般建议大家关闭 GPU 卡的 ECC 模式而开启 TCC 模式.那么,为什么要进行这样一个操作呢?在此之前,给大家科普一下什么是"ECC"和" ...
- NIST SP 800-37 Risk Management Framework for Information Systems and Organizations A System Life Cycle Approach for Security and Privacy
NIST SP 800-37 Risk Management Framework for Information Systems and Organizations A System Life Cyc ...
- 代码随想录算法训练营Day23 二叉树
代码随想录算法训练营 代码随想录算法训练营Day23 二叉树|669. 修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 总结篇 669. 修剪二叉搜索树 题目链接 ...
- 微软New Bing Chat AI聊天免费体验(需要魔法~)
必应聊天是什么? Bing Chat是一个AI 聊天机器人,它可以理解您问题的上下文并以人性化的方式回复.Microsoft 已将此功能直接集成到Bing 搜索中,使 Bing 成为搜索结果和AI 支 ...
- 《Just For Fun》:学习即游戏
<Just For Fun>:学习即游戏 最近读完了 Linus 的自传<Just For Fun>,一直想写点东西,但始终苦于工作繁忙,无暇思考该从何写起.技术上自然不用废话 ...
- 2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline?
2023-06-03:redis中pipeline有什么好处,为什么要用 pipeline? 答案2023-06-03: Redis客户端执行一条命令通常包括以下四个阶段: 1.发送命令:客户端将要执 ...