报表知识库
我要提问

查询条件的保存

任务背景:

        在带参数的报表应用中,在查询的应用中,同一个用户每次查询所用的参数值或者查询条件往往是相同的,或者说常用的总是那几种查询条件,如果每次都让用户输入相同的条件值,用户会觉得很烦,于是用户往往会提出:能否提供查询条件保存的功能。

面临困难:

        所谓的查询条件的保存,乍一听似乎很简单,实际做起来并不容易。最直接的是要和用户关联,因为某个用户输入的查询条件,只能提供给该用户使用,不能让别的用户看见。其次,要考虑和报表模块、查询模块关联,因为同一个用户在不同的报表模块、查询模块里用的查询条件是不同的。
        另一个要考虑的是查询条件的存储格式,因为不同模块的参数个数、参数名均不相同,所以查询条件的存储格式要能够灵活扩充灵活解析。除了存储格式,还需要考虑存储位置,由于和用户关联,很多人直接想到的是采用cookies来实现,可是由于是WEB应用,客户端的机器可能随时会发生变化,比如用户可能在办公室上网,也可能在家里上网,在家里用另一台机器,于是预先存储的查询条件就没了。另外,由于每一个模块用户都可能存储多个查询条件供选择,cookies用起来还是不方便。因此,查询条件最好保存到服务器上。
        接着,还需要考虑界面上的制作,在原先的参数输入页面上,要提供一个历史查询条件的下拉选项,该下拉选项从服务器存储的查询条件里读取;其次还需要做一个查询条件是否保存的选项,如果保存,则提供保存名称的编辑框。
        做好这些之后,服务器端的程序还需要写不少,首先根据客户端的输入情况,判断使用历史查询条件还是使用当前的输入值,如果使用历史查询条件,则到库中读取;如果使用当前的输入值,还需要处理是否保存查询条件。
        总之,做起来非常麻烦!而所有这些程序还要考虑通用性,否则每个模块写一遍,那不是累死了!基于以上的考虑,建议还是采用润乾报表的 参数模板+参数处理类 来实现,简单方便许多,具体步骤描述如下:

实现步骤:

  1. 设计一个参数模板,该模板里增加三个多余的参数:是否保存参数值,保存名,历史查询。
  2. 在参数处理类里,如果读取到需要保存参数值,则将参数值按名字存入一张预先设计的参数值表中,该表的结构为:用户名、报表名、保存名、参数名与值,建表SQL如下:
    CREATE TABLE param (
    userName varchar(100) not null ,
    reportName varchar(100) not null ,
    saveName varchar(100) not null,
    argName varchar(100) not null,
    saveValue varchar(200) )
  3. 用户访问该参数模板的时候,可以输入新的参数值,并选择是否把新输入的参数值保存下来,也可以选择历史保存的参数值进行查询,不需要重复的输入。
  4. 如果用户选择的是历史保存的参数值,那么在参数处理类里,从数据库中取出历史保存的参数值来进行查询。
  5. 效果演示:

    ddd.png