排程管理執行條件之自訂類判斷

1. 概述

1.1 版本

FineBI伺服器版本功能變更
6.0-

1.2 應用場景

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

1.3 功能詳情

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

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

如下所示:

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

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

1.3.1 自訂類別別

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

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

注:2020-06-08 及之後的 JAR,執行條件選擇自訂類判斷時,可新增參數並指派。

1.3.2 參數設定面板狀態

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

參數設定面板狀態如下:

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

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

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

1.3.3 參數設定限制

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

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

1.4 本章範例

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

範例
效果步驟

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

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

1)準備無參數自訂類

2)準備一張儀表板

3)設定定時任務

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

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

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

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

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

1)準備有參數自訂類

2)準備一張儀表板

3)設定定時任務

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

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

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

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

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

定時任務:給銷售部銷售主管 Lisa 的 APP 使用者端推播最新的銷售明細情況。

範例儀表板:「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板。

該儀表板呼叫的資料為:「公共資料>部門資料>銷售_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 檔案儲存到%BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。

注1:若在 %BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr 下不存在 schedule 資料夾,使用者自行建立資料夾 schedule 即可。

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

2.2 儀表板準備

2.2.1 複製範本連結

在設定排程管理任務前,需要先獲取排程管理中使用的儀表板的連結,以便將儀表板推播給使用者 App 端。

1)管理者登入 FineBI 系統,點選「我的分析」。

選中「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板,URL連結中report後的ID即為儀表板ID。儀表板預覽連結形如:http://IP:port/webroot/decision/v5/design/report/儀表板ID/view

注1:連結中的IP不可為「localhost」,必須更換為電腦實際的 IP 地址。

注2:APP端必須可存取該地址,如內外網環境不互通則無法存取。

2.2.2 分配資料權限

使用者如需查看排程管理中使用的 BI 範本,必須擁有該儀表板呼叫的資料表的組件資料權限。

管理者登入FineBI系統,點選「管理系統>權限管理>普通權限配置>權限快速配置」。

選擇「部門>銷售部>銷售主管」,點選「資料權限」,為其分配「公共資料>部門數據>銷售_Lisa」資料夾的「組件資料」權限。如下圖所示:

2.3 設定定時任務

2.3.1 新增任務

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

2.3.2 基本設定

1)「任務名稱」設定為「銷售業績達成情況」。

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

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

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

2.3.3 調度物件

1)物件類型選擇「BI範本」,選擇範本:「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板。

2)檔案名稱設定為「${now()}的銷售情況」。

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

2.3.4 調度週期

1)設定執行頻率

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

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

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

2)設定執行條件

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

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

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

2.3.5 檔案處理

1)處理方式勾選「使用者端通知」。

2)在「使用者端通知」設定中:

  • 勾選「APP」通知

  • 選擇訊息類型為「連結訊息」

  • 接收人為:「預設使用者組」

  • 主題為:${today()}的區域銷售情況

  • 郵件內容為:有新的銷售統計資料已到達,請即時查收。

  • 勾選「自訂連結」,輸入內容為 2.2 節準備好的儀表板預覽連結

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

2.4 效果預覽

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

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

1)執行定時任務

職位「銷售部>銷售主管」對應的使用者是Lisa(Lisa,1)。

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

Lisa(Lisa,1)登入 FineMobile 資料分析 App,收到一條新訊息。如下圖所示:

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

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

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

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

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

定時任務:給銷售主管 Lisa 的 APP 使用者端推播最新的銷售明細情況。

範例儀表板:「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板。

該儀表板呼叫的資料為:「公共資料>部門資料>銷售_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 檔案儲存到%BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr\schedule資料夾下。

注1:若在 %BI_HOME%\webapps\webroot\WEB-INF\classes\com\fr 下不存在 schedule 資料夾,使用者自行建立資料夾 schedule 即可。

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

3.2 儀表板準備

3.2.1 複製範本連結

在設定排程管理任務前,需要先獲取排程管理中使用的儀表板的連結,以便將儀表板推播給使用者 App 端。

1)管理者登入 FineBI 系統,點選「我的分析」。

選中「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板,URL連結中report後的ID即為儀表板ID。儀表板預覽連結形如:http://IP:port/webroot/decision/v5/design/report/儀表板ID/view

注1:連結中的IP不可為「localhost」,必須更換為電腦實際的 IP 地址。

注2:APP端必須可存取該地址,如內外網環境不互通則無法存取。

3.2.2 分配資料權限

使用者如需查看排程管理中使用的 BI 範本,必須擁有該儀表板呼叫的資料表的組件資料權限。

管理者登入FineBI系統,點選「管理系統>權限管理>普通權限配置>權限快速配置」。

選擇「部門>銷售部>銷售主管」,點選「資料權限」,為其分配「公共資料>部門資料>銷售_Lisa」資料夾的「組件資料」權限。如下圖所示:

3.3 設定定時任務

3.3.1 新增任務

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

3.3.2 基本設定

1)「任務名稱」設定為「銷售業績達成情況」。

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

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

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

3.3.3 調度物件

1)物件類型選擇「BI範本」,選擇範本:「行業應用>零售電商>銷售管理中心儀表板」主題下的「產品銷售分析」儀表板。

2)檔案名稱設定為「${now()}的銷售情況」。

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

3.3.4 調度週期

1)設定執行頻率

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

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

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

2)設定執行條件

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

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

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

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

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

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

3.3.5 檔案處理

1)處理方式勾選「使用者端通知」。

2)在「使用者端通知」設定中:

  • 勾選「APP」通知

  • 選擇訊息類型為「連結訊息」

  • 接收人為:「預設使用者組」

  • 主題為:${today()}的區域銷售情況

  • 郵件內容為:有新的銷售統計資料已到達,請即時查收。

  • 勾選「自訂連結」,輸入內容為 3.1 節準備好的儀表板預覽連結

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

3.4 效果預覽

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

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

1)執行定時任務

職位「銷售部>銷售主管」對應的使用者是Lisa(Lisa,1)。

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

Lisa(Lisa,1)登入 FineMobile 資料分析 App,收到一條新訊息。如下圖所示:

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

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

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

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


附件列表


主题: 管理系統
已经是第一篇
已经是最后一篇
  • 有帮助
  • 没帮助
  • 只是浏览
中文(繁體)

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

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

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