當前為10.0版本文檔,更多實例內容將在最新幫助文檔中展現,點選跳轉至 最新版幫助文檔

定時任務之條件判斷

1. 概述

1.1 版本

報表服務器版本JAR新增功能
10.02020-06-08調度周期>執行條件>自定義類判斷中可添加參數并賦值

1.2 功能簡介

定時任務條件判斷是指在執行定時任務之前進行一次校驗判斷,如果不滿足條件就不執行或者延遲後再次校驗執行。

注:若在調度周期步驟中勾選「任務重啓」,延遲一段時間後再次校驗執行。

條件判斷包含三種類型的選擇:始終執行公式判斷和自定義類判斷

始終執行,就是不進行條件判斷,直接執行定時任務,下面介紹公式判斷和自定義類判斷。

2. 公式判斷

公式判斷就是指定時任務在執行前要對當前公式内容進行判定,公式爲真則繼續執行定時任務,如果公式爲假則不執行或者延遲執行。

延遲執行是指在調度周期步驟中勾選「任務重啓」,會在間隔一段設定的時間後再次執行定時任務,重新進行條件判斷,以此類推,當重啓次數達到設置值的時候,條件判斷還是不滿足,則不執行,如果中間有一次滿足則執行定時任務。

2.1 模板準備

打開模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Advanced\Cacuate_Between_Cells\日報.cpt,查詢一段時間内的數據信息情況。

2.2 添加任務

管理員進入數據決策系統,點擊管理系統>定時調度>添加任務,如下圖所示:

1578366776832238.png

 2.3 基本設置

「任務名稱」爲公式判斷,添加平台用戶demo,點擊确定,如下圖所示:

1582016844196486.png

2.4 調度對象

點擊下一步,選擇模板爲日報.cpt,點擊設置參數默認值,文件名稱爲${now()} ,如下圖所示:

1582017436352540.png

2.5 調度周期

點擊下一步,設置調度周期執行條件選擇公式判斷,在右側的公式輸入框中輸入E3>50,勾選如果任務中斷按以下頻率重新啓動,設置「兩次重啓間隔」爲 1 分鍾,「最多嘗試重啓次數」爲 2 次,如下圖所示:

1582017816597950.png

其中公式的含義及任務重啓設置的含義如下表所示:

設置項備注
公式:E3>50表示定時任務綁定的模板中 E3 單元格大於 50 才能滿足條件,可以執行定時任務,否則不執行或延遲校驗執行
任務重啓設置項如果 E3 單元格内容小於 50 則進行任務重啓,每隔一分鍾重啓一次,重啓後再公式判斷,公式判斷還是不滿足則再次任務重啓,直到重啓過 2 次後,若公式判斷還是不滿足,則不執行

2.6 文件處理

點擊下一步,選擇平台通知,主題爲 FRTest ,内容爲公式判斷,點擊保存按鈕,如下圖所示:

1582018705507947.png

2.7 結果查看

運行後在「任務管理」可以看到公式判斷任務已經運行結束,如下圖所示:

1582018987340230.png

點擊運行監控,查看該任務執行的監控,如下圖所示:

1582019100554501.png

由運行監控可知,任務重啓了兩次,模板都不滿足執行條件,不執行直接跳過直至重啓最大設置次數,然後結束。

3. 自定義類判斷

自定義類判斷是指執行自定義類,返回值爲 true 的時候執行定時任務。

定時任務的自定義類需要實現 com.fr.schedule.base.provider.ExecuteCondition 接口,該接口有一個方法 public boolean execute(),完成條件判斷邏輯并返回判斷結果。

3.1 無參數

3.1.1 自定義類編寫

在執行定時任務時判斷今天是不是周二,如果是周二就執行,不是周二就不執行,代碼如下所示:

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等於3
return (dow) == 3;
}
}

編譯之後的 class 文件保存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夾下。

3.1.2 定時任務設置

添加一個定時任務自定義類判斷,在調度周期設置「執行條件」時,選擇自定義類判斷,點擊右側的下拉按鈕,選擇上面保存的 class 文件。如下圖所示:

19.png

設置完四個步驟之後保存即可。

3.1.3 效果查看

如果今天是周二,點擊運行監控,可以看到運行信息顯示成功,如下圖所示:

1582019916334458.png

如果今天不是周二,點擊運行監控,可以看到運行信息顯示快照生成:跳過,如下圖所示:

222

3.2 有參數

注1:2020-06-08 及之後的 JAR,執行條件選擇自定義類判斷時,可添加參數并賦值。

注2:所添加的參數名稱爲字母、數字、中文的組合,參數名稱開頭不能爲數字。

3.2.1 自定義類編寫

1)點擊下載 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<StringObject>> 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<StringObject> 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;
        }
    }
}
顯示代碼

2)編譯之後的 class 文件保存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule文件夾下。

3.2.2 定時任務設置

添加一個定時任務自定義類判斷,在調度周期設置「執行條件」時,選擇自定義類判斷,點擊右側的下拉按鈕,選擇上面保存的 class 文件,并添加參數1參數2,分别賦值爲 ABC,如下圖所示:

90.png

設置完四個步驟之後保存即可。

3.2.3 效果查看

點擊運行監控,可以看到運行信息顯示成功,如下圖所示:

1590660954675231.png

參數1參數2的值不滿足「執行條件」,即将參數1的值改爲4,點擊運行監控,可以看到運行信息顯示快照生成:跳過,如下圖所示:

1590661044281831.png


4. 注意事項

4.1 LEN 公式取單元格值不生效

問題描述:

模板 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 模板中)。

附件列表


主題: 原簡體文檔
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽

文 檔回 饋

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

9s后關閉

反饋已提交

網絡繁忙