一种报表系统自定义函数的实现方法

文档序号:6637005阅读:352来源:国知局
一种报表系统自定义函数的实现方法
【专利摘要】本发明公开了报表系统自定义函数实现方法,包括以下步骤:步骤1):自定义函数及参数登记;步骤2):自定义函数相关存储过程创建;步骤3):在报表中使用自定义函数;步骤4):识别报表中的自定义函数;步骤5):自定义函数参数列表中变量识别与替换;步骤6):准备参数并调用自定义函数关联存储过程;步骤7):执行自定义函数关联存储过程并返回结果;步骤8):接收自定义函数关联存储过程返回结果并应用到报表中。本发明创建自定义函数的技术门槛较低,报表用户只需要熟悉存储过程的设计就可以创建自定义函数,只要在设计器中登记了自定义函数的名称和参数信息并提交及在数据库中创建了关联存储过程就完成了自定义函数的创建及部署。
【专利说明】一种报表系统自定义函数的实现方法

【技术领域】
[0001]本发明涉及计算机软件应用领域,尤其涉及一种报表系统自定义函数的实现方法。

【背景技术】
[0002]自定义函数功能是商业报表系统的重要功能之一,它允许报表设计者或报表用户将格式转换函数及业务处理逻辑包装为函数的形式供设计报表时使用,实现代码重用及特定应用领域的特色需求。
[0003]报表是企业应用软件必不可少的部分,为了方便报表的开发,各类报表开发系统中都提供了一定数量的系统函数以完成一些通用的功能,如数学处理、字符串处理、日期格式转换等。但在实际应用中,根据应用领域的具体需要,报表设计者还需要经常用到一些系统函数中没有的功能,如特定格式的日期格式转换或数字格式转换,以及与应用业务逻辑相关的处理功能,这些功能就需要报表设计者自行设计成自定义函数供其反复使用。
[0004]在当前主流的商业报表系统中,大多提供了设计自定义函数的方法。微软公司乂18皿1 31:11(110集成开发环境中的水晶报表(0781:211系统中,提供了自定义函数编辑器供用户设计自定义函数,设计完成后可以发布到报表系统的储备库中与所有其他设计者共享使用。水晶报表自定义函数设计及发布都比较简单,但需要使用71%从8…X或水晶报表专用的编程语言编写,而且对代码功能有诸多限制,如在自定义函数中不能使用报表或数据库字段,这极大地限制了自定义函数的应用范围。
[0005]润乾报表系统、杰表报表系统及乂5报表平台都是以獅语言开发呢8报表的解析引擎,因此,它们均要求自定义函数使用从V八语言开发,其配置使用也要按照一定的规则对配置文件进行编辑。例如在润乾报表系统中添加一个自定义函数的流程如下:
[0006]1、编写自定义函数的类,继承 00111.1110(161.6X^1-0881011.这个类。
[0007]2、在的类路径的目录下,找到1:168 文件,并在其中进行自定义函数类及函数名的登记。
[0008]3、在设计器端,将文件复制到 \01681即61~\界613\126~1^?\0188868\0011?1^ 下,将类文件复制到下,有包名的,相应的建包路径。
[0009]4、在 16)3 端,将1:168 文件复制到126~1^?\0188868\0011?1^ 下,将类文件复制到下,有包名的,相应的建包路径。
[0010]5、重启设计器。
[0011]6、在设计器中运用自定义函数。
[0012]上述自定义函数实现方法优点是功能强大,可以充分利用从V八编程语言提供的编程能力,对用户的格式转换功能及业务逻辑处理功能都比较容易实现。
[0013]还有一种自定义函数的实现方案可以简单地设计和应用自定义函数【1】。在此方案中,自定义函数用四元组?皿=(自定义函数名,3亂查询语句,输入参数个数,输出参数个数丨定义,函数的功能由其中的3亂查询语句实现,报表用户只需编写此3亂查询语句,无需使用其他的编程语言。上述自定义函数四元组都确定后,就可提交到数据库,供其他报表用户共享使用。使用时可以像系统函数一样嵌入在表达式中。此方案的自定义函数解析过程如下:
[0014]1、包含自定义函数的表达式中的变量识别与替换,所有变量都替换为具体的值,为自定义函数求值做准备。
[0015]2、识别表达式中的自定义函数。
[0016]3、通过数据库中存储的用户自定义函数函数名,查到对应的3亂查询语句及参数个数信息与取得的变量个数进行比较,以验证变量定义个数是否正确。
[0017]4、用表达式中的自定义函数的实际参数值替换查询语句中的参数变量。
[0018]5、执行上一步经变量替换后的查询语句,得到返回值,即作为自定义函数的求值结果替换其在表达式中的出现。
[0019]对于润乾报表系统、杰表报表系统及乂5报表平台等基于雜的自定义函数实现方法,其主要缺点在于:
[0020]创建自定义函数的技术门槛较高。各种报表系统在设计自定义函数时都要求用户使用指定的编程语言并按规定的格式编码,需要数据库操作的自定义函数还要掌握301编程。
[0021]自定义函数的部署复杂,在自定义函数较多时工作量大且易出错。
[0022]对于以四元组[1111=(自定义函数名,3亂查询语句,输入参数个数,输出参数个数丨实现的自定义函数方案,其主要不足在于功能受限,自定义函数执行及结果获取都是通过3亂查询语句实现的,难以实现包含业务逻辑规则的自定义函数功能。此外它还有效率低的缺点,即每次执行3亂查询语句数据库服务器都需要对其进行语法检查。
[0023]综合分析当前各主流报表系统的自定义函数功能实现,发现存在如下问题:
[0024]创建自定义函数的技术门槛较高。各种报表系统在设计自定义函数时都要求用户使用指定的编程语言并按规定的格式编码,需要数据库操作的自定义函数还要掌握301编程。这意味着普通的报表设计者和用户可能需要学习一门新的编程语言及其开发工具以设计自定义函数。
[0025]自定义函数的部署复杂。在各种报表系统的自定义函数部署过程中,通常涉及到多个文件的创建与编辑,并要将其放入指定文件路径下,有些报表系统还需要重新启动设计器以让自定义函数生效,过程复杂,在自定义函数较多时工作量大且易出错。


【发明内容】

[0026]本发明目的在于提供一种以较低的技术门槛及简单的部署方式以解决【背景技术】提及的技术问题的报表系统自定义函数实现方法。
[0027]本发明提供的技术方案是:一种报表系统自定义函数实现方法,包括以下步骤:
[0028]步骤1):自定义函数及参数登记。此步骤在报表设计器的功能界面上完成。报表设计者需提供自定义函数的名字、参数数目及每个参数的参数名及其描述,然后提交到系统数据库即可完成登记过程。报表系统函数用前缀丨识别,而自定义函数用前缀识别,如一个函数若形如,则是系统函数,若形如$$1^从:0,则是自定义函数。此增加前缀的函数命名方法有利于区分普通带括号表达式、系统函数及自定义函数。
[0029]步骤2):自定义函数相关存储过程创建。此步骤在数据库管理系统中完成。所有自定义函数的功能都由其相关的存储过程实现。自定义函数相关存储过程的名字为自定义函数名字去掉前缀而得到,如自定义函数名为$$11171?% 0,则其关联存储过程名为
这种函数名与存储过程名的相关定义方法保证了解析自定义函数时可以直接从自定义函数名得到其相关存储过程名,而无需从数据库中检索。所有自定义函数相关存储过程的参数列表采用统一格式,不管自定义函数包含多少个参数,但其相关存储过程均只包含一个输入参数和一个输出参数,输入参数用于向存储过程传递参数值,若自定义函数有多个参数,则此多个参数被组合在一起传递至输入参数,输出参数用于返回存储过程执行结果。自定义函数相关存储过程中的处理逻辑包含如下步骤:八)接收输入参数,将组合在一起的多个参数分解成单个参数出)对每个参数进行类型转换,转换成需要的数据类型;0执行自定义函数的处理逻辑山)将执行结果设置到输出参数并返回。
[0030]步骤3):在报表中使用自定义函数。此步骤在报表设计器中完成。在报表中使用自定义函数比较简单,按照其在步骤1中定义的格式单独使用或用在表达式中即可。
[0031]步骤4):识别报表中的自定义函数。此步骤在报表解析与创建引擎中完成。在报表表达式解析求值过程中,根据自定义函数命名的前缀命名规则,识别其中的自定义函数,提取出来准备解析。
[0032]步骤5):自定义函数参数列表中变量识别与替换。此步骤在报表解析与创建引擎中完成。步骤4提取出的自定义函数的参数列表中,可能包含变量、常量及其他函数。本步骤包括如下子步骤:对其中的变量及其他函数进行识别;求取参数中变量的实际值,对参数中的函数进行计算得到结果值;用参数变量的实际值替换其在参数列表中的出现,用参数中函数的执行结果值替换其在参数列表中的出现。经过上述步骤,自定义函数的参数列表中仅包含常量。
[0033]步骤6):准备参数并调用自定义函数关联存储过程。此步骤在报表解析与创建引擎中完成。包括如下步骤:准备自定义函数关联存储过程的输入参数。将步骤5中得到的只含常量的参数表去掉前后的括号,赋值给输入参数;设置自定义函数关联存储过程的输出参数;去掉自定义函数名的前缀” $^ ”,作为存储过程名;使用存储过程名及参数设置数据库访问组件,提交存储过程到数据库服务器执行。
[0034]步骤7):执行自定义函数关联存储过程并返回结果。此步骤在数据库管理系统中实现。
[0035]步骤8):接收自定义函数关联存储过程返回结果并应用到报表中。此步骤在报表解析与创建引擎中完成。
[0036]本发明的有益效果是:
[0037]本发明提供的一种报表系统自定义函数处理方案,其核心思想在于所有自定义函数均由数据库存储过程实现。各种商业数据库管理系统都提供了设计存储过程的机制,其中包含各种流程控制机制、大量格式处理函数、数学函数及日期函数等,同时可以直接操作301语句。存储过程还有一个优点就是一次编译后,以后重复执行无需再编译,执行效率较高,而用其他编程语言提交到数据库系统的3亂查询语句每次执行前都要执行编译操作。
[0038]本发明的优点包括:(1)创建自定义函数的技术门槛较低,报表用户只需要熟悉存储过程的设计就可以创建自定义函数,而各种数据库管理系统中创建存储过程的方法简单、语法接近。用户无需使用其他编程工具和编程语言。(2)自定义函数部署简单,只要在设计器中登记了自定义函数的名称和参数信息并提交及在数据库中创建了关联存储过程就完成了自定义函数的创建及部署。

