反馈已提交

网络繁忙

在JS中使用FR公式

  • 文档创建者:yets11
  • 历史版本:16
  • 最近更新:Roxy 于 2021-12-09
  • 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 自带的公式,可以直接用 "${=公式}" 方式,如获取到当天的日期,可以使用 FineReport 自带的公式 today():

    注:此方法部分公式不支持。

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

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

    222

    预览报表即可获取到当天的日期。

    2.2 方法二

    可以使用 FineReport 提供的远程公式 FR.remoteEvaluate('=公式')来执行函数,同样是概述中的需求,使用此公式的 JS 写法为:

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

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

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

    222

    可以看到,在 FineReport 中只需要写一行代码,即可完成跟原生 JavaScript 中多行代码同样的功能。

    当执行公式需要传入参数时,需要对应公式进行字符串拼接,如下:参数名为:sale,参数值为:孙林

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

    image.png

    注:sql 函数中使用的 sql 仅支持查询语句。

    利用这两种方法,可以很方便地将 JavaScript 代码与 FineReport 中的公式进行混用,极大地提高代码开发效率。

    如果用到部分公式,出错显示 This formula is forbiddenSQL,原因为平台开启了「脚本调用公式限制」,关闭即可,但关闭会存在安全风险。详情可查看:安全防护

    附件列表


    主题: 二次开发
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持