极速报表:模板及插件

栏目:云星瀚知识作者:金蝶来源:金蝶云社区发布:2024-09-22浏览:1

极速报表:模板及插件

变更记录

产品版本
更新内容更新日期
V4.0.020初始版本2022年05月12日

1 简介

1.1 功能介绍

    使用极速报表开发业务报表时,必须继承元数据模板才能实现相关的功能,同时框架对相关的功能进行了封装,开发了一些供业务使用的插件。在实现相关功能时,需要实现相应的方法。下面分元数据模板和插件接口两部分来介绍。

1.2 元数据模板

    报表元数据模板:scmc_report_tpl,元数据模板对过滤区域进行了划分,通用过滤、显示设置、合计列有木人的设置,同时配置了模板插件。如下图:

    

    在目标页面添加的任何字段标识,需要注意不能与报表列表控件中动态生成的字段同名,报表列表中字段是动态生成,可能导致冲突。比如:通用过滤加了字段叫org,报表列表显示一列也叫org,可能出现数据显示异常,也可能报错。


    关键区域和字段

区域和字段描述和用法
常用过滤
建议业务报表添加自的定义的过滤字段的区域。可自定义修改。
通用过滤以字段库字段作为字段数据构建的过滤面板,框架默认会解析传递条件。可自定义修改。
汇总依据设置汇总的维度字段,及GROUP BY 字段。可自定义修改。
汇总值
设置要参与汇总的数值字段。集SUM字段。可自定义修改。
合计项合计项可选范围,必须是汇总依据勾选项的子集,根据会合计项,添加合计行。可自定义修改。
显示总计行
开启时,框架会自动根据汇总值字段,增加一行总计行。可自定义修改。
分析模式默认不可见,已废弃,已调整到报表参数控制。
合计列固定字段,标识是固定的,用于辅助计算汇总统计。如合计的逻辑。可配合RowSumPlan使用。

1.2 插件及接口

    即时报表插件有3类:

    1)报表页面控制插件(与平台原生报表一致),用于控制页面交互逻辑,可以有多个,需继承kd.bos.report.plugin.AbstractReportFormPlugin(领域模型插件)

    2)列表查询插件,用于实现数据查询的逻辑,只能配置一个,需继承kd.bplat.scmc.report.core.tpl.AbstractReportQuery (极速报表插件),该插件对查询逻辑进行业务了封装,用于接通配置。子类几乎不用实现任何逻辑。

     3)报表计算插件,用于业务控制具体的计算逻辑,实现一定的扩展,可以有多个,需实现kd.bplat.scmc.report.core.tpl.IReportDataHandle极速报表插件),在对应的报表数据源插件列表中配置,业务大部分逻辑,都在这个插件里实现

    报表的总体思路,可以这样理解:计算报表分为输入层、计算层、输出层,输入层需要的是一些报表的参数,及过滤条件,也可以分为框架的参数,和业务的参数,框架的参数就是通用过滤设置的条件,显示设置的参数等,业务的参数就是自定义的一些常用过滤和自定义的一些特殊参数,都是在输入层完成,即在AbstractReportFormPlugin 实现类控制。输出层则是定义的一些流式计算框架,开放了很多的切口,运行业务将自定义的一些参数在计算前设置好,如自定义的过滤条件。以及业务可以在相应的方式中设置算子达到计算的要求。输出层则无需关注,都是输出到报表页面。

    因此在实现相关功能前,应该先思考清楚,自己要加的逻辑是在哪一层控制。而不是以达功能为目的。不合理的设计可能导致业务报表的无法再扩展。

2 开发技巧

2.1 新增报表

    报表也是一个元数据,新增方式和其他元数据创建方式一样,选择报表即可。但因跨云无法继承模板,可参考下面方式创建。

    1)在开发平台【供应链和制造服务云】—【公共服务模型】—【报表配置】路径下,先创建一个报表数据源,注意需要继承scmc_report_tpl模板。


     2)元数据新增完后,将报表元数据导出,在导入到目标应用下即可。后续的修改、发布都在目标应用下完成。


