FineReport参数传递如何实现?

99ANYc3cd6
预计阅读时长 13 分钟
位置: 首页 参数 正文

下面我将从 基本概念、传递方式、应用场景、最佳实践 四个方面,全面地为您梳理 FineReport 的参数传递。

finereport 参数传递
(图片来源网络,侵删)

基本概念:什么是参数?

在 FineReport 中,参数是一个可以变化的值,它用于:

  1. 控制数据查询:在 SQL 语句或数据集中使用参数,实现按条件筛选数据。
  2. 控制报表展示:控制报表的某些部分是否显示,或者显示什么内容。
  3. 实现交互:作为用户交互(如点击、选择)的载体,联动其他报表或组件。

参数的类型

  • 系统参数:FineReport 内置的参数,无需用户手动赋值。_year(当前年份)、_month(当前月份)、_username(登录用户名)等。
  • 自定义参数:由报表设计者创建,需要手动赋值的参数。地区产品类别开始日期 等。

参数传递的五大核心方式

参数传递的本质就是将一个参数的值,从一处“传递”到另一处,以下是五种最常用和核心的传递方式。

参数面板赋值

这是最基础、最直接的方式,用户在报表的参数面板上选择或输入值,报表引擎接收到这些值后,再进行数据查询和展示。

finereport 参数传递
(图片来源网络,侵删)
  • 如何实现

    1. 在设计器中,点击菜单栏 模板 > 参数面板
    2. 从左侧组件栏拖拽控件(如下拉框、文本框、日期选择器等)到参数面板。
    3. 选中控件,在右侧的“属性设置”中,设置其“控件类型”和“绑定参数”。
    4. 在数据集或模板SQL中使用该参数,SELECT * FROM sales WHERE area = '${area}'
  • 应用场景

    • 制作一个销售分析报表,用户通过下拉框选择“华东”、“华南”等地区,报表实时展示该地区数据。
    • 制作一个财务报表,用户输入年份和月份,报表展示对应月份的财务数据。

父子报表参数传递

在一个复杂的模板中,我们常常会将主报表(父报表)和子报表结合使用,父报表的参数可以传递给子报表,实现数据的层级展示。

  • 如何实现

    finereport 参数传递
    (图片来源网络,侵删)
    1. 准备父报表和子报表:确保子报表已经定义好了它所需要的参数。
    2. 在父报表中插入子报表:在父报表的单元格中,点击右键,选择 插入子报表
    3. 传递参数:在子报表的“参数设置”中,添加参数。
      • 参数名:填写子报表中定义的参数名。
      • 参数值:填写从父报表获取参数值的表达式,最常用的是使用父报表的参数,格式为 父报表参数名,父报表有一个参数 area,子报表的参数值就可以直接填 area
  • 应用场景

    • 主从报表:父报表展示各地区的销售总额,点击某个地区后,子报表展示该地区下各个城市的详细销售数据,这里的“地区”参数就是从父传递到子。
    • 参数汇总:父报表展示一个总的汇总图表,子报表展示构成该汇总的明细数据。

URL 参数传递

通过在访问报表的 URL 中附加参数,可以实现报表的预填充和跳转,非常适合在系统集成、定时任务或外部链接中使用。

  • 如何实现

    • 格式http://[服务器地址]:[端口]/webroot/decision/view/report?viewlet=报表路径.cpt&参数名1=参数值1&参数名2=参数值2
    • 示例http://localhost:8075/webroot/decision/view/report?viewlet=doc/Parameter/Sales.cpt&area=华东&year=2025
  • 应用场景

    • 系统集成:在公司的 OA 系统或 CRM 系统中,点击一个按钮,直接跳转到 FineReport 的对应分析报表,并自动带上用户ID、部门ID等参数。
    • 定时调度:设置一个定时任务,在每天早上生成一份特定地区、特定日期的销售报表,并将链接通过邮件发送给相关负责人。
    • 外部链接:在公司的内网门户上放置一个链接,点击后直接展示公司整体的运营概况报表。

报表间参数传递(超链接)

