反饋已提交

網絡繁忙

排程管理之條件判斷

1. 概述

1.1 版本

報表伺服器版本
11.0

1.2 應用場景

FineReport 在排程管理中提供了自訂類判斷功能。使用者可以根據業務需要自己編寫自訂類,然後交給系統執行,並根據自訂類的條件傳回結果來判斷是否執行該定時任務。

1.3 功能簡介

FineReport 支援在排程管理任務中,透過自訂類的條件傳回結果來判斷是否執行定時任務。

FineReport 提供 com.fr.schedule.base.provider.ExecuteCondition API,該API有一個方法 public boolean execute(),完成條件判斷邏輯並傳回判斷結果。如下所示:

  • 當自訂類條件傳回結果為 true 時,執行定時任務。

  • 當自訂類條件傳回結果為 false 時,不執行或者延遲執行定時任務。

1.3.1 自訂類別別

自訂類判斷包括:無參數自訂類判斷、有參數自訂類判斷。

其中,有參數自訂類判斷可以滿足定時任務的複用需求,使用者可在參數設定面板中新增參數並指派。如下圖所示:


1.3.2 參數設定面板狀態

在自訂類判斷中,當選擇一個具體的自訂類之後,下方會出現參數設定面板,可以在其中新增參數並指派。

參數設定面板狀態如下:

1)新增參數並指派後,切換自訂類,參數設定面板不會保留原參數設定資訊。 

2)儲存任務後,再次開啟任務,可查看到參數設定面板會保留已儲存任務的參數設定資訊。 

注:如果在儲存任務後,再次開啟該任務切換自訂類,即使再切換回原自訂類,參數設定面板也不會保留原參數設定資訊。 

1.3.3 參數設定限制

1)參數名稱必須為字母、數字、中文的組合,且參數名稱開頭不能為數字。

2)參數設定中,指派框預設輸入字串格式,在自訂類中需要對拿到的值進行所需類型轉換。

1.4 本章範例

本文將透過具體範例來示範排程管理中自訂類判斷功能的使用方法。

範例
效果步驟

範例一:無參數自訂類判斷

在執行定時任務時判斷今天是不是週二,如果是週二就執行定時任務,不是週二就不執行定時任務

1)準備無參數自訂類

2)設定定時任務

3)執行一次,查看執行效果

  • 條件判斷結果傳回 true,執行定時任務

  • 條件判斷結果傳回 false,不執行定時任務

範例二:有參數自訂類判斷

如果參數1的值大於 5 且參數2的值包含「ABC」,則執行定時任務

1)準備有參數自訂類

2)設定定時任務

3)執行一次,查看執行效果

  • 條件判斷結果傳回 true,執行定時任務

  • 條件判斷結果傳回 false,不執行定時任務

2. 範例一:無參數自訂類判斷

本節範例:使用無參數的自訂類判斷功能,實現只在週二執行定時任務。

定時任務:推播銷售概況報表到銷售主管 Lisa 的數據決策系統訊息通知處。

點選下載並解壓獲取 Java 檔案:ExecuteClass.zip

2.1 準備自訂類

2.1.1 編寫 Java 檔案

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

2.1.2 編譯 Class 檔案

1)生成 class 檔案

編譯 ExecuteClass.java,生成 ExecuteClass.class 檔案。

2)匯入 class 檔案

將編譯後的 ExecuteClass.class 檔案儲存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。

注:編譯環境準備和編譯 Java 檔案的詳細步驟請參見:編譯Java程式

2.2 設定定時任務

2.2.1 新增任務

管理者登入數據決策系統,點選「管理系統>排程管理>任務管理」,點選「新增任務」,新增一個排程管理任務。如下圖所示:

2.2.2 基本設定

1)「任務名稱」設定為「週二銷售概況通知」。

2)點選「預設使用者組」的「編輯」按鈕。部門選擇銷售部的「saleLeader」,點選確定。

注:如需使用平台通知,必須要設定預設使用者組,否則訊息無法傳送給任何人。

如下圖所示:

確認部門處已選定「所有部門:銷售部:saleLeader; 」,點選「確定」,預設使用者組設定完成。點選「下一步」,如下圖所示:

2.2.3 調度物件

1)物件類型選擇:報表範本

2)選擇範本:GettingStarted.cpt

3)檔案名稱稱設定:${today()}地區銷售概況

點選「下一步」,如下圖所示:

2.2.4 調度週期

1)設定執行頻率

執行頻率選擇「明細頻率設定」,點選「新增」。

設定執行時間為「18時0分」,執行日為「每日」,執行月為「全選」,點選「確定」,即可成功新增明細頻率。

勾選上一步新增的明細頻率。

2)設定執行條件

執行條件選擇「自訂類判斷」。

自訂類選擇:2.1 節準備的 ExecuteClass.class 檔案。

點選「下一步」。如下圖所示:

2.2.5 檔案處理

1)處理方式勾選「平台通知」。

2)在「平台通知」設定中:

  • 收件人為:預設使用者組

  • 主題為:${today()}地區銷售概況

  • 內容為:今日地區銷售概況已推播,請即時查看。

  • 連結勾選「定時結果連結在平台內開啟」

