反饋已提交
網絡繁忙
定時任務條件判斷是指在執行定時任務之前進行一次校驗判斷,如果不滿足條件就不執行或者延遲後再次校驗執行。
條件判斷包含三種型別的選擇:【始終執行】、【公式判斷】和自訂類判斷。
始終執行,就是不進行條件判斷,直接執行定時任務,下面介紹公式判斷和自訂類判斷。
注:若在調度周期步驟中勾選「任務重啓」,延遲一段時間後再次校驗執行。
公式判斷就是指定時任務在執行前要對當前公式內容進行判定,公式為真則繼續執行定時任務,如果公式為假則不執行或者延遲執行。
延遲執行是指在調度週期步驟中勾選【任務重啓】,會在間隔一段設定的時間後再次執行定時任務,重新進行條件判斷,以此類推,當重啓次數達到設定值的時候,條件判斷還是不滿足,則不執行,如果中間有一次滿足則執行定時任務。
開啟範本 【%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doctw\Advanced\Cacuate_Between_Cells\日報.cpt】,查詢一段時間內的資料資訊情況。
管理者進入數據決策系統,點選【管理系統】→【排程管理】→【新增任務】,如下圖所示。
【任務名稱】為【公式判斷】,新增平台使用者【demo】,點選【確定】,如下圖所示。
點選【下一步】,選擇範本為【日報.cpt】,點選【設定參數預設值】,檔案名稱稱為【${now()}】 ,如下圖所示。
點選【下一步】,設定調度週期,執行條件選擇【公式判斷】,在右側的公式輸入框中輸入【E3>50】,勾選【如果任務中斷按以下頻率重新啟動】,設定【兩次重啓間隔】為 【1】 分鍾,【最多嘗試重啓次數】為 【2】 次,如下圖所示。
其中公式的含義及任務重啓設定的含義如下表所示。
點選【下一步】,選擇【平台通知】,主題為 【FRTest】 ,內容為【公式判斷】,點選【儲存】按鈕,如下圖所示。
運作後在【任務管理】可以看到公式判斷任務已經運作結束,如下圖1所示。
點選【運作監視】,查看該任務執行的監視,如下圖2所示。
由運作監視可知,任務重啓了兩次,範本都不滿足執行條件,不執行直接跨越直至重啓最大設定次數,然後結束。
自訂類判斷是指執行自訂類,傳回值為 true 的時候執行定時任務。
定時任務的自訂類需要實現 【com.fr.schedule.base.provider.ExecuteCondition】 API,該API有一個方法 【public boolean execute()】,完成條件判斷邏輯並傳回判斷結果。
自訂類編寫:在執行定時任務時判斷今天是不是週二,如果是週二就執行,不是週二就不執行,代碼如下所示。
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;}}
編譯之後的 class 檔案儲存到【%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule】資料夾下。
定時任務設定:新增一個定時任務自訂類判斷,在【調度週期】設定【執行條件】時,選擇【自訂類判斷】,點選右側的下拉按鈕,選擇上面儲存的 class 檔案。如下圖1所示。設定完四個步驟之後儲存即可。
效果查看:如果今天是週二,點選運作監視,可以看到運作資訊顯示成功。
如果今天不是週二,點選運作監視,可以看到運作資訊顯示【快照生成:跨越】,如下圖2所示。
注1:2020-06-08 及之後的 JAR,執行條件選擇【自訂類判斷】時,可新增參數並指派。
注2:所新增的參數名稱為字母、數字、中文的組合,參數名稱開頭不能為數字。
自訂類編寫:點選下載 Java 檔案:NewCondition.zip。
執行定時任務時如果【參數1】的值大於 5 且【參數2】的值包含【ABC】則執行,代碼如下所示。
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; } }}
定時任務設定:新增一個定時任務自訂類判斷,在【調度週期】設定【執行條件】時,選擇【自訂類判斷】,點選右側的下拉按鈕,選擇上面儲存的 class 檔案,並新增【參數1】和【參數2】,分別指派為 【6 】、【ABC】,如下圖1所示。
設定完四個步驟之後儲存即可。
效果查看:點選【運作監視】,可以看到運作資訊顯示成功。若【參數1】和【參數2】的值不滿足【執行條件】,即將【參數1】的值改為【4】,點選【運作監視】,可以看到運作資訊顯示【快照生成:跨越】,如下圖2所示。
問題描述:範本 A1 儲存格中插入了公式 【$fine_username】 ,在【調度週期】步驟中執行條件選擇【公式判斷】,使用 LEN 公式取 A1 儲存格值時不生效。例如使用公式【LEN(report0~A1)】 (FRM 範本中)或 【LEN(A1)】(CPT 範本中)。
原因分析:LEN 公式使用 A1 儲存格取值,且 A1 儲存格為拓展儲存格時,取到的是包含所有拓展值的一個陣列。
解決方案:將公式修改為:【LEN(INDEXOFARRAY(report0~A1,1))】(FRM 範本中)或 【LEN(INDEXOFARRAY(A1,1))】(CPT 範本中)。
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