反饋已提交
網絡繁忙
有時報表設計時涉及到寫 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 公式。
在 JS 中使用 FineReport 自帶的公式,可以直接用 "${=公式}" 方式,如獲取到當天的日期,可以使用 FineReport 自帶的公式 today():
注:此方法部分公式不支援。
var rq='${=today()}'; alert(rq);
比如我們需要點選按鈕顯示當前日期,在按鈕點選事件中寫 JS 程式碼:
預覽報表即可獲取到當天的日期。
可以使用 FineReport 提供的遠端公式 FR.remoteEvaluate('=公式')來執行函式,同樣是概述中的需求,使用此公式的 JS 寫法為:
注:行動端 App 9.0 及之後的版本不再支援 FR.remoteEvaluate(formula) 。
var rq=FR.remoteEvaluate('=format(today(),"yyyy年MM月dd日")');alert(rq);
可以看到,在 FineReport 中只需要寫一欄程式碼,即可完成跟原生 JavaScript 中多列程式碼同樣的功能。
當執行公式需要傳入參數時,需要對應公式進行字串連結,如下:參數名為:sale,參數值為:孫林
var area=FR.remoteEvaluate('=sql("FRDemoTW","SELECT 地區 from 銷量 where 銷售員=\''+sale+'\'",1,1)');alert(area);
注:sql 函式中使用的 sql 僅支援查詢語句。
利用這兩種方法,可以很方便地將 JavaScript 程式碼與 FineReport 中的公式進行混用,極大地提高程式碼開發效率。
如果用到部分公式,出錯顯示 This formula is forbiddenSQL,原因為平台開啟了「腳本呼叫公式限制」,關閉即可,但關閉會存在安全風險。詳情可查看:安全防護
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