2020-11-29 Custom button to run
2020-11-30 本文已影响0人
古月的小七
有这样一个需求, 针对Lead上的某个字段的计算复杂度和实时性要求不高,所以客户想要有一个自定义的Button,可以去Sync这个数据,下面是针对这个需求的具体思路:
-
创建自定义 Action Or Button
从下图中我们可以看到 Action 提供的选项中,Flow有可能会实现我们的逻辑.
image.png
但是如下图所示, 在Schedule-Triggered Flow中,必须设置一个时间,而我们要求是点击Button之后去 Run Batch.所以这个方案不可行.
image.png
所以选用 New Button的时候去执行JS 逻辑,具体实现如下:
image.png
在上图JS处完善JS 逻辑:
具体实现:
{!REQUIRESCRIPT("/soap/ajax/30.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/30.0/apex.js")}
sforce.apex.execute(" RunLeadScoreUpdateBatch","execute",{});
后台Apex对应的写法应该是:
global with sharing class RunLeadScoreUpdateBatch {
webService static void execute(){
BatchLeadUpdate b = new BatchLeadUpdate ();
//Parameters of ExecuteBatch(context,BatchSize)
database.executebatch(b,500);
}
}
这样是可以成功实现该逻辑,但是由于Batch运行时间通常会比较长一些,但是也没没有任何提示, 所以这个设计还需要完善. 持续研究中,会在后续持续更新.
更新来了:我们可以通过以下的方式拿到当前Record的Id,并且对整个页面进行刷新操作:document.location.reload(true)
{!REQUIRESCRIPT("/soap/ajax/30.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/30.0/apex.js")}
var leadId = "{!Lead.Id}";
sforce.apex.execute("RunLeadScoreUpdateBatch","execute",{leadId});
document.location.reload(true);