CN103034553A - 一种报表设计器智能验证的算法、方法及装置 - Google Patents

一种报表设计器智能验证的算法、方法及装置 Download PDF

Info

Publication number
CN103034553A
CN103034553A CN2012105601689A CN201210560168A CN103034553A CN 103034553 A CN103034553 A CN 103034553A CN 2012105601689 A CN2012105601689 A CN 2012105601689A CN 201210560168 A CN201210560168 A CN 201210560168A CN 103034553 A CN103034553 A CN 103034553A
Authority
CN
China
Prior art keywords
expression formula
character
tabulation
authentication
cell
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2012105601689A
Other languages
English (en)
Other versions
CN103034553B (zh
Inventor
吕玲
庄莉
陈谋坤
林开雄
林立
陈书亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
XIAMEN GREAT POWER GEO INFORMATION TECHNOLOGY Co Ltd
State Grid Corp of China SGCC
State Grid Information and Telecommunication Co Ltd
Original Assignee
XIAMEN GREAT POWER GEO INFORMATION TECHNOLOGY Co Ltd
State Grid Corp of China SGCC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by XIAMEN GREAT POWER GEO INFORMATION TECHNOLOGY Co Ltd, State Grid Corp of China SGCC filed Critical XIAMEN GREAT POWER GEO INFORMATION TECHNOLOGY Co Ltd
Priority to CN201210560168.9A priority Critical patent/CN103034553B/zh
Publication of CN103034553A publication Critical patent/CN103034553A/zh
Application granted granted Critical
Publication of CN103034553B publication Critical patent/CN103034553B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)
  • Stored Programmes (AREA)

Abstract

本发明涉及一种报表设计器智能验证的算法、方法及装置,通过根据报表设计器模板规则中配置的数据源、函数参数、计算与显示表达式、统计图表达式、单元格交叉引用依赖等进行验证,在对报表设计器完成一项配置后进行自动触发验证是否达到验证算法的规范或要求;即当设计表达式或函数完成后,自动验证此次的设计表达式或其它函数等,不需要等到整张报表设计完成后点击保存时将所有的验证请求发送后台进行一个一个的验证,并造成不必要的后台服务压力,使之达到报表设计验证的快捷性与友好性。验证包括数据源验证、表达式验证、函数参数验证、单元格验证等多种验证。

Description

