1. 概述
1.1 應用場景
某公司的 FineReport/FineBI 工程每月都會透過 排程管理任務 給銷售傳送月報資料。月報傳送前,需要使用 FDL 處理月報資料。
若分別設定 FDL 的定時任務和 FineReport/FineBI 工程的排程管理任務的執行頻率,需要保證 FDL 的定時任務優先執行,使用者覺得較為麻煩,希望使用 FDL 去管理 FineReport/FineBI 排程管理任務的運作。
1.2 實現思路
1)排程管理任務的執行頻率設定為「只執行一次」(後續透過 FDL 觸發執行)。
2)FineReport/FineBI 工程安裝 開放平台插件 ,FDL 建立一個定時任務 A ,呼叫排程管理API來觸發排程管理任務的執行。其中,該定時任務 A 設定 事件調度 ,依賴 FDL 處理月報資料的定時任務 B 。
3)定時任務 B 根據實際情況設定執行頻率,每次對月報資料處理後,呼叫定時任務 A 來觸發排程管理任務的執行。
1.3 方案說明
本文需要呼叫執行排程管理任務的API,除了登入的API之外,FineReport/FineBI 所有的 WEB API API,都需要登入才能使用。詳情請參見:Web頁面整合API
若登入認證方式為 fine_auth_token ,請參見本文第三章內容;否則,參考本文第二章內容。
本文展示 FDL 管理 FineReport 工程中的排程管理任務步驟,管理 FineBI 中的排程管理任務步驟與之相同。
2. 範例一:API認證模式不是fine_auth_token
2.1 排程管理任務準備
建立一個 排程管理 任務,需注意,執行頻率設定為「只執行一次」(後續透過 FDL 觸發執行)。如下圖所示:

本文範例中,排程管理任務名稱為「文檔測試」。
2.2 FineReport 工程準備
1)由於要呼叫排程管理任務執行API,FineReport 工程中,需要安裝「開放平台」插件。插件安裝方法請參見:伺服器插件管理
2)登入 FineReport 工程,點選「管理系統>開放平台>應用管理」,建立應用,名稱為「文檔測試」,認證方式選擇「AkSk直接認證」。如下圖所示:

3)點選建立應用右側的「編輯」按鈕,可查看應用的應用ID和金鑰,後續步驟中將用到這兩個參數的值。如下圖所示:

4)點選「權限管理」,為建立應用開啟「訊息管理V3」、「排程管理管理V3」的權限。如下圖所示:

2.3 處理月報資料定時任務準備
1)由於 FDL 中需要處理月報資料,本文範例中,在 FDL 中設定一個定時任務,模擬處理月報資料。如下圖所示:

2)後續需要為該定時任務設定執行頻率,由於「生產模式」下才支援配置調度計劃,所以該定時任務需要發佈到「生產模式」中。
2.4 FDL 中呼叫運作排程管理任務API
1)FDL 中建立一個定時任務,拖入「資料轉換」節點,進入「資料轉換」節點,拖入「API輸入」算子。
2)「API輸入」算子中,設定介面如下圖所示:
API API:本文範例:http://localhost:8075/webroot/decision/sp/client/api/v3/schedule/execute;http://localhost:8075/webroot/decision為 FineReport 工程地址,使用者根據實際情況修改。
Headers 中,需要添加 client_id、secret 參數,分別為本文 2.2 節所建立應用的應用ID和金鑰。
Body 中內容格式為:task 為本文 2.1 節排程管理任務的名稱。
[
{
"task": "排程管理的名稱"
}
]

3)點選「資料預覽」,status 值為 200,代表API呼叫成功。如下圖所示:

4)拖入「參數匯出」算子,匯出一個參數。本步驟無實際意義,只是為了「資料轉換」節點不報錯。

5)將定時任務發佈到「生產模式」中,設定 事件調度 ,依賴任務為本文 2.3 節的任務,代表本文 2.3 節處理月報資料的定時任務執行成功後,再執行本節任務,拉起 FineReport 工程中的排程管理任務的執行。

