首页> 中国专利> 一种序时簿的查询方法及一种序时簿的查询装置

一种序时簿的查询方法及一种序时簿的查询装置

摘要

本发明公开了一种序时簿的查询方法,包括:步骤S1、根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则执行步骤S3;如果否,则执行步骤S2;步骤S2、在所述元数据中定义所述查询字段,并执行步骤S3;步骤S3、从所述元数据中提取所述查询字段,并进行展示;步骤S4、接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;步骤S5、按照所述查询条件在所述序时簿数据库中进行查找。本发明可以灵活设置查询条件,并可以重复利用查询条件。

著录项

  • 公开/公告号CN101145164A

    专利类型发明专利

  • 公开/公告日2008-03-19

    原文格式PDF

  • 申请/专利权人 金蝶软件(中国)有限公司;

    申请/专利号CN200710166037.1

  • 发明设计人 资冰冰;周刚;

    申请日2007-10-30

  • 分类号G06F17/30;

  • 代理机构北京集佳知识产权代理有限公司;

  • 代理人逯长明

  • 地址 518057 广东省深圳市南山区深南大道市高新技术产业园区W1-B4

  • 入库时间 2023-12-17 19:54:11

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2010-06-02

    授权

    授权

  • 2008-05-14

    实质审查的生效

    实质审查的生效

  • 2008-03-19

    公开

    公开

说明书

技术领域

本发明涉及计算机数据查询领域,特别涉及一种序时簿的查询方法及一种序时簿的查询装置。

背景技术

序时簿是业务单据数据的展现报表,目前,序时簿的查询与数据库的查询类似,即通过设置查询条件,获得符合所述查询条件的查询结果的过程,在序时簿的查询过程中,查询字段是定义查询条件的关键因素。

然而,现有技术中,序时簿的查询字段通常固定设置于源程序代码中,或存放于系统文件(如TXT文件)中,通常在产品出厂前完成设置。在这种情况下,用户在设置查询条件时,所能使用的查询字段是固定的,即系统初始设定的。用户在设置查询条件的过程中,只能依赖于现有序时簿所提供的查询字段与关系运算符和逻辑运算符设置,如果系统没有设置某个查询字段,则相应的查询条件是不能设置的。例如,假设用户想对“姓名”字段设置查询,而如果系统没有姓名字段的设置时,这种序时簿的查询是不可实现的。因而,在现有技术中,序时簿的查询条件局限性大,灵活性低,所以导致用户体验较差。

此外,现有技术中,对于用户所设定的查询条件,在现有的序时簿中是不能重复使用的,例如,用户在某次查询中设置查询条件为“姓名=李明”,如果用户下次仍需使用这个查询条件,则需要重新设置该“姓名=李明”的查询条件,显然增加了用户的重复操作。

因此,本领域技术人员迫切需要发展出一种可以灵活设置查询条件,并可以重复利用查询条件的序时簿查询方法和装置。

发明内容

本发明所要解决的技术问题是提供一种序时簿的查询方法,用以保证查询条件设置的灵活性及可复用性。

本发明还提供了一种序时簿的查询装置,用以保证上述方法在实际中的实现及应用。

为解决上述技术问题,本发明实施例公开了一种序时簿的查询方法,包括:

步骤S1、根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则执行步骤S3;如果否,则执行步骤S2;

步骤S2、在所述元数据中定义所述查询字段,并执行步骤S3;

步骤S3、从所述元数据中提取所述查询字段,并进行展示;

步骤S4、接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;

步骤S5、按照所述查询条件在所述序时簿数据库中进行查找。

优选的是,所述步骤S3还包括:

子步骤S31、判断所述查询字段是否具有展示属性,如果是,则执行子步骤S32;如果否,则执行子步骤S33;

子步骤S32、展示所述查询字段;

子步骤S33、屏蔽所述查询字段。

优选的是,所述步骤S5还包括:

