【Wyn7.1】动态拼接报表(一)——解决思路介绍
本帖最后由 Bella.Yuan 于 2024-9-23 10:11 编辑今天介绍报表内容的动态生成。我们可以根据自己的要求动态的调整报表的顺序、选择展示的报表模块。多用于周报、月报、年报等的设计,并且根据受众差异,报告中涉及的模块也能选择性的增删。
这种场景只通过报表设计无法实现,需要借助代码,在集成场景中实现。
实现的思路和步骤如下:
1. 设计报表:包括多个子报表和一个包含所有子报表的主报表;
2. 每次使用都在主报表的基础上复制一个子报表;
3. 获取复制的子报表内容;
4. 修改子报表:根据要展示的内容、顺序调整子报表的内容,然后更新、保存修改后的报表;
5. 报表使用:预览、导出等操作;
6. 定时删除复制出来的子报表。
具体的实现过程如下:
1. 报表设计:按照实际的内容设计即可,我们做了三个demo报表,作为示例:
第一个报表:
第二个报表:
第三个报表:
主报表中创建三个报表区域,每个区域都通过子报表组件引入一个子报表,然后将报表区域的名称修改为对应的报表名称:
2. 复制报表。通过POST类型 接口 http://ip:port/api/graphql?token=XXX复制系统中的主报表,如下:
返回值是复制后的新报表的报表id,返回的报表id需要记录下来,后面操作、使用的都是这个新的报表:
3. 获取子报表的内容
这里需要通过接口获取报表的 json 文件,不能通过下载获取,下载接口返回的是 xml 格式的报表文件,操作起来比较麻烦。我们需要通过接口获取到报表的 json 格式的文件,方便后面代码中的操作。
接口:http://ip:port/api/v2.0/reporting/reports/{reportId}?token=XXX 获取到的报表数据如下:
4. 报表内容修改
这一步需要在报表之外创建一个参数,将要展示的报表以及对应的展示顺序记录下来,参数的值就是设计的主报表中的每个报表区域的名称:
然后对前一步(第3步)获取到的json报表对象进行操作更新。
针对性分析第3步中获取到的报表对象,可以发现,报表的设计内容都保存在 ReportSections 数组字段中,每一个报表区域 都是 ReportSections 中的一个对象,并且对象的排列顺序就是报表的展示顺序:
我们可以将报表原先的 ReportSections 内容保存,然后根据要展示的内容和顺序,创建新的 ReportSections 数组对象。替换原报表中的 ReportSections 字段。
修改好之后的报表,通过接口进行更新。接口是PUT类型的:http://ip:port/api/v2.0/reporting/reports/{reportId}?token=XXX
5. 消费报表
到这一步就可以直接预览我们的报表,并在其中进行打印、导出等操作
6. 删除报表
报表创建之后,不会自己删除,如果长时间不清理,会形成大量的无用报表。我们可以通过报表删除接口,定时删除无用的报表:
删除接口是:http://localhost:51980/api/v2/common/documents/{reportId}/delete (DELETE类型的)
至此,我们动态生成、消费再到最后的回收全流程的动态报表使用就完成了。感兴趣的小伙伴,快去试试吧。
具体的代码设计可以看这篇帖子:
【Wyn7.1】动态拼接报表(二)——代码设计介绍
页:
[1]