这是实现报表交互的核心方式,通常通过超链接或按钮实现,在一个报表上点击某个元素(如单元格、图表、按钮),跳转到另一个报表,并将当前报表的某些参数值传递过去。

  • 如何实现

    1. 准备目标报表:确保目标报表有对应的参数。
    2. 设置超链接
      • 选中报表中的某个单元格、图表或按钮。
      • 在右侧“属性设置”中,找到 超链接 选项卡。
      • 选择 报表 类型,然后选择目标报表。
      • 关键步骤:在“参数”区域,点击 添加
        • 目标参数:选择目标报表中已定义的参数。
        • 来源:选择 当前单元格图表 或使用表达式来获取当前报表的参数值,最常用的是选择 参数,然后从下拉框中选择当前报表的参数。
    3. 高级应用 - 超链钻取:这是参数传递的精髓,在地区汇总报表中,点击“华东”这个单元格,超链接传递 area=华东 参数到明细报表,从而只展示华东地区的明细数据。
  • 应用场景

    • 钻取分析:从汇总数据钻取到明细数据。
    • 导航菜单:制作一个仪表盘,上面有多个图表,每个图表都链接到不同主题的详细分析报表。
    • 联动分析:在一个报表中选择一个产品类别,另一个相关的报表自动刷新并展示该类别的数据。

JavaScript 传递参数

对于需要更复杂、更灵活交互的场景,可以使用 JavaScript 来动态地获取参数值并传递给报表。

  • 如何实现

    1. 在报表中添加 JS 事件:在单元格、按钮等组件上,通过“属性设置”中的“事件”来添加 onClickonMouseDown 等事件。
    2. 编写 JS 代码:使用 FR 对象(FineReport JavaScript API)来操作。
      • FR.param.get('参数名'):获取当前报表的参数值。
      • FR.location.href = '新报表URL&参数名=' + 值:跳转到新报表并传递参数。
      • FR.remoteAjax:通过 AJAX 请求后端服务获取参数值,再进行传递。
  • 应用场景

    • 动态联动:用户在一个文本框中输入任意值,点击按钮后,将该值作为参数传递给报表进行查询。
    • 复杂条件组合:用户通过多个复选框选择多个条件,JS 将这些条件拼接成一个复杂的参数字符串,再传递给报表。
    • 与前端框架集成:在 Vue、React 等前端应用中,通过 JS 将前端的状态或用户输入传递给嵌入的 FineReport 报表。

应用场景总结

传递方式 核心特点 典型应用场景
参数面板赋值 用户直接交互,最基础 报表查询条件筛选、参数化报表
父子报表传递 数据层级,内部传递 主从报表、参数汇总、钻取下钻
URL 参数传递 无需交互,外部驱动 系统集成、定时任务、邮件推送、外部链接
报表间超链接 点击交互,灵活导航 钻取分析、仪表盘导航、报表联动
JavaScript 传递 动态灵活,复杂逻辑 动态条件、前端框架集成、复杂交互

最佳实践与技巧

  1. 参数命名规范:使用有意义的名称,如 area 而不是 astartDate 而不是 s
  2. 设置默认值:为重要参数设置默认值,避免报表打开时因参数为空而出错或展示无用数据。
  3. 参数校验:在参数面板的“属性设置”中,可以设置参数的校验规则,如“必填”、“数据类型”、“数值范围”等,保证数据的有效性。
  4. 参数公式:FineReport 支持对参数值进行二次处理,形成参数公式,将日期参数格式化为 YYYY-MM-DD 格式,或者拼接字符串。
  5. 参数与数据集分离:尽量将参数定义在“模板参数”中,而不是绑定在某个具体的数据集上,这样该参数可以在整个模板的多个数据集、图表和组件中复用。
  6. 慎用全局参数:全局参数(session 作用域)在同一个浏览器会话中所有报表共享,方便但也容易引起冲突和意外更新,只在明确需要跨报表共享参数时使用。

通过灵活运用以上五种参数传递方式,您可以构建出功能强大、交互友好、高度集成的企业级数据分析应用,希望这份详细的梳理对您有帮助!

-- 展开阅读全文 --
头像
智能手机移动支付模式有何创新与风险?
« 上一篇 今天
iPad mini 2拆机视频藏着哪些秘密?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]