子步骤S51、将所述查询条件转化为可执行的SQL语句;

子步骤S52、根据SQL语句在所述序时簿数据库执行查询操作,获得查询结果。

优选的是,所述的方法,还包括:

步骤S6、在所述序时簿界面中显示所述查询结果。

优选的是,所述查询方案具有方案名、方案ID、方案所属的组织、序时簿、用户信息和共享级别信息。

优选的是,所述查询条件包括过滤条件和排序条件。

本发明实施例还公开了一种序时簿的查询装置,包括:

判断单元,用于根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则触发提取展示单元,如果否,则触发元数据定义单元;

元数据定义单元,用于在所述元数据中定义所述查询字段,并触发提取展示单元;

提取展示单元,用于从所述元数据中提取所述查询字段,并进行展示;

方案记录单元,用于接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;

查找单元,用于按照所述查询条件在所述序时簿数据库中进行查找。

优选的是,所述提取展示单元还包括:

属性判断子单元,用于判断所述查询字段是否具有展示属性,如果是,则触发展示子单元;如果否,则触发屏蔽子单元;

展示子单元,用于展示所述查询字段;

屏蔽子单元,用于屏蔽所述查询字段。

优选的是,所述查找单元还包括:

SQL语句转化子单元,用于将所述查询条件转化为可执行的SQL语句;

查询结果获得子单元,用于根据SQL语句在所述序时簿数据库执行查询操作,获得查询结果。

优选的是,所述的装置,还包括:

结束显示单元,用于在所述序时簿界面中显示所述查询结果。

与现有技术相比,本发明实施例具有以下优点:

首先,本发明基于元数据实现,元数据是一种配置数据,并且具有可扩展的属性,对于没有预先设置的查询字段,可以在元数据中定义后,再提供给用户使用,从而实现了查询字段的动态设置,有效提高了查询条件设置的灵活性;

再者,本发明通过保存用户所设置的查询条件,当用户在下次使用同样的查询条件时,可以直接读取而无需重新生成,减少了用户的重复操作,使用户获得较好的使用体验;

最后,本发明对于服务提供商来说,技术实现简单,无技术障碍,无特殊保密算法,成本和风险较低。

附图说明

图1是本发明的一种序时簿查询方法实施例的流程图;

图2是应用本发明实施例实现的一种序时簿的查询字段展示界面示意图;

图3是应用本发明实施例实现的一种用户设置的查询条件的示意图;

图4是应用本发明实施例实现的一种保存的查询方案的示意图;

图5是本发明的一种序时簿查询装置实施例的结构框图;

图6是应用图5所示的优选实施例进行序时簿的查询的流程图。

具体实施方式

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

参考图1,示出了本发明的一种序时簿查询方法实施例的流程图,具体可以包括以下步骤:

步骤101、根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则执行步骤103;如果否,则执行步骤102;

步骤102、在所述元数据中定义所述查询字段,并执行步骤103;

步骤103、从所述元数据中提取所述查询字段,并进行展示;

步骤104、接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;

步骤105、按照所述查询条件在所述序时簿数据库中进行查找。

本发明是基于元数据实现的,所述元数据(data about data,关于数据的数据)不是被处理的对象,而是通过改变元数据的一些“值”来改变程序的运行的数据。它在运行过程中起着以解释方式控制程序行为的作用。在程序的不同位置配置不同值的元数据,就可以得到与原来等价的程序行为。

应用本实施例,开发人员可以根据需要在序时簿的元数据中定义一些默认的查询字段,也可以不定义任何查询字段,而待到用户使用时,再在元数据中添加所需的查询字段的定义。根据元数据具有可扩展属性的特点,在实际中,还可以定义所述查询字段的扩展属性,例如,设置查询字段的展示属性,当从所述元数据中提取查询字段,并进行展示时,则可以判断所述查询字段是否具有展示属性,如果是,则展示所述查询字段;如果否,则屏蔽所述查询字段。即通过循环迭代这些查询字段,过滤出具有展示属性的查询字段以进行展示。

