FineReport 多人协作开发方案入门版

声明

  1. 本文撰写此产品,并不表明任何推荐、不推荐等意向,不要将本文内容作为技术选型依据
  2. 本文撰写的开发方案为一次项目经历中自己总结的内容,不保证最优、最合适,经供参考
  3. 本文提及的 FineReport 为 2020.05.15.19.18.52 版本
  4. 本文提及的问题不一定能够稳定复现,甚至无法确定是否为人为原因,所以不算产品 bug

FineReport 服务器能提供的功能

  • 提供后台管理系统(管理者),完整的管理权限只有一个账号,其他账号可配置查看权、设计权和部分的后台管理权限
  • 提供目录层级及报表展示功能(使用者)
  • 报表可见性权限管理,及权限粒度配置(不在本文范围)
  • 提供了远程工作目录的概念,可以将本地设计器连接到远端,具有版本管理、服务端运算、文件锁等功能
  • ……

针对上述的多种功能,我们设计了如下的开发方式:

image-20200617142911039image-20200617142911039

其中:

  • FR 支持多种数据源不限于数据库
  • 数仓在此处就是个工具了,当做黑盒就好,里面有算好的一切
  • 云数据库建议使用读写分离的读库,避免增加写库压力
  • 简单单库指标:这个名字乱起的,访问业务库获取数据更适合于需要实时更新的指标显示,其他的完全可以从数仓的 OBS 层直接拿
  • 灰色块可以不开通外网 IP,进一步保护数据,若不开通外网 IP,个人电脑必须远程工作目录到 FR 服务器,否则无法进行设计开发。

远程目录

远程目录是在本地 FR 设计器上做配置,实现连接到远程的 FR 服务器,可看到服务器的设计模板、数据链连接,所有操作在保存时会实时保存到服务器上。这一步实现了上面图中:个人开发电脑 指向 FineReport 的箭头。

具体的配置可参考:https://help.finereport.com/doc-view-195.html

通过此方式我们和协作开发的人员共用了如下信息:

  • 设计模板目录结构(大家都可以看到目录结构及文件)
  • 设计模板文件(文件互斥锁,一个文件只能一人打开)
  • 服务器数据集(可以同时打开操作)
  • 服务器统一配置的预定义配色、服务器配置的自定义 CSS/JS、日志级别……

若数据库有外网 IP 开发过程可简化成直接个人电脑连接不同库即可,最后拷贝文件到云服务器。此时额外注意,每个人的设计器里都要配置数据库连接,务必保证所有人的“数据库连接-连接名”一致,否则设计模板拷贝到 FR 服务器会出现错乱。

可视化大屏的分与合

大屏是一个完整的数据/指标汇总页面,页面包含繁杂的数据量、图表、视觉交互效果。而前面提到 FR 在协作时设计模板文件具有互斥锁,无法同时开发,所以要先根据大屏内容分块,多人分工开发,分别建立各个模块的设计模板文件,最后再汇总。

相对来说好处理,下面重点是或说的步骤(假设 A、B 为两个模块的文件,合并到 C 文件):

  • 创建一个新的决策模板 C.frm 文件。合并的过程保证可随时回退,所以不要直接将 A 复制到 B,先创建个 C 文件
  • 分别将 A 的模块内容复制到 C 中,一定要一次选中所有需要的控件(这样可以保留原有的布局),快速选中多个控件的方法:
    • 选择红色 form,然后可以在设计面板通过框选的方式快速选择多个控件。
    • 在蓝色框里直接 ctrl/command 多选 or shift 选择一段控件
    • 设计面板里通过 ctrl/command 逐个选择每个需要的控件(不建议此方式,速度慢,且每个空间都有“编辑”功能,对于小控件很容易误点编辑进入到编辑页导致之前选中的失效)
    • 将 B.frm 模块复制到 C.frm 中

image-20200629142348767image-20200629142348767image-20200629142717243image-20200629142717243

  • 重命名所有复制到 C 中的控件,将自动生成的 “_c” 删除
  • 调试
  • 若合作团队人员较多,请将所有服务器数据集“沉淀”到模板数据集,避免其他成员误操作修改/删除数据集内容、由于后面注意事项提到的内容被误改数据集名称

复杂报表的快速调试方案

  • 打开复杂报表
  • 文件-另存为,保存成新的临时报表。保存成功后会默认将旧的打开的文件改为新保存的,直接后续操作即可
  • 临时文件里删除无关控件,保留出错数据的报表块、需要联动的控件。此时可以提高报表刷新速度,减少影响
  • 查错,此时应该可快速定位问题了,如果仍然有问题:
  • 将服务器数据集创建出对应的模板数据集(只用到的几个),修改引用指向新建的模板数据集,再次查错,如果此时直接正常了,考虑将数据集的参数名修改,不要让多个数据集公用相同的参数名
  • ……做到这问题就都解决了,没有遇到过更复杂情况

注意事项

  1. 使用服务器数据集,修改数据集名称时注意:修改完成后一定要确定,关掉窗口再打开。同理新建数据集后确定关闭后再打开,不要同时修改多个名字、创建多个数据集、删除多个数据集。遇到过的问题:新建一个-重命名新建的-删除新建的-确定关闭-重新打开(这一套操作应该无任何变化的),最终新建的并没有存在但最后一个数据集被改了名字。
  2. 所有数据集的内容第一行,请务必添加注释,注释内容就是 数据集名字,有利于后续调试。调试日志不会写具体哪个数据集的执行记录,但是有注释会打印出注释方便定位。同时注释可避免上面 1. 提到的出现后无法回退的问题。
  3. 模板合并后一定要修改所有的复制粘贴后的控件名,默认都会增加 “_c”若不修改联动将失效,影响范围包括但不限于:事件 js 获取 dom 名、数据集直接使用空间参数名、图表超链接
  4. 从服务器数据集沉淀到模板数据集的过程中注意:先将服务器数据集重命名为“原名2”(重命名请参考注意事项1),在创建新的模板数据集,都命名为 “原名”(因为禁止模板与服务器数据集重名),此时测试是否可正常运行,正确后删除服务器数据即可(不要误删别人的)

感谢阅读,欢迎关注微信公众号:coologic

报表相关的系列文章请参考:

posted @ 2020-06-29 21:37  Coologic  阅读(422)  评论(0编辑  收藏  举报