一种报表设计器智能验证的算法、方法及装置
技术领域
本发明涉及报表计算验证处理领域,尤其是指一种报表设计器智能验证的算法、方法及装置。
背景技术
报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施BI(商业智能)战略的基础。报表可以帮助企业访问与格式化数据,并把数据信息以可靠和安全的方式呈现给使用者。深入洞察企业运营状况,是企业发展的强大驱动力。
报表设计器是一套设计报表的可视化操作页面,通常提供向导和拖放等操作模式来提高开发效率。通过报表设计器能够快速的开发报表。报表设计器提供报表的所有配置以及验证等操作。
在报表设计器中,操作的基础对象是单元格。我们要设计出一张报表,通常需要在单元格上编写表达式,通过报表的解析引擎进行后台计算,最终在展现器中显示我们要的结果。和普通的表单一样,为减少报表计算的验证错误信息,同时对服务器后台运算产生不必要的压力,所以需要在提交或保存前对所填写的数据进行有效性验证。
在传统报表工具的验证算法中普遍存在以下几个问题:
1、触发报表的验证方式:传统报表在用户进行报表设计完成后点击保存后,再开始对报表的验证请求进行多个发送后台推送并进行验证,这种方式虽然能到达预期的结果,能对报表进行验证,可是在效率上却是一个大问题;如果每次都从前端返回多个验证到后台进行验证的时候,会对后台服务造成不小的运算压力;如:在同一个时间点多人都进行报表配置后点击保存时,后台服务对多人点击保存发送的多个请求同时进行运算,这时会对系统后台服务运算不间断的重复运行,使系统工作效率降低。所以我们认为一个优秀的报表设计器,无论在哪个环节都应该是能减少非法的后台请求,减轻服务器后台运行的压力,并及时快速的体现出所设计操作进行验证的结果。然而以上列举的传统报表这种触发式验证方式却恰恰相反,对提高用户的工作效率产生较大的影响。
2、多数据源报表验证的方法:在传统的报表中都存在无法对动态的、多数据源报表进行有效的验证;中国式的报表对数据的准确性与复杂性要求都很高;同时对数据的多源性也是千变万化,而在传统的报表中几乎都没有对报表数据的多源性进行验证;因此,我们认为一种好的验证方法,在符合报表的各种基本验证需求的同时,也需要对数据的准确性也能进行更好的校验处理,并能更高效更快捷的提高用户对数据源准确度的掌握。
3、表达式与函数验证方法:传统的报表对于表达式与函数的验证只能基于一些比较基本的方法进行验证;如:表达式是否为空、简单的统计函数等;传统报表表达式不能支持现在使用最多的JAVASCRIPT的运算符、单元格地址、数据集字段等验证;同时传统报表的函数验证也不支持数据集函数验证等;如:跨数据集函数名称前缀与参数验证等。
4、单元格验证方法:传统的报表的单元格验证,主要是对单元格的数据类型或单元格内的字符进行基本的验证,如:单元格数据类型是否为用户定制的整数型或者浮点数等;无法满足现代单元格由于很多共同点需要进行相互交叉引用与依赖关系功能,而在进行相互交叉引用时如果没有进行循环的验证,很容易导致单元格交叉引用依赖造成的死循环问题,在传统的报表中也很多不支持报表的单元格相互交叉引用循环验证;
5、验证提示结果展示:传统的报表验证在验证不通过时,所有的验证提示都是由弹出的提示框来进行结果的显示,这种方式在用户体验与友好性上效果不是很好,且在对各种配置验证问题定位上效率也不是很高;随着计算机信息化的高速发展,用户对验证问题提示的要求也越来越高,在形成验证的同时,对问题验证不通过而存在的问题进行快速定位并提示的要求也越来越普遍。
发明内容
本发明的目的在于克服了上述缺陷,提供一种报表设计器智能验证的算法、方法及装置。
本发明的目的是这样实现的:一种报表设计器智能验证的算法,它包括步骤,
S1)、表达式预处理,对表达式进行字符的清除、常量的替换及预验证;
S2)、表达式分解,将预处理后的表达式根据字符类型分解为多个子表达式;
S3)、表达式验证,对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息;
S4)、单元格引用验证,对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出验证错误信息,否则返回正确标识;
上述步骤中S1具体包括步骤,
S101)、表达式初判断,判断用户所输入的内容中是否有表达式字符,如果没有则直接按普通字符串处理;如果有则去掉上述表达式字符并继续步骤;
S102)、处理转义字符,根据表达式预处理的字符清除规则,去除转义字符;
S103)、替换字符常量,根据表达式预处理的常量替换规则,将所有的常量用0来代替;
S104):验证括号,判断括号是否成对出现,若是则继续步骤,否则输出验证错误信息;
上述步骤中S2具体包括,循环读取预处理后表达式的每个字符,对每个字符执行下述步骤S201到S204的判断并获取返回,并将该返回作为一个子表达式;
S201)、判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则继续步骤;
S202)、判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
S203)、判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回。
S204)、直接将字符累加到暂存列表;
上述步骤中S3具体包括步骤,
S301)、子表达式语法验证,包括:
若子表达式为运算符,则将运算符放入栈中;
若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为常量,则将其加入到队列中;
若子表达式为扩展格,判断子表达式字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
S302)、预处理后的表达式语法验证,对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,否则验证失败输出验证错误信息加入至错误信息列表中若是则验证通过,否则验证失败输出验证错误信息只错误信息列表中;
S303)、判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过继续步骤;
上述步骤中S4具体包括步骤,
S401)、清除单元格原有的依赖关系;
S402)、处理依赖,分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中;
S403)、遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断后继续步骤;
S404)、返回正确标识。
本发明还提供了一种报表设计器智能验证的方法,它包括,
A)、用户触发验证,当用户对单元格内容编辑完成时触发报表设计器智能验证算法的步骤;
B)、执行所述权利要求1-5任意一项所述报表设计器智能验证的算法的步骤;
C)、根据错误信息列表向用户进行验证错误信息和/或引用错误信息呈现的步骤。
上述步骤C中的呈现方式包括,所述呈现方式包括,对应错误信息列表中的验证错误信息进行弹出对话窗的方式显示,对应引用错误信息,将存在循环引用的两个单元格之间以图形方式标注提醒显示。
本发明另外再涉及一种报表设计器智能验证的装置,它包括,
表达式预处理模块,用于对表达式进行字符的清除、常量的替换及预验证;
表达式分解模块,用于将表达式预处理模块预处理后的表达式根据字符类型分解为多个子表达式;
表达式验证模块,用于对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息;
单元格引用验证模块,用于对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出验证错误信息,否则返回正确标识;
上述中,所述表达式预处理模块具体包括,
表达式初判断单元,用于判断用户所输入的内容中是否有表达式字符,如果没有则直接按普通字符串处理;如果有则去掉上述表达式字符后送到处理转义字符单元;
处理转义字符单元,用于根据表达式预处理的字符清除规则,去除转义字符;
替换字符常量单元,用于接收处理转义字符单元处理后的表达式并根据表达式预处理的常量替换规则,将所有的常量用0来代替;
验证括号单元,用于接收替换字符长脸单元处理后的表达式,并判断括号是否成对出现,若是转到表达式分解模块,否则输出验证错误信息。
上述中,所述表达式分解模块具体用于循环读取预处理后表达式的每个字符,对每个字符执行数字或字母或下划线判断单元、括号判断单元、运算符判断单元及字符累加单元的判断并获取返回,并将该返回作为一个子表达式,包括有,
数字或字母或下划线判断单元,用于判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则转到括号判断单元;
括号判断单元,用于判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
运算符判断单元,用于判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回。
字符累加单元,用于直接将字符累加到暂存列表;
上述中,所述表达式验证模块具体包括,
子表达式语法验证单元,用于执行下述处理,
若子表达式为运算符,则将运算符放入栈中;
若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为常量,则将其加入到队列中;
若子表达式为扩展格,判断子表达式字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
预处理后的表达式语法验证单元,用于待子表达式语法验证单元输出后对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,否则验证失败输出验证错误信息加入至错误信息列表中若是则验证通过,否则验证失败输出验证错误信息只错误信息列表中;
错误信息判断单元,用于待预处理后的表达式语法验证单元完成后,判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过继续。
上述中,所述单元格引用验证模块具体包括,
依赖关系清除单元,用于清除单元格原有的依赖关系;
处理依赖单元,用于在依赖关系清除单元清除后分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中;
循环引用判断单元,用于处理依赖单元执行后遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断转到反馈单元;
反馈单元,用于返回正确标识。
本发明的有益效果在于提供了一种报表设计器的智能验证算法、方法及装置,通过根据报表设计器模板规则中配置的数据源、函数参数、计算与显示表达式、统计图表达式、单元格交叉引用依赖等进行验证,在对报表设计器完成一项配置后进行自动触发验证是否达到验证算法的规范或要求;即当设计表达式或函数完成后,自动验证此次的设计表达式或其它函数等,不需要等到整张报表设计完成后点击保存时将所有的验证请求发送后台进行一个一个的验证,并造成不必要的后台服务压力,使之达到报表设计验证的快捷性与友好性。验证包括数据源验证、表达式验证、函数参数验证、单元格验证等多种验证。
附图说明
下面结合附图详述本发明的具体结构
图1为本发明的算法的整体流程示意图;
图2为本发明的算法的预处理部分的具体流程示意图;
图3为本发明的算法的分解表达式部分的具体流程示意图;
图4为本发明的算法的表达式验证部分的具体流程示意图;
图5为本发明的算法的单元格引用部分的具体流程示意图;
图6为本发明的验证方法的整体流程示意图;
图7为本发明的验证错误信息呈现示意图;
图8为本发明的引用错误信息呈现示意图。
具体实施方式
为详细说明本发明的技术内容、构造特征、所实现目的及效果,以下结合实施方式并配合附图详予说明。
在报表中计算表达式的准确性是非常重要,一个验证错误信息的计算表达式轻则产生验证错误信息的统计结果,重则直接造成计算引擎宕机,影响所有报表的计算。为此本专利提出了一种报表计算表达式智能验证算法,为动态报表中的表达式提供智能验证,通过减少验证错误信息的运算从而提高报表开发的效率。这种算法主要为解决动态报表表达式多样性以及多源性等的问题而引起的一系列诸如环路、数据无穷大等问题。因此引入报表验证机制。
本发明核心是通过一种报表设计器的智能验证算法来实现动态报表的高效验证,报表设计器的智能验证算法进行动态报表验证的过程主要分为表达式预处理、分解表达式、处理函数、表达式验证、单元格引用验证这几个步骤。
如图1所示为一种报表设计器智能验证的算法,它包括步骤:
S1)、表达式预处理,对表达式进行字符的清除、常量的替换及预验证。
本步骤主要解决表达式一些字符的清除,如\'和\″符号,因为这两对字符为单引号和双引号的转义符号,输出结果就是单引号和双引号,不影响计算;替换常量,将所有的常量用0来代替,因为表达在设计器中不参与计算,本验证只是模拟计算,所以忽略常量本身的值,统一使用0来替换;以及括号的判断,主要判断括号是否成对出现。当这部分出现问题的时候,则验证失败直接输出验证错误信息至错误信息列表中验证结束,这样就能提高验证的效率,具体参见图2包括的步骤:
S101)、表达式初判断,判断用户所输入的内容中(通常是内容的首位)是否有表达式字符(例如‘=’号),如果没有则直接按普通字符串处理;如果有说明是表达式,去掉上述表达式字符(如上述为‘=’号)并继续步骤;
S102)、处理转义字符,根据表达式预处理的字符清除规则,去除转义字符(例如“\′”和“\″”符号);
S103)、替换字符常量,根据表达式预处理的常量替换规则,将所有的常量用0来代替;
S104):验证括号,判断括号是否成对出现,若是则继续步骤,输出验证错误信息至错误信息列表中;
上述预处理环节中对表达式进行了初步的语法验证,去除了对运算逻辑不产生影响的运算符和操作数,可为报表验证过程解析表达式提高效率。
S2)、表达式分解,将预处理后的表达式根据字符类型分解为多个子表达式。
本步骤主要对单元格中字符串的字符逐个读取解析,通过读取表达式的括号,来判断表达式是否存在函数,以及运算符的解析,具体如图3,包括:
循环读取预处理后表达式的每个字符,对每个字符执行下述步骤S201到S204的判断并获取返回,并将该返回作为一个子表达式。以下所有返回将用于下一步判断是否是函数、运算符、数据集字段、扩展格、单元格引用。
S201)、判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则继续步骤。
这样可以加速循环,提高验证的运算效率;
S202)、判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
S203)、判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回。
S204)、直接将字符累加到暂存列表。
上述步骤的目的在于,在表达式验证前,将整个复杂的表达式拆分若干个简单的、单操作符的表达式。通过表达式分解,使每次验证变得格外简单明了,保证了验证结果的正确性。
S3)、表达式验证,对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息。参见图4,具体包括:
S301)、子表达式语法验证,包括:
1)、若子表达式为运算符,则将运算符放入栈中;
2)、若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
本步骤主要通过与系统定义的函数名及参数进行匹配,如果存在执行该函数的方法,如果不存在则给出验证错误信息。
递归方式验证,如对函数[=max(to_double(arg1))],处理方式为先处理to_double函数,接着处理max函数。常量就直接入队列,如='123456',进入队列也为123456。
3)、若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
4)、若子表达式为常量,则将其加入到队列中。
5)、若子表达式为扩展格,判断子表达式的字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
上述的扩展格是指一个子表达式字符串为单元格地址加上一对大括号的形式,例如A3{}代表的就是个A3的扩展格。
6)、若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
如[=A11],而实际工作区域只到A10,说明A11是验证错误信息的因此验证不通过。
借由前面进行了表达式的分解,所以在子表达式验证时,只需要根据子表达式的返回类型进行验证,返回验证结果即可。
S302)、预处理后的表达式语法验证,对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,若是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
S303)、判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过则继续步骤。
S4)、单元格引用验证,对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出引用错误信息,否则返回正确标识。具体如图5,
S401)、清除单元格原有的依赖关系。
由于上次验证已将验证信息保存在单元格依赖数组中,本次验证中所涉及到的单元格地址可能存在单元格依赖数组中,所以需要进行清除的操作来保证不进行重复的验证以及验证的结果的正确性。
S402)、处理依赖,分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中。
S403)、遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断后继续步骤。
上述判断方式为:从单元格引用列表第二个单元格地址开始,如果读取到的单元格地址在此之前出现过,那么判定此单元格存在循环引用。当出现循环引用时将停止验证,返回引用错误信息。
S404)、返回正确标识。
此步骤直接返回正确标识是因为如果验证结果出现了循环引用,那么在验证过程中已经返回了结果,并退出了循环。所以执行到此步骤时,说明验证通过,并未出来循环引用的情况。
上述步骤主要是在表达式语法验证通过后,对表达式进行单元格引用的验证。通过此次验证,解决了单元格交叉引用的可能,保证所填写的表达式能够顺利的运算和返回正确的结果。
综上可见,上述算法通过在预处理环节中就对表达式进行了初步的语法验证,去除了对运算逻辑不产生影响的运算符和操作数;在验证时,又将表达式分解成多个子表达式进行验证,为报表验证过程解析表达式提高了效率。此外,在表达式验证通过后,对表达式进行单元格引用的验证。通过此次验证,解决了单元格循环引用的问题,保证所填写的表达式能够顺利的运算和返回正确的结果。
参见图6,本发明还涉及一种报表设计器智能验证的方法,该方法结合上述算法,它包括步骤:
A)、用户触发验证,当用户对单元格内容编辑完成时触发报表设计器智能验证算法。
B)、执行上述报表设计器智能验证算法。
C)、根据错误信息列表向用户进行验证错误信息和/或引用错误信息呈现。
通过以上各环节的处理,将表达式进行解析与验证,及时的反馈给用户一个友好的展现提示,提高了用户对报表开发的准确度与执行效率。
所述呈现方式包括,对应错误信息列表中的验证错误信息进行弹出对话窗的方式显示,对应引用错误信息,将存在循环引用的两个单元格之间以图形方式(例如画红线提醒)标注提醒显示。
具体举例:
1)、对应表达式验证过程中出现验证错误信息,使用对话框(提示框)的方式,将涉及到的错误内容显示在设计器中。
所述验证错误信息包括有:出错的字符串及出错的原因。
如图7就是在表达式[=ds1.sel(name)+A3]于验证过程中会返回一个验证错误信息“ds1.sel:函数不存在”。
2)、对应表达式出现循环引用的引用错误信息,则在出现循环引用的两个单元格之间画出一条红色的直线。直线的起点为第一个单元格的中心,终点为第二个单元格的中心;若两个单元格不是相邻的,这条直线将跨越这两个单元格进行展现。
如图8就是当A1单元格的表达式为[=B3],B3单元格的表达式为[=A1],这两个配置在经过单元格引用验证后,被判定为出现了循环引用,返回的结果为在A1和B3这两个单元格之间:以A1单元格的中心为起点,B3单元格为终点,画出一条红色的直线;由于这两个单元格不是相邻的,所以A2单元格和B2单元格的部分区域也受验证结果的影响,显示一部分直线。
上述报表设计器的智能验证方法,通过在用户编辑完成单元格内容时就触发报表设计器智能验证算法,然后对验证过程的验证错误信息实时的呈现给客户,从而大大提高了报表的设计效率。
本发明还提供了一种报表设计器智能验证的装置,它包括:
表达式预处理模块,用于对表达式进行字符的清除、常量的替换及预验证;
表达式分解模块,用于将表达式预处理模块预处理后的表达式根据字符类型分解为多个子表达式;
表达式验证模块,用于对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息;
单元格引用验证模块,用于对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出验证错误信息,否则返回正确标识。
较佳的,上述表达式预处理模块包括:
表达式初判断单元,用于判断用户所输入的内容中是否有表达式字符,如果没有则直接按普通字符串处理;如果有则去掉上述表达式字符后送到处理转义字符单元;
处理转义字符单元,用于根据表达式预处理的字符清除规则,去除转义字符;
替换字符常量单元,用于接收处理转义字符单元处理后的表达式并根据表达式预处理的常量替换规则,将所有的常量用0来代替;
验证括号单元,用于接收替换字符长脸单元处理后的表达式,并判断括号是否成对出现,若是转到表达式分解模块,否则输出验证错误信息。
所述表达式分解模块具体用于循环读取预处理后表达式的每个字符,对每个字符执行数字或字母或下划线判断单元、括号判断单元、运算符判断单元及字符累加单元的判断并获取返回,并将该返回作为一个子表达式,包括有,
数字或字母或下划线判断单元,用于判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则转到括号判断单元;
括号判断单元,用于判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
运算符判断单元,用于判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回。
字符累加单元,用于直接将字符累加到暂存列表;
较佳的,上述表达式验证模块包括:
子表达式语法验证单元,用于执行下述处理,
若子表达式为运算符,则将运算符放入栈中;
若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为常量,则将其加入到队列中;
若子表达式为扩展格,判断子表达式字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
预处理后的表达式语法验证单元,用于待子表达式语法验证单元输出后对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,否则验证失败输出验证错误信息加入至错误信息列表中若是则验证通过,否则验证失败输出验证错误信息只错误信息列表中;
错误信息判断单元,用于待预处理后的表达式语法验证单元完成后,判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过继续。
较佳的,上述单元格引用验证模块包括:
依赖关系清除单元,用于清除单元格原有的依赖关系;
处理依赖单元,用于在依赖关系清除单元清除后分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中;
循环引用判断单元,用于处理依赖单元执行后遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断转到反馈单元;
反馈单元,用于返回正确标识。
综上所述,本发明方案实在结合智能动态报表所需所有表达式与对目前主流的动态报表验证规则进行了研究下设计的一种报表设计器中智能验证的算法。采用这种算法不仅增强了报表设计器工具的健壮性,而且可以确保生成报表规则文件准确性。不但能减轻对服务器后台运行产生不必要的压力,而且能给用户提供一个智能的验证验证错误信息的方法,使用户快捷高效的编写各种复杂计算表达式与配置信息等,而不用担心所编写的表达式是否存在验证错误信息,同时在验证提示的友好性上也采用了各种友好性提示。如:在进行设计报表单元格相互交叉依赖与引用时,如果单元格存在死循环问题,本发明技术中的报表设计器采用直线对相互交叉依赖引用的单元格进行用直线连接,快速定位相互引用依赖的单元格进行提示存在环路问题。
具体实施例:
A)、用户在单元格内输入表达式:“=3++′GOO\′GLE’+A4+ds1.select(name)”,输入完毕后,触发报表设计器智能验证算法动态对客户完成的输入进行验证。
B)、单元格表达式验证算法
S1)、表达式预处理。
S101)、表达式初判断,用户输入的内容首位有“=”号,说明是表达式。去掉“=”号,结果为“3++'GOO\′GLE’+A4+ds1.select(name)”;
S102)、处理转义字符,根据表达式预处理的字符清除规则,去除转义字符\'和\",返回“3++′GOOGLE’+A4+ds1.select(name)”;
S103)、替换字符常量,根据表达式预处理的常量替换规则,将所有的常量用0来代替,返回“0++0+A4+ds1.select(name)”;
S104)、验证括号,ds1.select()函数后面的括号成对出现,预处理通过,返回“0++0+A4+ds1.select(name)”;
S2)、表达式分解,根据上述返回的表达式“0++0+A4+ds1.select(name)”,循环读表达式的每个字符,对每个字符执行步骤S201到S204的判断并获取返回,并将该返回作为一个子表达式从而进行分解。
经过分解步骤后,最终在表达式中数字“0”遇到两次,“A4”遇到一次,这三个字符或字符串都直接返回,分别作为一个子表达式;
在表达式中循环到ds1.select后的“(”时,继续读取下个字符,直到读到右括号“)”时,返回ds1.select(name);
表达式中运算符读取返回一个“++”和两个“+”号。
S3)、进行子表达式的语法验证。
S301)、子表达式语法验证,根据返回的子表达式进行验证:
1)、运算符:按子表达式的返回顺序将一个“++”和两个“+”依次存放到栈中。
2)、函数:子表达式中返回一个函数“ds1.select(name)”,根据小数点“.”取出函数名“select”,判断其是否与系统配置文件里所定义的相同,若函数未找到直接返回验证失败加入错误信息列表中。否则判断函数参数“name”是否是数据集“ds1”中的一个字段如果出错也直接返回验证失败加入错误信息列表中,正确则继续循环判断下一个子表达式
3)、数据集:根据小数点“.”取出数据集名称“ds1”,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
4)、返回的子表达式的两个常量“0”直接加入到队列中。
5)、对于扩展格,本例子中返回的子表达式中无扩展格。
6)、单元格,读取到A4单元格,判断A4单元格是否存在,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
403)、如果之前的验证都能通过,根据后缀表达式模拟运算,对整个预处理后表达式进行运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,若是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中。
404)、判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过则继续步骤。
S4)、单元格引用验证
本例中,用户的配置为:A1单元格的表达式为[=B3],B3单元格的表达式为[=A1]。
S401)、清空单元格原有的依赖关系列表。
S402)、处理依赖。分别将引用到的单元格存入依赖列表,从A1单元格开始,A1单元格引用B3单元格,所以分别记录A1和B3;再从A1的引用单元格B3开始,B3单元格引用的是A1单元格,所以再将A1记录到依赖关系列表;没有出现第三个单元格,依赖处理结束。结果为:A1,B3,A1。
S403)、判断是否出现循环引用。第二个值B3不等于第一个值A1,继续判断第三个值与第二值、第一个值是否相等,得出的结果是第三个值A1等于第一个值A1,所以这里就出现了单元格的循环引用。因为出现循环是在第三个值A1处得出的,所以找到引用A1的单元格B3,在第一个值A1和B3之间画出一条红线,用于表示这两个单元格出现了单元格循环引用。终止后面的验证。
C)、根据错误信息列表向用户进行引用错误信息呈现。

