查询引擎使用文档V3.X
- 格式:pdf
- 大小:3.39 MB
- 文档页数:50
用友NC二次开发平台—— 查询引擎用友NC平台技术部2005-06-14目录第一章前言 (1)1.产品的前身 (1)2.产品的需求背景 (1)第二章查询引擎的管理 (2)1.对象树管理 (2)1.1目录管理 (2)1.2对象管理 (3)1.3导入导出 (3)2.切换定义数据源 (4)第三章查询引擎的查询模型 (5)1.参数控制 (5)2.SQL设计 (7)2.1数据字典 (7)2.2向导设计 (8)2.3手工设计 (12)3.数据交叉 (13)3.1第一类(投影)交叉 (13)3.2第二类(旋转)交叉 (14)4.代码嵌入 (16)4.1SQL整理 (16)4.2数据加工 (18)4.3穿透规则 (22)5.查询浏览 (25)5.1查询执行与展现 (25)5.2数据导出 (25)5.3创建物化表 (25)第四章查询引擎的界面模型 (27)1.引用查询 (28)2.格式设计 (28)2.1控件管理 (29)2.2行列格式设计 (33)2.3预定义数据处理 (36)3.界面运行 (38)3.1界面初始化 (38)3.2数据处理 (39)3.3控件连动 (42)3.4报表打印 (43)3.5功能节点挂接 (43)附录 (45)1.查询引擎FAQ之参数篇 (45)参考文献 (47)第一章前言查询引擎的功能定位:一个面向高级实施人员和专业开发人员的查询建模产品,可以全面支持复杂查询的设计和个性化的报表展现。
1. 产品的前身查询引擎在功能流程和查询模型方面参考了自定义查询的理念,在界面设计方面汲取了Form Design的思路,同时融入了数据仓库的技术,并依赖于通用的NC数据字典DDC。
(1) 自定义查询:NC于2000年开始研发的一个面向中级实施人员和二次开发人员的查询报表工具,由查询管理中心、报表格式设计、报表浏览、报表权限控制和数据加工厂几个模块构成,此工具首次提出了基于数据字典来管理数据并建立查询对象的思路,能够提供比较丰富的查询分析、数据加工和报表展现功能。
(2) Form Design:NC于2003年开始研发的一种界面开发模式,定位于支持功能建模。
(3) 数据字典:一种管理数据库逻辑结构的机制,存在于物理数据库和用户接口之间。
NC于2002年开始研发数据字典,最开始只用于自定义查询,后来经过功能强化和逐步推广,成为现在的DDC(Data Dictionary Control)。
其功能包括数据库对象的管理与编辑、数据字典的解析生成等。
(4) 数据仓库:NC的一个独立产品,能够按照指定的入仓规则从多个业务数据库抽取数据,并通过入仓服务定期把数据加载到数据仓库。
2. 产品的需求背景(1) 复杂查询报表的需求:在实际的业务查询中,开发人员经常会遇到以下一些棘手的问题——复杂的SQL,从不同的查询条件得到完全不同的查询结果,查询结果的复合,业务逻辑代码和大量数据加工算法的介入,各种各样的数据交叉和数据处理手段等等;在展现格式方面,通常要求灵活、友好、可视化、个性化的设计界面,丰富的展现控件和统计图表,依据数据对单元格、列表头和行表头的格式进行设置,表单控件之间的连动等等。
这一切都对早期的查询报表工具提出了艰巨的要求。
(2) 二次开发的需求:随着NC对行业用户的拓展,由业务组程序员在通用软件中针对每个查询报表需求进行开发的方案已经变得不太现实,一线人员越来越频繁的面临来自用户的个性化报表实施压力。
实施团队迫切要求一个强大而且易用的二次开发工具,尽管功能的强大和易用往往存在着一些矛盾。
(3) 工具整合的需求:自定义查询在推出后,在实施中得到了一定的应用,但局限于出复杂程度不太高的查询报表。
IUFO是公司的传统报表产品,它更偏重于报表的管理方面,比如报表的发布、审核、校验等等。
数据仓库使查询的应用由单数据源拓展到了多数据源,并且提供定时同步业务数据的功能。
为了有效地实现资源共享,结合发挥各个工具的优势,NC决策层一直在推动相关产品的整合。
(4) 查询分析软件发展潮流的需求:近几年来,查询分析、数据挖掘、商业智能的研究不论在企业应用还是在学术领域都成为热点,ERP软件的数据建模和查询建模功能已经成为代表产品水平的重要指标。
第二章查询引擎的管理1. 对象树管理查询引擎的管理调度功能由主界面完成,主界面左侧为一棵对象树,树上挂有代表查询对象和界面对象的节点,右侧为显示当前选中对象基本属性的属性框。
图 2-1 管理调度主界面· 对象树(ObjectTree):对象树是一个支持层次管理的数据结构,它维护自身的加载、存储和节点的目录管理,每个节点的信息主体存储在数据库的一个BLOB字段中。
对象树上的节点通常分为目录(Folder)和对象两类,并支持快速定位(在树获得焦点时用ctrl-f快捷键可弹出查找对话框,支持按编码或名称来模糊查找)。
· 属性框(ObjectInspector):一个自动显示对象的属性和取值的控件,取值部分会根据属性的数据类型采用不同的渲染器来展示,不同的编辑器来编辑。
1.1目录管理(1) 增加/删除/修改:在根节点或目录节点之下可以增加目录,删除目录时会删除目录下的所有对象。
目录的可修改属性为目录名称。
同一目录下的目录和对象不能重名。
(2) 复制/剪切/粘贴:在查询子树或格式子树下,可以将一个目录及其下属内容从某位置拷贝或移动到另一个位置。
1.2对象管理(1) 增加/删除/修改:在根节点或目录节点之下可以增加查询对象或者界面对象。
前者的属性为编码、名称和数据源,后者的属性为编码和名称,其中编码一经使用,就不再建议作任何修改,因为此编码可能被其它对象引用。
(2) 复制/剪切/粘贴:在查询或格式子树下,可以将一个对象从某位置拷贝或移动到另一个位置。
1.3导入导出(1) 导出:选中某个对象,可将其导出为XML文件,文件里描述了对象的所有信息;也可选中某个目录,将该目录下所有的子目录和对象都导出到指定位置(保持原有的目录级次)。
(2) 导入:在选中某个目录之后,导入功能可用。
导出的XML文件,可以导入到当前目录下。
此功能可用于对象的跨数据库复制。
导入时,我们可以选择单个文件,也可以选择一组文件或目录,导入后会保留原目录的级次结构。
需要注意的是:(a)在导出查询对象或界面对象时,需将其引用的查询对象一并导出才有意义;(b)导入不能违反对象主键及名称的唯一性约束。
下图显示了某查询对象所导出的XML文件。
图 2-2 导出XML文件2. 切换定义数据源· 多数据源运作机制:查询引擎支持这样的模式——NC业务在数据源A下运行,查询引擎的定义放在数据源B,通过引擎定义的查询可以到数据源C去执行。
注:只有数据仓库下的查询引擎有切换定义数据源和跨库查询的功能,客户化下的查询引擎只能查询当前账套数据源的数据。
图 2-3 切换定义数据源定义数据源(上面说的B)是指查询引擎自身的系统表所在的数据源,执行切换功能后,主界面上的对象树的内容会作相应改变。
图 2-4 切换定义数据源效果第三章查询引擎的查询模型查询模型的定义包括参数定义、SQL设计(含交叉定义)、SQL整理、数据加工、穿透规则等几部分,其中穿透规则描述的是本查询与外部查询的通信关系,剩余部分都用于描述查询内部的属性。
查询引擎的查询模型(数据模型)设计如下:查询设计态和运行态的基本流程如下图所示:图 3-1 查询模型流程1. 参数控制参数是查询模型中代表动态信息的元素。
在SQL设计、SQL整理和数据加工中,均可以根据参数的不同,对查询的定义和执行进行调整。
过滤型参数:如果创建某个参数的作用是根据其取值的不同改变WHERE条件的设置,则这类参数成为过滤型参数,这是最常用的参数功能(参数的应用可以参见附录)。
(1) 参数定义:用于定义本查询内部引用的所有参数,其中参数名要保证互不相同。
数据类型包括自由录入、枚举、参照几种,当类型为枚举时,枚举项为用“@”分隔的枚举值,或者是一个单字段的查询SQL;当类型为参照时,枚举项为基础参照名,或者是用尖括号括起的自定义参照的类名。
(2) 参数引用:参数可在SQL设计的筛选条件页签引用,也可在SQL整理或数据加工的嵌入代码中利用编码向导引用。
(3) 参数设置:运行态要求用户首先对参数进行设置,这与查询模板的使用类似。
当报表引用了多个查询时,参数将通过多页签设置,每个页签代表一个查询。
图 3-2 参数定义图 3-3 参数引用图 3-4 参数设置2. SQL设计SQL设计包括向导设计方式和手工设计方式,无论采用哪种,在完成设计时系统均会对SQL 进行合法性校验,如未通过校验则不能保存设计。
作为向导设计的一个重要组成环节,我们有必要先介绍一下数据字典。
2.1数据字典前面已经提到过,查询对象的属性中包含数据源信息,因此在设计查询的时候需要加载相应数据源的数据字典。
我们知道,NC的数据库以DDC作为数据字典,但非NC的数据库则没有DDC,此时,系统会根据执行数据源是NC、IUFO或其它数据库三种情况分别加载不同的数据字典,而且这一机制已经预留了扩展的接口,其目的就是可以面向各种类型的数据库执行取数功能。
NC数据字典提供了统一的数据建模平台,支持对各种数据库对象进行管理,维护这些物理对象的逻辑属性,并向外系统提供访问数据库逻辑信息的接口。
以查询引擎为例,查询对象的定义是基于数据字典进行的,而这份数据字典来自查询对象所指定的数据源。
由于多数报表的列与业务数据库的字段存在某种对应关系,因此数据字典的存在有助于提高查询定义的直观性和易用性。
图 3-5 NC数据字典NC数据字典通常在安装产品时候由系统生成,如果想自己为某些数据库对象生成字典,可以采用数据字典管理界面提供的导入方法。
导入方式包括三种(详细操作可参见《数据字典导入说明》):1、解析PDM文件(xml格式);2、解析NC标准建库脚本;3、提取数据库元数据;如果需要给非NC数据库(比如用户采用的第三方数据库)生成数据字典,可以利用PowerDesigner提供的逆向工程功能将库里的物理表生成PDM文件,修改其中表和字段的中文名称,然后以xml文件格式存储,再使用上述第一种方法导入。
查询引擎中用到的数据字典都以一棵对象树的形式存在,树节点包括目录、表、视图、字段、外键等信息,通过双击对象节点可以协助录入SQL语句的成分。
2.2向导设计向导设计参考典型SQL的构成规则,充分利用数据字典的功能,引导用户一步步完成SQL 的设计,因此是推荐使用的方式。
它由以下六个环节构成,其中最后一步“交叉属性”超出了SQL的涵义,我们在后面的专门章节中进行介绍。
(1) 表定义:即SQL语句中的from部分,可以利用数据字典选择库里的数据表,也可以选择查询对象,从而实现查询的集成(基于查询结果定义新的查询)。