本文已参与「新人创作礼」活动,一起开启掘金创作之路
案例背景
管理员想在Lead被转化之前为该线索安排Email Journey,即Lead被创建后每天发送一封Welcome的Email给Email不为空的潜在客户,这个Journey将持续9天。
情景延伸
管理员很自然的为该业务创建了基于时间的Process Builder,即为Lead创建了一个Email系列的Process Builder,在创建后的1,2,3,4,5,6,7,9d执行Scheduled Action来发送不同内容的Email Alert。
问题描述
后面管理员发现,如果某条Lead在即将执行Action的队列里,那么在Covert线索时候就会报错,如下:
Error: Unable to convert lead that is in use by workflow.
编辑
解决方案
- 我们需要创建一个Checkbox类型的字段开关称为:Cancel Workflow;
- 把该字段加入是否进入Process Builder的准入条件中,即other condition + cancel workflow(false)时,执行Scheduled Action;
- 重写Convert标准按钮,用于勾上Cancel Workflow就能在重新评估Process Builder时不执行。
Demo重现
-
Business Use Case:
-
要定义上述Process需要事先创建Picklist字段(Email1, Email2,Email3)和Cancel Workflow的checkbox字段,默认为Unchecked,同时需要创建3个Email Template和3个Email Alerts准备就绪;
-
接下来我们把Process Builder创建好后可以创建一天符合条件的Lead,让Schedule进入执行队列,那么为了验证你的Process是否有执行可以在Flow里面查看,如下:
-
最关键的一步我们来重写Convert,因此可以创建一个CancelLeadWorkflow的vf:
<apex:page standardController="Lead" >
<apex:form >
<div style="visibility:hidden;">
<apex:inputField value="{!Lead.Cancel_Workflow__c}" id="cancelWorkflow" style="visibility:hidden; "/>
</div>
<apex:actionFunction name="quickSave" action="{!quickSave}" oncomplete="standardConvert();"/>
<apex:actionFunction name="standardConvert"
action="{!URLFOR($Action.Lead.Convert, lead.id, [retURL=$CurrentPage.parameters.retURL], true)}" />
<script language="JavaScript">
var previousOnload = window.onload;
window.onload = function() {
if (previousOnload) previousOnload();
fixLead();
}
function fixLead() {
var elemCancelWorkflow = document.getElementById('{!$Component.cancelWorkflow}');
elemCancelWorkflow.checked = true;
quickSave();
}
</script>
</apex:form>
</apex:page>
- 当我们用该页面重写了Convert按钮后,我们就可以把队列里面的Scheduled Action关掉,从而实现正常转化。