需要说明的是,在所述元数据中定义查询字段的方法与从元数据中提取查询字段的方法是对应的,例如,以标准的XML文件形式定义的查询字段,则采用相应的元数据解析器解析提取查询字段的一段过程代码示意如下:

一、在元数据中定义查询字段的代码:

<queryField>

             <name>name</name>    //查询字段,下面是它的

属性

             <userDefined>false</userDefined>

             <formulaString/>

             <constString/>

<displayName>joinQuery[com.kingdee.eas.basedata.assistant.app.Proje

ctQuery].units.queryField[name].displayName</displayName>

                    <groupType/>

                    <isSelector>true</isSelector>

                    <isFilter>true</isFilter>

                    <isSorter>false</isSorter>

                    <isParameter>false</isParameter>

                    <returnType>String</returnType>

                    <propertyRefs>

                        <propertyRef>

                             <key>0</key>

                             <parentUnit>

                                     <key name=″name″value=″name″/>

                               </parentUnit>

                               <subEntity>

                                    <key name=″name″value=″Proj ect″/>

                               </subEntity>

                               <refProperty>

                                    <key name=″name″value=″name″/>

                               </refProperty>

                          </propertyRef>

                     </propertyRefs>

                     <query>

                          <key                               name=″package″

value=″com.kingdee.eas.basedata.assistant.app″/>

                          <key name=″name″value=″ProjectQuery″/>

                      </query>

          </queryField>

         //下面这个属性即是这个字段的扩展属性isCommonQueryFilter

          <rs

   key=″joinQuery[com.kingdee.eas.basedata.assistant.app.ProjectQuery].units.

   queryField[attachment].extendedProperty.isCommonQueryFilter″>

                      <lang locale=″en_US″value=″true″/>

                      <lang locale=″zh_CN″value=″true″/>

                      <lang locale=″zh_TW″value=″true″/>

       </rs>

     二、解析相应的元数据的代码:

    获取XML主节点集合,得到几个Map(一种关系式容器,可以根据关键字匹配多种数据。)

  /**

  Element rs=root.getChild(Utils.RESOURCE,root.getNamespace());

    Map resource=getResource(rs);

    MapextResource=getExtendedPropertyResource(resource);//获取所

有扩展属性集合

    EntityObjectInfoentity=loadMeta(bosType,root.getName());

    ProperrtyCollection properties=entity.getInheritedProperriesRuntime();

//获取元数据的属性集合

    Iterator it=properries.iterator();

    while(it.hasNext()){

             PropertyInfoprop=(PropertyInfo)it.next();

             if(prop instanceof OwnPropertyInfo){

                processOwnProperty(//处理每个自有属性

                   ov,

                   (OwnPropertyInfo)prop,

                   root,

                   resource,

                   extResource);

      }

    */

    解析一个自有属性,取得所有key-value对,本例中处理了多语言

    /**

    private void processOwnProperty(

          IObj ectValue ov,

          OwnPropertyInfo prop,

          Element root,

          Map resource,

          Map extResource){

         DataType dataType=prop.getDataType();

          String name=prop.getName();

          String value=null;

          boolean isMultilingual=prop.isMultilingual();

          if(name.equalsIgnoreCase(″extendedProperty″)){//处理扩展属性

              value=XMLStore.getMutlilingualKey(root)+

″extendedProperty″;

             Map etProps=(Map)extResource.get(value);

             //扩展属性升级

             if(etProps==null){

                 value=XML Store.getMutlilingualKey2(root)+

″extendedProperty″;

                 etProps=(Map)extResource.get(value);

               }

       //一般属性解析,最后都存在对象ov里

             Element node=root.getChild(name,root.getNamespace());

           if(node!=null){

               value=node.getTextTrim();

           }

           if(value==null‖value.length()<=0)

              return;

           if(dataType.equals(DataType.BOOLEAN)){

               ov.setBoolean(name,

  Boolean.valueOf(value).booleanValue());

           }else if(dataType.equals(DataType.INTEGER)){

              ov.setInt(name,Integer.valueOf(value).intValue());

           }else if(dataType.equals(DataType.STRING)){

              if(isMultilingual){

                 Map map=(Map)resource.get(value);

                 if(map==null)

                    return;

                 Iterator it=map.keySet().iterator();

                 while(it.hasNext()){

          String key=(String)it.next();

          String tmp=(String)map.get(key);

          if(tmp==null‖tmp.equalsIgnoreCase(″null″))

             tmp=null;

          ov.put(name,tmp,LocaleUtils.getLocale(key));

       }//end while

    }else{

       ov.setString(name,value);

    }//end if

 }else{

    ov.setString(name,value);

 }//end switch

}

*/