2.2 新增插件

    下面是不同插件的配置方式

    1)报表页面控制插件。

    2)列表查询插件

     3)报表计算插件。

2.3 接口方法

    页面控制插件是领域模型(即平台)的插件,开发人员需先对平台Form插件有所了解。列表查询插件只需要继承出一个子类,几乎不需要修改任何逻辑,因此,这两种插件这里不做介绍。下面重点介绍报表计算插件。

2.3.1 接口:kd.bplat.scmc.report.core.tpl.IReportDataHandle。

  • setupCtx

    设置上下文,通过ctx.get方法获取信息,然后ctx.set相关信息,比如:将Form界面传过来的自定义条件,设置到报表过滤条件中。

   

 

  • handleBlockDataSelectCols

        这里只对某个数据块来定义,中间表需要哪些字段,默认逻辑字段是不会自动加载的,根据不同的逻辑需要,添加不同的字段需求。尽量避免全部字段加载。一般是数据源到数据库中间MR算子有需求是才会添加。计算完后,不会影响中间表字段。


    • handleBigtableCols

        这里收集的是中间表需要哪些字段,默认逻辑字段是不会自动加载的,根据不同的逻辑需要,添加不同的字段需求。尽量避免全部字段加载。这里添加后,所有映射的数据库都会识别需要字段,自动加载数据。

         注意:这里方法加的字段,默认会传递到handleBlockDataSelectCols中。反之,则没有传递关系。


    • modifyBlocks

          针对实体数据源进行一些设置。ctx是上下文信息,blockCollector是数据源信息集合。比如:代码自定义一个数据块,添加到blockCollector,或通过遍历数据块,在特点的数据块信息中添加过滤条件、添加数据转换器,修改字段映射等。

       

      • modifyJoinBlocks

          针对关联实体数据源进行一些设置。和modifyBlocks 用法相同。在V5.0.024版本添加的。


      • transFormAfterUnion

          定义在数据块Union完之后,需要执行哪些数据转换器,transCollector.add即可,比如:需要对数量进行拆分为收入、发出等列,在改方法比较合适,因为下一节点就是分组汇总。

          

      • beforeGroupData

          在分组汇总添加自定义算子前,可以再次对ctx进行信息修改,比如:不想使用标准的分组合计逻辑,可以修改后删除GroupPlan,也可以在setUpdate位置除了。


      • transFormAfterGroup

          定义在数据块分组汇总完之后,需要执行哪些数据转换器,transCollector.add即可。


      • beforeAddSumRow

      在添加汇总行算子前,可以再次对ctx进行信息修改,比如:不想使用标准的分组合计逻辑,可以修改后删除RowSumPlan。


      • transFormAfterAddSumRow

          定义在数据块添加汇总行之后,需要执行哪些数据转换器,transCollector.add即可。


      • transformResult

          定义在AlgoX计算完结果,输出DataSet数据包后,需要执行哪些数据转换器,transCollector.add即可。注意这里要添加的是IDataTransform实现类了。


      • buildShowColumn

          定义报表字段如何显示,比如:增加字段、调整字段的一些定义。Cols是经过框架自动处理完的字段集合。插件修改后再返回。

          

      2.3.2 数据转换接口:kd.bplat.scmc.report.core.tpl.IDataXTransform


      • doTransform

          定义数据是如何转换的,输入DataSetX,返回也是DataSetX,中间可以通果AlgoX标准的流操作方法,或者自定义流操作接口实现类(算子),来完成相关的计算。在编写算子前,请务必先熟悉AlgoX相关的API文档。这里无法挨个介绍。流式计算原理,可以进行百度了解,是非常成熟的技术。下面给一个操作例子。

          AlgoX开发文档地址:https://dev.kingdee.com/sub/index/open/detail/sdk/1565335160516249600


      2.3.3 数据转换接口:kd.bplat.scmc.report.core.tpl.IDataTransform

          该接口和IDataXTransform用法几乎一样,一个用的AlgoX还在AlgoX任务中,后者则是用的Algo,数据已经在服务节点了。


      2.3.4 合计方案:kd.bplat.scmc.report.core.transform.plan.RowSumPlan

          改方法需搭配kd.bplat.scmc.report.core.transform.func.AddSumRowFunc算子使用。比如:二级的小计行。


      • sumKeyCols : GroupBy的字段。

      • sumQtyCols:Sum的字段。

      • countName:对应模板中合计列字段类型,用于标识哪些行是参与Sum的。

      • 注意Sum字段不能为空,且必现是可计算的字段。


      2.3.5 聚合方案:kd.bplat.scmc.report.core.transform.plan.GroupPlan

      • keyCols : GroupBy的字段。

      • qtyCols:Sum的字段。

      • 注意Sum字段不能为空,且必现是可计算的字段。


      2.3.6 数据转换接口:kd.bplat.scmc.report.core.ReportDataCtx

      • 业务常用方法介绍

      方法描述和用法
      setUseDefGroup
      设置是否使用默认的聚合方案,等价于setGroupPlans(null)。默认:true。
      setUseDefSum设置是否使用默认的合计行方案,等价于setSumPlans(null)。默认:true。
      setShowTotalQty设置是否计算总计行。自动取报表页面设置。
      setShowKeyCols
      设置汇总依据字段集,自动取报表页面设置一般不修改。
      setShowQtyCols设置汇总值字段集,自动取报表页面设置,一般不修改。
      setSumKeyCols设置合计项字段集,自动取报表页面设置,一般不修改。
      setSumQtyCols设置合计数量字段段集,自动取报表页面设置,默认同汇总值,一般不修改。
      setSumKeyCols4Count设置实际参与合计的字段集,自动取报表页面设置,一般不修改。
      setSumQtyCols4Count设置实际参与合计的数量字段集,自动取报表页面设置,默认同汇总值,一般不修改。
      setFixedFs设置固定的过滤条件,过滤字段必须使用字段库字段标识。
      setGroupPlans设置聚合方案,默认使用汇总依据字段聚合。
      setSumPlans设置合计方案,默认使用合计项字段合计一行。
      getShowKeyCols
      读取设置好的汇总依据字段,一般不修改。
      getShowQtyCols读取设置好的汇总值字段,一般不修改。
      getSumKeyCols读取设置好的合计项字段,一般不修改。
      getSumQtyCols读取设置好的参与合计的汇总值字段,一般不修改。
      getSumKeyCols4Count读取实际参与计算的合计项字段,一般不修改。
      getSumQtyCols4Count读取实际参与计算的参与合计的汇总值字段,一般不修改。
      getGroupPlans读取聚合方案。
      getSumPlans读取合计方案。
      getFixedFs读取固定过滤条件设置,一般通过get后,使用add添加过滤条件。
      getCurrentJob获取单前的AlgoX任务,一般用于额外添加input数据流。
      getParam获取Form界面通过ReportQueryParam.getCustomParam().put()进来的自定义参数。
      getCommonFs获取通用过滤面板设置的过滤条件。

      getReportConf

      获取单前查询的配置,在setup方法中允许修改。

      • 其他方法

        其他未提及的方法,一般是框架使用,建议具体报表开发不使用。


      2.4 注意事项

          1)框架的目标是让业务报表具备扩展能力,但是这不是绝对的,数据源配置、中间表、算子编排、插件逻辑等都会影响具体业务报表的扩展性,设计人员必须对业务报表后续的扩展方向有一定的把握,在实现时要重点考虑。

          2)配置在一定程度上就是代码实现,配置本身还依赖周边元数据相关的解析,因此,某些设置可能出现报错,这是开发阶段需要处理的。比如:配置了一个不存在的字段。

          

      2.5 参考示例

          开发过程可以参考供应链库存管理相关报表的插件。可以通过报表数据源配置查看到任何一个报表的插件。

      极速报表:模板及插件

      变更记录产品版本更新内容更新日期V4.0.020初始版本2022年05月12日1 简介1.1 功能介绍 使用极速报表开发业务报表时,必须继承元数据模...
      点击下载文档
      确认删除?
      回到顶部
      客服QQ
      • 客服QQ点击这里给我发消息