2.5 效果查看
運作本文 2.3 節設定的定時任務,可看到 FineReport 工程中的排程管理任務也被拉起執行。如下圖所示:

2.6 後續步驟
可為本文 2.3 節中處理月報資料的定時任務 設定執行頻率
3. 範例二:API認證模式為fine_auth_token
3.1 排程管理任務準備
參考本文 2.1 節內容,準備一個排程管理任務。
3.2 FineReport 工程準備
與本文 2.2 節不同的是:
1)FineReport 需要再額外安裝「開放平台-平台登入認證API」插件。插件安裝方法請參見:伺服器插件管理
2)為建立應用開放「排程管理管理V3」的權限即可。如下圖所示:

3.3 處理月報資料定時任務準備
參考本文 2.3 節內容。
3.4 FDL 中呼叫運作排程管理任務API
3.4.1 獲取fine_auth_token
1)FDL 中建立一個定時任務,拖入「資料轉換」節點,進入「資料轉換」節點,拖入「API輸入」算子。
2)「API輸入」算子中,呼叫 前台單點登入API ,獲取 fine_auth_token 。如下圖所示:

各設定項說明如下:
API地址:http://localhost:8075/webroot/decision/login/cross/domain;其中,http://localhost:8075/webroot/decision為 FineReport 工程地址,使用者根據實際情況修改。
Paramas 下新增參數:
| 參數 | 是否必須 | 備註 |
|---|---|---|
| fine_username | 是 | FineReport 工程的帳號 |
| fine_password | 是 | FineReport 工程的密碼 |
| validity | 是 | 值為-2: 表示保持登入,保持登入就是 14 天的時間 值為-1: 非保持登入,時長跟隨:管理系統>系統管理>登入>登入逾時時間 注:單點登入時保持登入,將參數 validity 的值改為 -2 |
| callback | 否 | 為空即可 |
點選「資料預覽」,如下圖所示:

上圖中的 accessToken 就是我們需要的 fine_auth_token。
3)傳回的請求資料,是非標準的 json 資料,無法解析出 accessToken ,需要用「Spark SQL」算子,把傳回的值設定成標準的 json 格式。如下圖所示:
注:SQL 語句中的「API輸入」為點選生成。
select replace(replace(responseBody,"callback(",""),")","") as a from API輸入

4)拖入「JSON 解析」算子,解析出 accessToken 。如下圖所示:

點選「資料預覽」,可看到 accessToken 被解析出來。如下圖所示:

5)拖入「參數匯出」算子,將 accessToken 匯出為參數。如下圖所示:

3.4.2 呼叫運作排程管理任務API
1)再拖入一個「資料轉換」節點,用遠端與上一個「資料轉換」節點連結起來。
2)進入「資料轉換」節點,拖入「API輸入」算子,設定介面如下圖所示:
APIAPI:本文範例:http://localhost:8075/webroot/decision/sp/client/api/v3/schedule/execute;http://localhost:8075/webroot/decision為 FineReport 工程地址,使用者根據實際情況修改。
Authorization 中,認證類型選擇 Bearer Token,值為 3.4.1 節中的參數,本文範例中此處填寫:${token}
Headers 中,需要新增 client_id、secret 參數,分別為本文 3.2 節所建立應用的應用ID和金鑰。
Body 中內容格式為:task 為本文 3.1 節排程管理任務的名稱。
[
{
"task": "排程管理的名稱"
}
]
3)點選「資料預覽」,status 值為 200,代表API呼叫成功。如下圖所示:

4)拖入「參數匯出」算子,匯出一個參數。本步驟無實際意義,只是為了「資料轉換」節點不報錯。

5)將定時任務發佈到「生產模式」中,設定 事件調度 ,依賴任務為本文 3.3 節的任務,代表本文 3.3 節處理月報資料的定時任務執行成功後,再執行本節任務,拉起 FineReport 工程中的排程管理任務的執行。

3.5 後續步驟
1)效果查看請參見本文 2.5 節內容。
2)可為本文 3.3 節中處理月報資料的定時任務 設定執行頻率
