2020-11-29 Custom button to run Batch Class

有這樣一個需求, 針對Lead上的某個字段的計算復(fù)雜度和實時性要求不高,所以客戶想要有一個自定義的Button,可以去Sync這個數(shù)據(jù),下面是針對這個需求的具體思路:

  • 創(chuàng)建自定義 Action Or Button
    從下圖中我們可以看到 Action 提供的選項中,F(xiàn)low有可能會實現(xiàn)我們的邏輯.


    image.png
image.png

但是如下圖所示, 在Schedule-Triggered Flow中,必須設(shè)置一個時間,而我們要求是點擊Button之后去 Run Batch.所以這個方案不可行.


image.png

所以選用 New Button的時候去執(zhí)行JS 邏輯,具體實現(xiàn)如下:


image.png

在上圖JS處完善JS 邏輯:
具體實現(xiàn):
{!REQUIRESCRIPT("/soap/ajax/30.0/connection.js")}
{!REQUIRESCRIPT("/soap/ajax/30.0/apex.js")}
sforce.apex.execute("  RunLeadScoreUpdateBatch","execute",{});

后臺Apex對應(yīng)的寫法應(yīng)該是:

global with sharing class RunLeadScoreUpdateBatch {
    webService static void execute(){
       BatchLeadUpdate b = new BatchLeadUpdate ();  
        //Parameters of ExecuteBatch(context,BatchSize)
        database.executebatch(b,500);
    }
}

這樣是可以成功實現(xiàn)該邏輯,但是由于Batch運(yùn)行時間通常會比較長一些,但是也沒沒有任何提示, 所以這個設(shè)計還需要完善. 持續(xù)研究中,會在后續(xù)持續(xù)更新.

更新來了:我們可以通過以下的方式拿到當(dāng)前Record的Id,并且對整個頁面進(jìn)行刷新操作: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);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容