點選「儲存」,如下圖所示:

2.3 效果預覽

由於該任務的執行頻率是每天晚上 18 時執行一次,無法立刻看到任務效果。

為了立刻看到任務效果,可在「管理系統>排程管理>任務管理」介面找到該任務,選擇「執行一次」。

1)執行定時任務

執行一次後,如果今天是週二,自訂類 ExecuteClass.class 的條件傳回結果為 true,執行該定時任務。

職位「銷售部saleLeader」對應的使用者 Lisa(Lisa,123456)登入數據決策系統,收到來自排程管理任務的新訊息提醒,可查看對應的結果報表。如下圖所示:

2)不執行或延遲執行定時任務

如果今天不是週二,執行一次後,自訂類 ExecuteClass.class 的條件傳回結果為 false,不執行或延遲執行該定時任務。

點選「排程管理>運作監視」,可以看到任務的運作類型為「快照生成」,狀態為「跨越」。如下圖所示:

3. 範例二:有參數自訂類判斷

本節範例:使用有參數的自訂類判斷功能,實現當參數 1 的值大於 5 且參數 2 的值包含「ABC」時,執行定時任務。

定時任務:推播銷售概況報表到銷售主管 Lisa 的數據決策系統訊息通知處。

點選下載 Java 檔案:NewCondition.zip

3.1 準備自訂類

3.1.1 編寫 Java 檔案

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;
        }
    }
}

3.1.2 編譯 Class 檔案

1)生成 class 檔案

編譯 NewCondition.java,生成 NewCondition.class 檔案。

2)匯入 class 檔案

將編譯後的 NewCondition.class 檔案儲存到%FR_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。

注:編譯環境準備和編譯 Java 檔案的詳細步驟請參見:編譯Java程式

3.2 設定定時任務

3.2.1 新增任務

管理者登入數據決策系統,點選「管理系統>排程管理>任務管理」,點選「新增任務」,新增一個排程管理任務。如下圖所示:

3.2.2 基本設定

1)「任務名稱」設定為「有參數自訂類判斷範例」。

2)點選「預設使用者組」的「編輯」按鈕。部門選擇銷售部的「saleLeader」,點選確定。如下圖所示:

注:如需使用平台通知,必須要設定預設使用者組,否則訊息無法傳送給任何人。

確認部門處已選定「所有部門:銷售部:saleLeader; 」,點選「確定」,預設使用者組設定完成。點選「下一步」,如下圖所示:

3.2.3 調度物件

1)物件類型選擇:報表範本

2)選擇範本:GettingStarted.cpt

3)檔案名稱稱設定:${today()}地區銷售概況

點選「下一步」,如下圖所示:

3.2.4 調度週期

1)設定執行頻率

執行頻率選擇「明細頻率設定」,點選「新增」。

設定執行時間為「18時0分」,執行日為「每日」,執行月為「全選」,點選「確定」,即可成功新增明細頻率。

勾選上一步新增的明細頻率。

2)設定執行條件

執行條件選擇「自訂類判斷」。

自訂類選擇:3.1 節準備的 NewCondition.class 檔案。

點選「新增」,新增參數並指派。

新增參數:名稱為參數 1,值為 6。 

新增參數:名稱為參數 2,值為 ABC。 

點選「下一步」。如下圖所示:

3.2.5 檔案處理

1)處理方式勾選「平台通知」。

2)在「平台通知」設定中:

  • 收件人為:預設使用者組

  • 主題為:${today()}地區銷售概況

  • 內容為:今日地區銷售概況已推播,請即時查看。

  • 連結勾選「定時結果連結在平台內開啟」

點選「儲存」,如下圖所示:

3.3 效果預覽

由於該任務的執行頻率是每天晚上 18 時執行一次,無法立刻看到任務效果。

為了立刻看到任務效果,可在「管理系統>排程管理>任務管理」介面找到該任務,選擇「執行一次」。

1)執行定時任務

執行一次後,由於在 3.2.4 節參數設定中,參數 1、參數 2 的值滿足參數 1 的值大於 5 且參數 2 的值包含「ABC」的條件,自訂類的條件傳回結果為 true,執行該定時任務。

職位「銷售部saleLeader」對應的使用者 Lisa(Lisa,123456)登入數據決策系統,收到來自排程管理任務的新訊息提醒,可查看對應的結果報表。如下圖所示:

2)不執行或延遲執行定時任務

點選「編輯」,按照 3.2.4 節步驟修改參數 1 的值為 3,使參數值不滿足參數 1 的值大於 5 且參數 2 的值包含「ABC」的條件。如下圖所示:

執行一次後,自訂類 NewCondition.class 的條件傳回結果為 false,不執行或延遲執行該定時任務。

點選「排程管理>運作監視」,可以看到任務的運作類型為「快照生成」,狀態為「跨越」。如下圖所示:

附件列表


主題: 數據決策系統
已經是第一篇
已經是最後一篇
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

文 檔回 饋

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

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

不再提示

10s後關閉