下拉树实现数据集过滤

编辑
  • 文档创建者:印然
  • 浏览次数:7610次
  • 编辑次数:12次
  • 最近更新:宋会青 于 2019-03-19
  • 1. 描述

    我们在制作模板时,经常要使用到参数,参数分为两种,一种是数据集参数,一种的模板参数,因此,过滤也分为两种,一种是数据集参数过滤,一种是模板参数过滤,这两种在前面都有讲到过,也介绍过用法,由于下拉树的特殊性,其返回值是路径数组值,并不是一个字符串,那么如果使用下拉树的话,其过滤的方式也就有所不同,下面分别讲述数据集参数过滤和模板参数过滤的方法。

    2. 数据集参数过滤

    2.1 单选下拉树
    1)数据准备
    新建数据集ds1:SELECT * FROM S订单  where 1=1 ${if(len(aa)==0,""," and 货主城市 = '"+treelayer(aa)+"'")}
    新建数据集layer1:SELECT  货主地区 FROM 订单 where 货主地区 is not null 
    新建数据集layer2:SELECT  货主省份 FROM 订单 where 货主省份 is not null and 货主地区='${layer1}'
    新建数据集layer3:SELECT  货主城市 FROM 订单 where 货主城市 is not null and 货主省份='${layer2}'
    注:数据集ds1中使用到了treelayer函数,即取得参数aa的最后一层值,详细用法请查看treelayer函数
    2)下拉树创建
    在参数界面由参数aa生成控件,控件类型选择下拉树,下拉树的数据字典选择分层构建方式,数据来源是layer1,layer2和layer3,具体使用方法清查看下拉树分层构建示例
    下拉树控件默认为单选下拉树,勾选结果返回完整层次路径
    参数界面如下图:

    注:如果下拉树属性中不勾选结果返回完整层次路径,那么下拉树返回值不是路径值,故无需使用treelayer函数对下拉树返回值进行再次修改,直接使用即可,此时,可以将ds1数据集的SQL语句修改为SELECT * FROM [S订单] where 1=1 ${if(len(aa)==0,""," and 货主城市 = '"+aa+"'")}
    3)报表设计
    如下图:
    4)效果查看

    模板效果在线查看请点击:singletree.cpt
    具体模板请查看:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\widgetReport\单选下拉树实现数据集过滤.cpt
    2.2 多选下拉树
    1)数据准备
    打开上面的单选下拉树模板,更改数据集ds1:SELECT * FROM S订单  where 1=1 ${if(len(aa)==0,""," and 货主城市 in ("+"'"+treelayer(aa,true,"\',\'")+"'"+")")}
    注:treelayer(aa,true,"\',\'")返回的值是以“,”为分隔符的字符串,形如“北京,天津”这样的字符串,但是在sql语句中实现in过滤必须形如“'北京,天津'”,两者比较,后者比前者最前面和最后面多了两个单引号,则在treelayer(aa,true,"\',\'")前面和后面拼接两个单引号即可。
    2)下拉树
    选中下拉树控件,在控件属性表中,勾选多选复选框和结果返回完整层次路径。如下图:

    注:下拉树属性中勾选结果返回完整层次路径选项,在ds1数据集实现过滤的时候都需要使用treelayer函数,勾选该选项treelayer有两个作用,一个是获取最底层值,另一个是将数组转换为字符串,而不勾选该选项,则只是将数组转换为字符串。
    另:下拉树属性中不勾选结果返回完整层次路径,只返回叶子节点,这个时候过滤中不需要用到treelayer这个函数 ,可以把("+"'"+treelayer(aa,true,"\',\'")+"'"+")修改为("+"'"+replace(aa,',',"','")+"'"+")
    3)效果查看

    模板效果在线查看请点击:mutitree.cpt

    详细模板请查看:%FR_HOME%\WebReport\WEB-INF\reportlets\doc\Primary\widgetReport\多选下拉树实现数据集过滤.cpt

    附件列表


    主题: 专题总结
    如果您认为本文档还有待完善,请编辑

    文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
    关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
    若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201

    此页面有帮助吗?只是浏览 [ 去社区提问 ]