历史版本11 :在JS中使用FR公式 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

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);

效果如下:

主体部分用了 7 行代码,虽然实现功能了,但是代码多,且没有通用性(需要其他格式,如加上时间的话,代码量会更多),那么在 FineReport 中写 JavaScript 代码有没有简单的办法呢,FR 中本身就带了格式日期时间的函数,可不可以在 JavaScript 中直接调用呢,我想这也是很多报表开发者想知道的,答案当然是有的。


2、解决办法编辑

2.1 方法一

在 JS 中使用帆软自带的公式其实很简单,直接用"${=公式}"即可,同样看上面这个需求,我们看一下在 FR 中需要写哪些代码:

比如我们需要点击按钮显示当前日期,在按钮点击事件中写JavaScript代码:


var rq='${=today()}'; 
alert(rq);

222

这样既可实现显示当前日期,可以看到,在 FineReport 中只需要写一行代码,即可完成跟原生 JavaScript 中一大堆代码同样的功能。


2.2 方法二

利用 FR 提供的远程公式 FR.remoteEvaluate('=公式')来执行函数,从而利用我们在报表中常用的公式。

同样是这个需求,我们可以看下这种写法,在按钮点击事件中写 JavaScript 代码:


var rq=FR.remoteEvaluate('=format(today(),"yyyy年MM月dd日")');
alert(rq);

222

这样也可实现显示当前日期,利用这两种方法,可以很方便地将 JavaScript 代码与 FineReport 中的公式进行混用,极大地提高我们代码开发效率。

当执行公式需要传入参数时,需要对应公式进行字符串拼接

如下:参数名为:sale,参数值为:孙林

var area=FR.remoteEvaluate('=sql("FRDemo","SELECT 地区 from 销量 where 销售员=\''+sale+'\'",1,1)');
alert(area);

image.png

注:移动端 App 9.0 及之后的版本不再支持 FR.remoteEvaluate(formula) 这个 JavaScript。