1. 概述
有時報表設計時涉及到寫 JavaScript 代碼,利用 JavaScript 處理某些計算或轉換時特别複雜,比如日期格式化、字符串截取替換等等,如利用原生 JavaScript 将當前日期顯示成 “2017 年 02 月 24 日” 這種格式時需要寫如下代碼:
var da = new Date();
var year = da.getFullYear()+'年';
var month = da.getMonth()+1+'月';
var day = da.getDate()+'日';
if (month.length < 3) month = '0' + month;
if (day.length < 3) day = '0' + day;
var rq=year+month+day;
alert(rq);
雖然實現了功能,但是代碼多,且沒有通用性,即需要其他格式,還需要再修改代碼。那麽在 FineReport 中寫 JavaScript 代碼有沒有可以簡化代碼的方式呢?FineReport 中本身就有格式日期時間的函數,可不可以在 JavaScript 中直接調用呢?
本文将說明如何在 JavaScript 代碼中調用 FineReport 公式。
2. 方法
2.1 方法一
在 JS 中使用 FineReport 自帶的公式,可以直接用 "${=公式}" 方式,同樣看概述中的需求,直接調用公式的 JS 寫法爲:
var rq='${=today()}';
alert(rq);
比如我們需要點擊按鈕顯示當前日期,在按鈕點擊事件中寫 JS 代碼:
可以看到,在 FineReport 中只需要寫一行代碼,即可完成跟原生 JavaScript 中多行代碼同樣的功能。
2.2 方法二
可以使用 FineReport 提供的遠程公式 FR.remoteEvaluate('=公式')來執行函數,同樣是概述中的需求,使用此公式的 JS 寫法爲:
注:移動端 App 9.0 及之後的版本不再支持 FR.remoteEvaluate(formula) 。
var rq=FR.remoteEvaluate('=format(today(),"yyyy年MM月dd日")');
alert(rq);
比如我們需要點擊按鈕顯示當前日期,在按鈕點擊事件中寫 JS 代碼:
可以看到,在 FineReport 中只需要寫一行代碼,即可完成跟原生 JavaScript 中多行代碼同樣的功能。
當執行公式需要傳入參數時,需要對應公式進行字符串拼接,如下:參數名爲:sale,參數值爲:孫林
var area=FR.remoteEvaluate('=sql("FRDemo","SELECT 地區 from 銷量 where 銷售員=\''+sale+'\'",1,1)');
alert(area);
利用這兩種方法,可以很方便地将 JavaScript 代碼與 FineReport 中的公式進行混用,極大地提高代碼開發效率。