【专利附图】

【附图说明】
[0039]当结合附图考虑时,通过参照下面的详细描述,能够更完整更好地理解本发明以及容易得知其中许多伴随的优点,但此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定,其中:
[0040]图1是本发明的报表系统自定义函数实现方法的总体流程框图;
[0041]图2是自定义函数关联存储过程内部处理流程的流程框图;
[0042]图3是自定义函数参数列表中变量识别与替换的流程框图;
[0043]图4是准备参数并调用自定义函数关联存储过程的流程框图。

【具体实施方式】
[0044]为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本发明作进一步详细的说明。
[0045]参考附图,下面以一个自定义函数的定义与解析的具体过程说明本发明的技术方案。
[0046]假定需要一个自定义函数将默认日期格式“08/25/2014”转换为中文日期格式,如“二零一四年八月二十五日”,根据附图1,将经过如下步骤’ 年丽月00日’)将当天日期格式化为中国日期格式。
[0047]步骤1):自定义函数及参数登记。登记自定义函数为?01~胍七),是自定义函数名,01(10211:6是默认格式的待转换日期,?01~胍1:是期望转换成的格式。
[0048]步骤2):自定义函数相关存储过程创建。在数据库管理系统中创建一个存储过程,形如'肅),是输入参数,是输出参数,均为字符串类型。存储过程4.^6中实现附图2的处理逻辑,对1!!?犯'孤18中用逗号分隔的旧的日期及期望格式两个参数值分解成两个字符串型的参数值,并分别转换成日期类型及结构体类型,然后对其进行处理并将执行结果设置到输出参数0此?犯'孤1返回。
[0049]步骤3):在报表中使用自定义函数。使用例子如
[0050]$81^1 ( “ 打印日期:,,,$$0^1)^6 ($1000^ 0,’ 年丽月 00 日’)),其中系统函数用于将两个字符串拼接成一个字符串,系统函数$1001^1()用于获取默认格式的当前日期,若当前日期是“08/25/2014”,则上述例子将得到字符串“打印日期:二零一四年八月二十五日”。自定义函数的参数个数应与步骤1中登记的相同。
[0051]步骤4):识别报表中的自定义函数。根据自定义函数前缀及括号匹配关系,可以很容易地识别( “打印日期:”,$$011110^6 ($1000…0,’ 年丽月00日’))中的自定义函数$$(^110^6 ($1000…0,’ 年11月00日’)。
[0052]步骤5):自定义函数参数列表中变量识别与替换。社6 ($1000^(),’年丽月00日’)中,其参数列表为“ $1000…0,’ 年11月00日’”,其中$1001^1()为系统函数,需要求值,假设求值得到结果:08/25/2014,用其替换 $100041()在社6 ($100041(),,年 11 月 00 日’)中的出现,得到$$011110^6( 48/25/2014,,1111^11^00 0,1至此,自定义函数的参数列表中仅包含常量。
[0053]步骤6):准备参数并调用自定义函数关联存储过程。包括如下步骤:1、自定义函数关联存储过程的输入参数值为“‘08/25/2014’,’ VV年11月00日’”。2、设置自定义函数关联存储过程的输出参数;3、以也⑷社6作为存储过程名;4、使用存储过程名及参数设置数据库访问组件,提交存储过程到数据库服务器执行。
[0054]步骤7):执行步骤6)中设置的存储过程并返回结果,此处返回结果为“二零一四年八月二十五日”。
[0055]步骤8):接收步骤7)中存储过程返回结果并应用到报表表达式中,即将步骤7)返回结果替换自定义函数$$(311110社6 ($1001^1(), ’ 年丽月00日’)在表达式
“打印日期:”,$$¢^110社6 ($1000^(), ’ V冗年11月00日’))中的出现,得到
“打印日期:”,“二零一四年八月二十五日”),至此,自定义函数解析结束。
[0056]本发明还可以有其它的替代技术方案,比如:
[0057]在步骤1)中,自定义函数的名字也可以不带特殊的前缀,则在报表引擎解析时可以先从系统数据库中获取所有系统函数及自定义函数的名字列表,再与报表中用到的函数进行比对。
[0058]在步骤2)中,自定义函数关联的存储过程名也可以保存到数据库中自定义函数的记录中,则存储过程名及其关联自定义函数名之间可以没有派生关系,其关联关系可以从自定义函数在数据库中的登记信息中找到。则在为自定义函数调用关联存储过程时要先从数据库中获取该自定义函数关联的存储过程名。此外,自定义函数的处理逻辑也可以用数据库系统中的用户自定义301函数实现,与使用存储过程不同在于,在存储过程中处理结果通过输出参数返回,而在用户自定义301函数中处理结果通过函数返回值返回。
[0059]以上实例的说明只是用于帮助理解本发明的核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
【权利要求】
1.一种报表系统自定义函数实现方法,其特征在于,包括以下步骤: 步骤I):自定义函数及参数登记;在报表设计器的功能界面上,报表设计者提供自定义函数的名字、参数数目及每个参数的参数名及其描述,然后提交到系统数据库;自定义函数用前缀$$识别; 步骤2):自定义函数相关存储过程创建;在数据库管理系统中,所有自定义函数的功能都由其相关的存储过程实现;自定义函数相关存储过程的名字为自定义函数名字去掉前缀$$而得到;所有自定义函数相关存储过程的参数列表采用统一格式;相关存储过程均只包含一个输入参数和一个输出参数,输入参数用于向存储过程传递参数值,若自定义函数有多个参数,则此多个参数被组合在一起传递至输入参数,输出参数用于返回存储过程执行结果; 步骤3):在报表中使用自定义函数;在报表设计器中,按照自定义函数在步骤I中定义的格式单独使用或用在表达式中; 步骤4):识别报表中的自定义函数;在报表表达式解析求值过程中,根据自定义函数命名的前缀命名规则,识别其中的自定义函数,提取出来准备解析; 步骤5):自定义函数参数列表中变量识别与替换;步骤4)提取出的自定义函数的参数列表中,对其中的变量及其它函数进行识别;求取参数中变量的实际值,对参数中的函数进行计算得到结果值;用参数变量的实际值替换其在参数列表中的出现,用参数中函数的执行结果值替换其在参数列表中的出现;经过上述步骤,自定义函数的参数列表中仅包含常量; 步骤6):准备参数并调用自定义函数关联存储过程;包括如下步骤: 准备自定义函数关联存储过程的输入参数,将步骤5)中得到的只含常量的参数表去掉前后的括号,赋值给输入参数; 设置自定义函数关联存储过程的输出参数; 去掉自定义函数名的前缀”$$”,作为存储过程名; 使用存储过程名及参数设置数据库访问组件,提交存储过程到数据库服务器执行; 步骤7):执行自定义函数关联存储过程并返回结果; 步骤8):接收自定义函数关联存储过程返回结果并应用到报表中。
2.根据权利要求1所述的一种报表系统自定义函数实现方法,其特征在于,步骤2)中,自定义函数相关存储过程中的处理逻辑包含如下步骤: A)接收输入参数,将组合在一起的多个参数分解成单个参数; B)对每个参数进行类型转换,转换成需要的数据类型; C)执行自定义函数的处理逻辑; D)将执行结果设置到输出参数并返回。
【文档编号】G06F9/44GK104461531SQ201410722935
【公开日】2015年3月25日 申请日期:2014年12月2日 优先权日:2014年12月2日
【发明者】聂作先, 王平阳, 张顺淼, 杨海燕 申请人:福建工程学院
网友询问留言 已有1条留言
  • 访客 来自[江苏省淮安市联通] 2019年01月09日 15:48
    看不懂
    0
1