有這樣一個需求, 針對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);
