2020-11-29 Custom button to run Batch Class

有这样一个需求, 针对Lead上的某个字段的计算复杂度和实时性要求不高,所以客户想要有一个自定义的Button,可以去Sync这个数据,下面是针对这个需求的具体思路:

  • 创建自定义 Action Or Button
    从下图中我们可以看到 Action 提供的选项中,Flow有可能会实现我们的逻辑.


    image.png
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);
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容