本篇参考: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匹配问题导致,两种情况:

  1. picklist value不匹配;
  2. 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 有趣的经历的更多相关文章

  1. salesforce 零基础学习(二十九)Record Types简单介绍

    在项目中我们可能会遇见这种情况,不同的Profile拥有不同的页面,页面中的PickList标签可能显示不同的值.这个时候,使用Record Types可以很便捷的搞定需求. Record Types ...

  2. salesforce零基础学习(八十九)使用 input type=file 以及RemoteAction方式上传附件

    在classic环境中,salesforce提供了<apex:inputFile>标签用来实现附件的上传以及内容获取.salesforce 零基础学习(二十四)解析csv格式内容中有类似的 ...

  3. salesforce 零基础学习(二十二)Test简单使用

    本篇内容只是本人简单的mark开发中常出现的一些疑问,方便后期项目使用时奠定基础,如果对Test零基础童鞋,欢迎查看Test官方的使用介绍: https://help.salesforce.com/a ...

  4. salesforce 零基础学习(二十)简单APP制作

    本篇参考链接:https://developer.salesforce.com/trailhead/project/salesforce_developer_workshop 本篇讲述的是最简单的AP ...

  5. salesforce 零基础学习(三十九) soql函数以及常量

    在salesforce中,我们做SOQL查询时,往往需要用到计算式,比如求和,求平均值,或者过滤数据时,往往需要通过时间日期过滤,SOQL已经封装了很多的函数,可以更加方便我们的sql查询而不需要自己 ...

  6. salesforce 零基础学习(二十八)使用ajax方式实现联动

    之前的一篇介绍过关于salesforce手动配置关联关系实现PickList的联动效果,但是现实的开发中,很多数据不是定死的,应该通过ajax来动态获取,本篇讲述通过JavaScript Remoti ...

  7. salesforce 零基础学习(二十四)解析csv格式内容

    salesforce中支持对csv格式的内容批量导入,可以使用dataloader,然而有些情况下,当用户没有相关权限使用dataloader导入情况下,就的需要使用VF和apex代码来搞定. 基本想 ...

  8. salesforce 零基础学习(六十九)当新增/修改一条记录以后发生了什么(适合初学者)

    salesforce开发中,我们会对object进行很多的操作,比如对object设置字段的必填性唯一性等,设置validation rule实现一下相关的字段的逻辑校验,设置workflow实现某个 ...

  9. salesforce零基础学习(七十九)简单排序浅谈 篇一

    我们在程序中经常需要对数据列表进行排序,有时候使用SOQL的order by 不一定能完全符合需求,需要对数据进行排序,排序可以有多种方式,不同的方式针对不同的场景.篇一只是简单的描述一下选择排序,插 ...

  10. salesforce 零基础学习(五十九)apex:param使用以及相关的疑惑

    做web项目难免要从一个页面传参数,解析参数中的值进行相关处理以后跳转到其他页面,VF中也不例外.使用传参的标签为apex:param. apex:param标签不可以单独使用,需要作为子标签嵌套在相 ...

随机推荐

  1. 官宣 | Hugging Face 中文博客正式发布!

    作者:Tiezhen.Adina.Luke Hugging Face 的中国社区成立已经有五个月之久,我们也非常高兴的看到 Hugging Face 相关的中文内容在各个平台广受好评,我们也注意到,H ...

  2. c# 异步进阶———— 自定义 taskschedule[三]

    前言 我们知道我们的task async 和 await 是基于线程池进行调度的. 但是async 和 await 也就是使用了默认的task调度,让其在线程池中运行. 但是线程池是榨干机器性能为本质 ...

  3. 【总结】从++i思考计算机原子性和线程安全

    在C++中,++i被认为是一种原子性操作,即不可分割的.不可中断的整体.它能够确保对变量的修改完整且正确,从而避免了数据竞争等问题,提高了程序的并发性和可靠性.然而,有些人可能会将原子性和线程安全混淆 ...

  4. shell执行一个程序过程

    1:shell调用执行程序或脚本 2:unix内核启动一个新的进程,在该进程中执行所指定的程序. 3:如果是编译型程序,内核成执行,如果无法执行指定的程序,返回"not executable ...

  5. selenium 多窗口处理与网页frame

    多窗口处理 点击某些链接,会重新打开一个窗口,对于这种情况.想在薪页面操作,就得先切换窗口了. 获取窗口得唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面进行操作了 1. 先获取到当前得窗口句 ...

  6. 2023-01-09:以下go语言代码输出什么?A:+Inf; B:zero; C:something else; D:doesn‘t compile。 package main import (

    2023-01-09:以下go语言代码输出什么?A:+Inf: B:zero: C:something else: D:doesn't compile. package main import ( & ...

  7. 报错HTTP 405 Method Not Allowed, Allow: POST, OPTIONS, "detail": "方法 “GET” 不被允许。"

    当测试注册功能是否实现时,出现了这种情况的405:HTTP 405 Method Not AllowedAllow: POST, OPTIONSContent-Type: application/js ...

  8. [NISACTF 2022]bingdundun~

    [NISACTF 2022]bingdundun~ 考点 文件上传.Phar://伪协议 一.题目 打开题目,发现是一道文件上传的题目,因为提示了可以压缩包,所以尝试直接上传zip文件,然后利用PHP ...

  9. AcWing 1024. 装箱问题

    有一个箱子容量为 V,同时有 n 个物品,每个物品有一个体积(正整数). 要求 n 个物品中,任取若干个装入箱内,使箱子的剩余空间为最小. 输入格式 第一行是一个整数 V,表示箱子容量. 第二行是一个 ...

  10. docker安装带postgis插件的postgresql 数据库

    最初直接拉取的postgresql 数据,在导入 .bakup 文件时始终会报错,最后才想到该数据库默认不带postgis空间组件 一.拉取镜像 这里我们拉取postgres 和 gis 组合的镜像 ...