反饋已提交
網絡繁忙
FineReport 在排程管理中提供了自訂類判斷功能。使用者可以根據業務需要自己編寫自訂類,然後交給系統執行,並根據自訂類的條件傳回結果來判斷是否執行該定時任務。
FineReport 支援在排程管理任務中,透過自訂類的條件傳回結果來判斷是否執行定時任務。
FineReport 提供 com.fr.schedule.base.provider.ExecuteCondition API,該API有一個方法 public boolean execute(),完成條件判斷邏輯並傳回判斷結果。如下所示:
當自訂類條件傳回結果為 true 時,執行定時任務。
當自訂類條件傳回結果為 false 時,不執行或者延遲執行定時任務。
自訂類判斷包括:無參數自訂類判斷、有參數自訂類判斷。
其中,有參數自訂類判斷可以滿足定時任務的複用需求,使用者可在參數設定面板中新增參數並指派。如下圖所示:
在自訂類判斷中,當選擇一個具體的自訂類之後,下方會出現參數設定面板,可以在其中新增參數並指派。
參數設定面板狀態如下:
1)新增參數並指派後,切換自訂類,參數設定面板不會保留原參數設定資訊。
2)儲存任務後,再次開啟任務,可查看到參數設定面板會保留已儲存任務的參數設定資訊。
注:如果在儲存任務後,再次開啟該任務切換自訂類,即使再切換回原自訂類,參數設定面板也不會保留原參數設定資訊。
1)參數名稱必須為字母、數字、中文的組合,且參數名稱開頭不能為數字。
2)參數設定中,指派框預設輸入字串格式,在自訂類中需要對拿到的值進行所需類型轉換。
本文將透過具體範例來示範排程管理中自訂類判斷功能的使用方法。
範例一:無參數自訂類判斷
在執行定時任務時判斷今天是不是週二,如果是週二就執行定時任務,不是週二就不執行定時任務
1)準備無參數自訂類
2)設定定時任務
3)執行一次,查看執行效果
條件判斷結果傳回 true,執行定時任務
條件判斷結果傳回 false,不執行定時任務
範例二:有參數自訂類判斷
1)準備有參數自訂類
本節範例:使用無參數的自訂類判斷功能,實現只在週二執行定時任務。
定時任務:推播銷售概況報表到銷售主管 Lisa 的數據決策系統訊息通知處。
點選下載並解壓獲取 Java 檔案:ExecuteClass.zip
編寫ExecuteClass.java,程式碼如下所示:
package com.fr.schedule;import java.util.Calendar;import com.fr.schedule.base.provider.ExecuteCondition;public class ExecuteClass implements ExecuteCondition {public boolean execute() {Calendar cal = Calendar.getInstance();int dow = cal.get(Calendar.DAY_OF_WEEK);//星期二的dow等於3return (dow) == 3;}}
1)生成 class 檔案
編譯 ExecuteClass.java,生成 ExecuteClass.class 檔案。
2)匯入 class 檔案
將編譯後的 ExecuteClass.class 檔案儲存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。
注:編譯環境準備和編譯 Java 檔案的詳細步驟請參見:編譯Java程式。
管理者登入數據決策系統,點選「管理系統>排程管理>任務管理」,點選「新增任務」,新增一個排程管理任務。如下圖所示:
1)「任務名稱」設定為「週二銷售概況通知」。
2)點選「預設使用者組」的「編輯」按鈕。部門選擇銷售部的「saleLeader」,點選確定。
注:如需使用平台通知,必須要設定預設使用者組,否則訊息無法傳送給任何人。
如下圖所示:
確認部門處已選定「所有部門:銷售部:saleLeader; 」,點選「確定」,預設使用者組設定完成。點選「下一步」,如下圖所示:
1)物件類型選擇:報表範本
2)選擇範本:GettingStarted.cpt
3)檔案名稱稱設定:${today()}地區銷售概況
點選「下一步」,如下圖所示:
1)設定執行頻率
執行頻率選擇「明細頻率設定」,點選「新增」。
設定執行時間為「18時0分」,執行日為「每日」,執行月為「全選」,點選「確定」,即可成功新增明細頻率。
勾選上一步新增的明細頻率。
2)設定執行條件
執行條件選擇「自訂類判斷」。
自訂類選擇:2.1 節準備的 ExecuteClass.class 檔案。
點選「下一步」。如下圖所示:
1)處理方式勾選「平台通知」。
2)在「平台通知」設定中:
收件人為:預設使用者組
主題為:${today()}地區銷售概況
內容為:今日地區銷售概況已推播,請即時查看。
連結勾選「定時結果連結在平台內開啟」
點選「儲存」,如下圖所示:
由於該任務的執行頻率是每天晚上 18 時執行一次,無法立刻看到任務效果。
為了立刻看到任務效果,可在「管理系統>排程管理>任務管理」介面找到該任務,選擇「執行一次」。
1)執行定時任務
執行一次後,如果今天是週二,自訂類 ExecuteClass.class 的條件傳回結果為 true,執行該定時任務。
職位「銷售部saleLeader」對應的使用者 Lisa(Lisa,123456)登入數據決策系統,收到來自排程管理任務的新訊息提醒,可查看對應的結果報表。如下圖所示:
2)不執行或延遲執行定時任務
如果今天不是週二,執行一次後,自訂類 ExecuteClass.class 的條件傳回結果為 false,不執行或延遲執行該定時任務。
點選「排程管理>運作監視」,可以看到任務的運作類型為「快照生成」,狀態為「跨越」。如下圖所示:
本節範例:使用有參數的自訂類判斷功能,實現當參數 1 的值大於 5 且參數 2 的值包含「ABC」時,執行定時任務。
點選下載 Java 檔案:NewCondition.zip
1)編寫NewCondition.java,程式碼如下所示:
package com.fr.schedule;import com.fr.general.GeneralUtils;import com.fr.log.FineLoggerFactory;import com.fr.schedule.base.provider.impl.AbstractParameterExecuteCondition;import com.fr.stable.StringUtils;import java.util.List;import java.util.Map;/** * @author Cloud.Liu * @version 10.0 * Created by Cloud.Liu on 2020/5/6 */public class NewCondition extends AbstractParameterExecuteCondition { @Override public boolean execute(List<Map<String, Object>> paramList) { FineLoggerFactory.getLogger().error("選擇了新條件類,根據情況跨越"); //如果參數數量為空,恆成功運作 if (paramList.size() < 1) { return true; } /* * 參數列表: * 參數1名稱:參數1 * 參數1值:一個整數 * 參數2名稱:參數2 * 參數2值:一個字串 * * 則這裏的paramList會有兩個Map,對應兩個參數 * 每個Map有name和value倆項 * name是參數名 value是參數值 * * 這裏遍歷paramList,取出這倆參數 */ int param1 = 0; String param2 = StringUtils.EMPTY; //遍歷參數列表,給倆參數指派 for (Map<String, Object> map : paramList) { if (StringUtils.equals(GeneralUtils.objectToString(map.get("name")), "參數1")) { param1 = Integer.parseInt(GeneralUtils.objectToString(map.get("value"))); } else if (StringUtils.equals(GeneralUtils.objectToString(map.get("name")), "參數2")) { param2 = GeneralUtils.objectToString(map.get("value")); } } //如果參數1的值大於5且參數2的值包含"ABC" 則執行 //否則不執行 if (param1 > 5 && param2.contains("ABC")) { return true; } else { return false; } }}
編譯 NewCondition.java,生成 NewCondition.class 檔案。
將編譯後的 NewCondition.class 檔案儲存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。
1)「任務名稱」設定為「有參數自訂類判斷範例」。
2)點選「預設使用者組」的「編輯」按鈕。部門選擇銷售部的「saleLeader」,點選確定。如下圖所示:
自訂類選擇:3.1 節準備的 NewCondition.class 檔案。
點選「新增」,新增參數並指派。
新增參數:名稱為參數 1,值為 6。
新增參數:名稱為參數 2,值為 ABC。
執行一次後,由於在 3.2.4 節參數設定中,參數 1、參數 2 的值滿足參數 1 的值大於 5 且參數 2 的值包含「ABC」的條件,自訂類的條件傳回結果為 true,執行該定時任務。
點選「編輯」,按照 3.2.4 節步驟修改參數 1 的值為 3,使參數值不滿足參數 1 的值大於 5 且參數 2 的值包含「ABC」的條件。如下圖所示:
執行一次後,自訂類 NewCondition.class 的條件傳回結果為 false,不執行或延遲執行該定時任務。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