当然,上述元数据定义及解析的方法仅仅用于举例,本领域技术人员根据需要或经验采用任一种方法实现都是可行的,本发明对此不需要进行限定。

在实际中,对于关系运算符、逻辑运算符以及查询字段值的设置也可以采用上述在元数据中定义的方法。如,系统开发人员在系统中预置常用的关系运算符和逻辑运算符,用户还可以根据需要添加新的关系运算符和逻辑运算符,相应查询字段值也可以在元数据中针对查询字段进行定义,从而避免用户输入错误而导致查询条件生成错误的可能。在这种情况下,用户通过定义查询字段、关系运算符和逻辑运算符、和查询字段值即可实现查询条件的个性化定制。

优选的是,所述查询条件可以包括过滤条件和排序条件。即在查询条件中不只包括针对某个查询字段设置的过滤条件,还包括对相应查询结果的排序条件,例如,对于“姓名=李明”的过滤条件,还设置将其查询结果按照“日期”升序排序的查询条件。可以理解的是,当没有排序条件时,所述过滤条件即可单独作为查询条件。

根据用户设置的查询条件,获取该查询条件的相关信息,将其保存为可重复利用的查询方案。优选的是,所述相关信息包括方案名,方案ID、方案所属的组织、序时簿、用户信息和共享级别信息等,其中,所述共享级别信息的设置有利于控制用户的使用权限。在保存查询方案时,后台会获取用户定义的过滤条件和排序条件,按照如where A and & or Border by C(A、B、C代表某个字段的过滤信息)的形式或以其它方式,将所述查询方案保存在数据库中。当然,本领域技术人员采用其它方法保存所述查询方案也是可行的,例如,以文件形式保存等,本发明对此不需要进行限定。

依据该查询条件,后台即可进行查询,优选的是,所述查询步骤还可以包括以下子步骤:

子步骤A1、将所述查询条件转化为可执行的SQL语句;

子步骤A2、根据SQL语句在所述序时簿数据库执行查询操作,获得查询结果。

如果用户下次仍需要使用该查询方案,则可以通过所述查询方案的方案名在数据库中查找到相应的查询方案,然后执行上述查询操作即可依据该查询条件的再次查询。

优选的是,本发明还可以包括步骤:在所述序时簿界面中显示所述查询结果。

为使本领域技术人员更好地理解本发明,以下以应用本实施例查询名称等于测试项目的记录为例进行说明。

步骤A、判断元数据中是否有“名称”的字段,如果是,则判断该字段是否具有展示属性,如果是,则提取该字段并在界面中展示,如果没有,则在元数据中定义该字段及其展示属性后,再在界面中进行展示;

所述展示的界面如图2所示,所述图2中名称为“isCommonQueryFilter”,值为“true”即表示所述名称在元数据中的字段“name”具有展示属性,因此,在序时簿的查询字段展示界面展示该字段。

步骤B、用户针对名称字段设置查询条件,所设置查询条件的示意图如图3所示,其中,所述比较符即包括前述关系运算符和逻辑运算符,所述比较值即为查询字段值;