Claims (9)

1.一种报表设计器智能验证的算法,其特征在于:它包括步骤,
S1)、表达式预处理,对表达式进行字符的清除、常量的替换及预验证;
S2)、表达式分解,将预处理后的表达式根据字符类型分解为多个子表达式;
S3)、表达式验证,对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息;
S4)、单元格引用验证,对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出验证错误信息,否则返回正确标识。
2.如权利要求1所述的报表设计器智能验证的算法,其特征在于:所述步骤S1具体包括步骤,
S101)、表达式初判断,判断用户所输入的内容中是否有表达式字符,如果没有则直接按普通字符串处理;如果有则去掉上述表达式字符并继续步骤;
S102)、处理转义字符,根据表达式预处理的字符清除规则,去除转义字符;
S103)、替换字符常量,根据表达式预处理的常量替换规则,将所有的常量用0来代替;
S104):验证括号,判断括号是否成对出现,若是则继续步骤,否则输出验证错误信息。
3.如权利要求1所述的报表设计器智能验证的算法,其特征在于:所述步骤S2具体包括,循环读取预处理后表达式的每个字符,对每个字符执行下述步骤S201到S204的判断并获取返回,并将该返回作为一个子表达式;
S201)、判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则继续步骤;
S202)、判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
S203)、判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回;
S204)、直接将字符累加到暂存列表。
4.如权利要求1所述的报表设计器智能验证的算法,其特征在于:所述步骤S3具体包括步骤,
S301)、子表达式语法验证,包括:
若子表达式为运算符,则将运算符放入栈中;
若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为常量,则将其加入到队列中;
若子表达式为扩展格,判断子表达式字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
S302)、预处理后的表达式语法验证,对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,否则验证失败输出验证错误信息加入至错误信息列表中若是则验证通过,否则验证失败输出验证错误信息只错误信息列表中;
S303)、判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过继续步骤。
5.如权利要求1所述的报表设计器智能验证的算法,其特征在于:所述步骤S4具体包括步骤,
S401)、清除单元格原有的依赖关系;
S402)、处理依赖,分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中;
S403)、遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断后继续步骤;
S404)、返回正确标识。
6.一种报表设计器智能验证的方法,其特征在于:它包括,
A)、用户触发验证,当用户对单元格内容编辑完成时触发报表设计器智能验证算法的步骤;
B)、执行所述权利要求1-5任意一项所述报表设计器智能验证的算法的步骤;
C)、根据错误信息列表向用户进行验证错误信息和/或引用错误信息呈现的步骤。
7.如权利要求6所述的报表设计器智能验证的方法,其特征在于:所述步骤C的呈现方式包括,所述呈现方式包括,对应错误信息列表中的验证错误信息进行弹出对话窗的方式显示,对应引用错误信息,将存在循环引用的两个单元格之间以图形方式标注提醒显示。
8.一种报表设计器智能验证的装置,其特征在于:它包括,
表达式预处理模块,用于对表达式进行字符的清除、常量的替换及预验证;
表达式分解模块,用于将表达式预处理模块预处理后的表达式根据字符类型分解为多个子表达式;
表达式验证模块,用于对分解后个子表达式及预处理后的表达式分别进行语法验证,对应验证失败输出验证错误信息;
单元格引用验证模块,用于对单元格的依赖关系进行验证,执行包括通过循环判断单元格的引用关系是否存在循环引用,若存在则输出验证错误信息,否则返回正确标识。
9.如权利要求1所述的报表设计器智能验证的算法,其特征在于:
所述表达式预处理模块具体包括,
表达式初判断单元,用于判断用户所输入的内容中是否有表达式字符,如果没有则直接按普通字符串处理;如果有则去掉上述表达式字符后送到处理转义字符单元;
处理转义字符单元,用于根据表达式预处理的字符清除规则,去除转义字符;
替换字符常量单元,用于接收处理转义字符单元处理后的表达式并根据表达式预处理的常量替换规则,将所有的常量用0来代替;
验证括号单元,用于接收替换字符长脸单元处理后的表达式,并判断括号是否成对出现,若是转到表达式分解模块,否则输出验证错误信息;
所述表达式分解模块具体用于循环读取预处理后表达式的每个字符,对每个字符执行数字或字母或下划线判断单元、括号判断单元、运算符判断单元及字符累加单元的判断并获取返回,并将该返回作为一个子表达式,包括有,
数字或字母或下划线判断单元,用于判断是否为数字或字母或下划线,若是则将字符累加到暂存列表,继续读取下一个字符并循环本判断,否则转到括号判断单元;
括号判断单元,用于判断字符是否为“(”,否则继续步骤,是则进一步判断其是否为当前暂存列表中字符串的首字符,是则将“(”作为运算符返回,否则将“(”累加到暂存列表,再依次读取“(”后的字符累加到暂存列表,直至读取到“)”后将“)”累加到暂存列表停止读取,将暂存列表中字符串返回;
运算符判断单元,用于判断是否为运算符,是则将当前运算符累加到暂存列表,继续循环读取下一个字符并循环本判断,否则将暂存列表的字符串作为运算符返回;
字符累加单元,用于直接将字符累加到暂存列表;
所述表达式验证模块具体包括,
子表达式语法验证单元,用于执行下述处理,
若子表达式为运算符,则将运算符放入栈中;
若子表达式为函数,判断“(”与“)”前的字符串是否为函数名,“(”与“)”间的为参数,解析参数,以递归方式验证参数是否有效,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为数据集,根据模板数据集定义验证子表达式的字符串是否属于数据集,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为常量,则将其加入到队列中;
若子表达式为扩展格,判断子表达式字符串是否符合扩展格格式,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
若子表达式为单元格,判断是否含有此单元格,是则验证通过,否则验证失败输出验证错误信息加入至错误信息列表中;
预处理后的表达式语法验证单元,用于待子表达式语法验证单元输出后对预处理后的表达式根据后缀表达式方式模拟运算,对队列和栈中的所有对象经过运算符计算都为0,最后判断是否结果只有一个,并不存在其他对象或运算符,否则验证失败输出验证错误信息加入至错误信息列表中若是则验证通过,否则验证失败输出验证错误信息只错误信息列表中;
错误信息判断单元,用于待预处理后的表达式语法验证单元完成后,判断错误信息列表是否为空,否则输出错误信息列表的验证错误信息,是则验证通过继续;
所述单元格引用验证模块具体包括,
依赖关系清除单元,用于清除单元格原有的依赖关系;
处理依赖单元,用于在依赖关系清除单元清除后分别读取出当前单元格的表达式和主格的依赖,记录到依赖列表中;
循环引用判断单元,用于处理依赖单元执行后遍历判断单元格是否存在循环引用,是则停止验证输出引用错误信息,否则对下一个单元格执行本步骤判断,直至所有单元格完成判断转到反馈单元;
反馈单元,用于返回正确标识。
CN201210560168.9A 2012-12-20 2012-12-20 一种报表设计器智能验证的算法、方法及装置 Active CN103034553B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210560168.9A CN103034553B (zh) 2012-12-20 2012-12-20 一种报表设计器智能验证的算法、方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210560168.9A CN103034553B (zh) 2012-12-20 2012-12-20 一种报表设计器智能验证的算法、方法及装置

Publications (2)

Publication Number Publication Date
CN103034553A true CN103034553A (zh) 2013-04-10
CN103034553B CN103034553B (zh) 2015-07-15

Family

ID=48021476

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210560168.9A Active CN103034553B (zh) 2012-12-20 2012-12-20 一种报表设计器智能验证的算法、方法及装置

Country Status (1)

Country Link
CN (1) CN103034553B (zh)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105138504A (zh) * 2015-09-07 2015-12-09 北京恒华伟业科技股份有限公司 一种报表生成方法及报表引擎
CN106570004A (zh) * 2015-10-08 2017-04-19 北京国双科技有限公司 一种数据管理方法及装置
CN109446507A (zh) * 2018-11-13 2019-03-08 浙江中智达科技有限公司 一种报表的构建方法及装置
CN110766433A (zh) * 2018-07-27 2020-02-07 北京国双科技有限公司 指标运算表达式的验证方法及装置
CN111126015A (zh) * 2019-11-25 2020-05-08 金蝶软件(中国)有限公司 一种报表编制方法、设备及计算机程序产品
CN112765969A (zh) * 2021-01-11 2021-05-07 成都深思科技有限公司 一种高效实时的表达式语法验证方法及系统
CN112765969B (zh) * 2021-01-11 2024-07-02 成都锋卫科技有限公司 一种高效实时的表达式语法验证方法及系统

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748884A (en) * 1996-06-13 1998-05-05 Mci Corporation Autonotification system for notifying recipients of detected events in a network environment
CN101021839A (zh) * 2007-03-23 2007-08-22 北京润乾信息系统技术有限公司 非线性报表生成方法
CN102214242A (zh) * 2011-07-06 2011-10-12 杨海 一种会计报表的处理方法及处理系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5748884A (en) * 1996-06-13 1998-05-05 Mci Corporation Autonotification system for notifying recipients of detected events in a network environment
CN101021839A (zh) * 2007-03-23 2007-08-22 北京润乾信息系统技术有限公司 非线性报表生成方法
CN102214242A (zh) * 2011-07-06 2011-10-12 杨海 一种会计报表的处理方法及处理系统

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105138504A (zh) * 2015-09-07 2015-12-09 北京恒华伟业科技股份有限公司 一种报表生成方法及报表引擎
CN106570004A (zh) * 2015-10-08 2017-04-19 北京国双科技有限公司 一种数据管理方法及装置
CN106570004B (zh) * 2015-10-08 2021-03-30 北京国双科技有限公司 一种数据管理方法及装置
CN110766433A (zh) * 2018-07-27 2020-02-07 北京国双科技有限公司 指标运算表达式的验证方法及装置
CN109446507A (zh) * 2018-11-13 2019-03-08 浙江中智达科技有限公司 一种报表的构建方法及装置
CN111126015A (zh) * 2019-11-25 2020-05-08 金蝶软件(中国)有限公司 一种报表编制方法、设备及计算机程序产品
CN111126015B (zh) * 2019-11-25 2023-12-26 金蝶软件(中国)有限公司 一种报表编制方法、设备
CN112765969A (zh) * 2021-01-11 2021-05-07 成都深思科技有限公司 一种高效实时的表达式语法验证方法及系统
CN112765969B (zh) * 2021-01-11 2024-07-02 成都锋卫科技有限公司 一种高效实时的表达式语法验证方法及系统

Also Published As

Publication number Publication date
CN103034553B (zh) 2015-07-15

Similar Documents

Publication Publication Date Title
EP3674914A1 (en) Multi-party data joint query method, device, server and storage medium
Sun et al. Model checking CSP revisited: Introducing a process analysis toolkit
CN103034553B (zh) 一种报表设计器智能验证的算法、方法及装置
US9916286B2 (en) Reformatting multiple paragraphs of text using the formatting of a sample object by creating multiple candidate combinations and selecting a closest match
CN103577551A (zh) 一种数据批量提交到数据库的方法和装置
CN102591654A (zh) 一种基于ssh架构的代码生成器及方法
CN110941598A (zh) 一种数据去重方法、装置、终端及存储介质
CN106484699B (zh) 数据库查询字段的生成方法及装置
CN102193993A (zh) 用于确定字符串信息间相似度信息的方法、装置和设备
US11375376B2 (en) Method, apparatus, device, and medium for verifying vehicle information
CN109918627A (zh) 文本生成方法、装置、电子设备及存储介质
CN108694108B (zh) 一种iOS崩溃数据分类与统计的方法和装置
US20150261505A1 (en) Method and system for generating stateflow models from software requirements
CN110688121A (zh) 代码补全方法、装置、计算机装置及存储介质
CN112528013A (zh) 文本摘要提取方法、装置、电子设备及存储介质
CN101201833A (zh) Pdf文档数据填充系统及方法
CN111078094A (zh) 分布式机器学习可视化装置
CN107562808B (zh) 一种异构双链自动化数据的验证方法
CN105022667A (zh) 一种基于嵌入式浏览器css引擎并行化方法
CN106874243B (zh) 基于字符串的公式处理方法及装置
CN103136166B (zh) 字体确定方法和设备
Bowen Formal specification in Z as a design and documentation tool
CN108132783A (zh) 一种Web App的配置方法及装置
Abdulla et al. Analysis of message passing programs using SMT-solvers
CN113792232B (zh) 页面特征计算方法、装置、电子设备、介质及程序产品

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
CB03 Change of inventor or designer information

Inventor after: Lv Ling

Inventor after: Zhuang Li

Inventor after: Chen Moukun

Inventor after: Lin Kaixiong

Inventor after: Lin Li

Inventor after: Chen Shuliang

Inventor after: Huang Wensi

Inventor before: Lv Ling

Inventor before: Zhuang Li

Inventor before: Chen Moukun

Inventor before: Lin Kaixiong

Inventor before: Lin Li

Inventor before: Chen Shuliang

COR Change of bibliographic data
TR01 Transfer of patent right

Effective date of registration: 20160712

Address after: 361000 Fujian province Xiamen software park two sunrise Road No. 28 404-406

Patentee after: Xiamen Great Power Geo Information Technology Company Limited

Patentee after: State Grid Corporation of China

Patentee after: State Grid Inforamtion & Telecommunication Great Power Science and Technology Co., Ltd.

Address before: 361000 Fujian province Xiamen software park two sunrise Road No. 28 404-406

Patentee before: Xiamen Great Power Geo Information Technology Company Limited

Patentee before: State Grid Corporation of China