1. 概述
1.1 應用場景
一些特殊的業務邏輯用公式校驗不好實現,希望可以獲取填報頁面資料,交給使用者自訂的程式來判斷,最後將校驗結果傳回給頁面展示。
1.2 功能入口
設計器菜單欄點選「範本>報表填報屬性」,設定介面選擇「資料校驗」,點選,選擇「自訂校驗」即可,如下圖所示:
1.3 功能說明
1)自訂校驗的本質是獲取頁面資料後做自訂的處理,最後將校驗結果傳回,所以處理資料的程式碼部分需要使用者自己根據業務需求編寫。
2)只支援傳回校驗結果給頁面展示,不支援其他回呼需求。
3)自訂校驗支援在行動端使用。
2. 範例
2.1 準備資料
建立資料集 ds1,從 FRDemo 取數,SQL 語句為:SELECT * FROM S產品 limit 3
2.2 設計填報表格
設計填報表格,將資料集相應欄位拖到儲存格中,C2 儲存格新增「正文元件」,表格樣式如下圖所示:
2.3 編寫自訂校驗類
本範例要實現的效果是:當單價小於設定的最小值時,彈出校驗提醒。
參考以下程式碼可獲取相應的範本資料,進行判斷並傳回校驗結果。
package com.fr.data;
import com.fr.base.Utils;
import com.fr.log.FineLoggerFactory;
import com.fr.script.Calculator;
public class VerifyDemo extends DefinedVerifyJob {
/**
* 必須要定義此私有變數,變數名可改,表示校驗狀態,預設為0
* 0 表示校驗成功
* 1 表示校驗失敗
*/
private int type = 0;
/**
* 當範本自訂事件增加的屬性名稱與下面變數名一致時,則會自動指派於此對應變數
* JobValue代表綁定的值為儲存格,其他類型資料需按照各自類型去定義類,例如字串為String
* 不支援儲存格組
*/
private JobValue Price;
private int MinNum;
public void doJob(Calculator calculator) throws Exception {
FineLoggerFactory.getLogger().error("------Price:" + Price.getValue() + ",MinNum:" + MinNum + "------");
//在fanruan.log以error級別匯出獲取到的參數值
/**
* 獲取Price的值並轉為整數型態,賦給price物件
*/
if (Price != null) {
int price = 0;
if (Price.getValue() instanceof Integer) {
//判斷Price的值是否為整數
price = (Integer) Price.getValue();
//將Price的值強轉為整數型態,防止比較時因類型不一致導致報錯
} else {
price = Integer.parseInt(Utils.objectToString(Price.getValue()));
}
/**
* 校驗價格是否小於設定的最小值,是的話傳回1(失敗),否則傳回0(成功)
*/
if (price < MinNum) {
type = 1;
}
} else {
type = 0;
}
}
public String getMessage() {
/**
* 根據校驗狀態是0(成功)還是1(失敗),設定對應的傳回資訊
*/
if (type == 0) {
return "校驗成功";
//此處設定的資訊沒有用,成功的時候不會顯示這裏的內容,還是顯示預設"校驗成功"
} else {
return "價格不能小於" + MinNum;
}
}
public Verifier.Status getType() {
// 傳回校驗狀態
return Verifier.Status.parse(type);
}
public void doFinish(Calculator arg0) throws Exception {
}
}
2.4 設定資料校驗
1)報表填報屬性介面新增一個「自訂校驗」,點選「編輯」按鈕,如下圖所示:
2)將 2.3 節編寫好的 Java 程式碼copy到自訂函式編輯介面,點選「編譯」按鈕,只有顯示「編譯成功」後,才能儲存,如下圖所示:
注:除了上述編譯方式外,也可以將外部編譯好的 class 檔案放到 %FR_HOME%\webapps\webroot\WEB-INF\classes 資料夾下和程式碼中定義的package 路徑一致的位置,然後點選「選擇按鈕」引用 class 檔案。若修改更換了 class 檔案,則需要重啟設計器或帆軟服務,修改的程式碼才會生效。
點選可下載 class 檔案:VerifyDemo.rar
3)點選增加屬性按鈕,給提交事件新增 2 個屬性,注意值的類型需要和程式碼中定義的類型一致,如下圖所示:
2.5 效果預覽
使用填報預覽,點選校驗按鈕。
注:支援行動端預覽。