步骤C、如图4所示,将步骤B所设置的查询条件保存为查询方案,方案名为“测试项目方案”。

在这种情况下,用户触发此方案,可以按照这个查询条件在数据库中进行查询,并将查询结果显示在序时簿上。

可以看出,由于本发明基于元数据实现,元数据是一种配置数据,并且具有可扩展的属性,对于没有预先设置的查询字段,可以在元数据中定义后,再提供给用户使用,从而实现了查询字段的动态设置,有效提高了查询条件设置的灵活性;并且,本发明通过保存用户所设置的查询条件,当用户在下次使用同样的查询条件时,可以直接读取而无需重新生成,减少了用户的重复操作,使用户获得较好的使用体验。

参考图5,示出了本发明的一种序时簿的查询装置实施例的结构框图,具体可以包括以下单元:

判断单元501,用于根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则触发提取展示单元503,如果否,则触发元数据定义单元502;

元数据定义单元502,用于在所述元数据中定义所述查询字段,并触发提取展示单元503;

提取展示单元503,用于从所述元数据中提取所述查询字段,并进行展示;

方案记录单元504,用于接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;

查找单元505,用于按照所述查询条件在所述序时簿数据库中进行查找。

所述查询条件可以包括过滤条件和排序条件。所述查询方案可以具有方案名、方案ID、方案所属的组织、序时簿、用户信息和共享级别信息等。

优选的是,所述提取展示单元503还可以包括以下子单元:

属性判断子单元,用于判断所述查询字段是否具有展示属性,如果是,则触发展示子单元;如果否,则触发屏蔽子单元;

展示子单元,用于展示所述查询字段;

屏蔽子单元,用于屏蔽所述查询字段。

优选的是,所述查找单元还可以包括以下子单元:

SQL语句转化子单元,用于将所述查询条件转化为可执行的SQL语句;

查询结果获得子单元,用于根据SQL语句在所述序时簿数据库执行查询操作,获得查询结果。

优选的是,本实施例还可以包括结束显示单元,用于在所述序时簿界面中显示所述查询结果。

参考图6,示出了应用图5所示的优选实施例进行序时簿查询的流程图,具体可以包括以下步骤:

步骤601、判断单元根据提交的查询字段判断序时簿的元数据中是否包括所述查询字段的定义,如果是,则触发提取展示单元执行步骤603,如果否,则触发元数据定义单元执行步骤602;

步骤602、元数据定义单元在所述元数据中定义所述查询字段,并触发提取展示单元执行步骤603;

步骤603、提取展示单从所述元数据中提取所述查询字段,并进行展示;

本步骤还可以包括由属性判断子单元、展示子单元和屏蔽子单元执行的以下子步骤:

子步骤C1、属性判断子单元判断所述查询字段是否具有展示属性,如果是,则触发展示子单元执行子步骤C2;如果否,则触发屏蔽子单元执行子步骤C3;

子步骤C2、展示子单元展示所述查询字段;

子步骤C3、屏蔽子单元屏蔽所述查询字段。

步骤604、方案记录单元接收用户针对所述查询字段设置的查询条件,并根据所述查询条件生成查询方案,保存所述查询方案;

步骤605、查找单元按照所述查询条件在所述序时簿数据库中进行查找。

本步骤还可以包括由SQL语句转化子单元和查询结果获得子单元执行的以下子步骤:

子步骤D1、SQL语句转化子单元将所述查询条件转化为可执行的SQL语句;

子步骤D2、查询结果获得子单元根据SQL语句在所述序时簿数据库执行查询操作,获得查询结果。

步骤606、结束显示单元在所述序时簿界面中显示所述查询结果。

对于装置实施例而言,由于其基本相应于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。

本发明可以在由计算机执行的可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通讯网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。

以上对本发明所提供的一种序时簿的查询方法及一种序时簿的查询装置进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号