《用友NC V5-查询引擎技术红皮书(NC-UAP 5.0)》由会员分享,可在线阅读,更多相关《用友NC V5-查询引擎技术红皮书(NC-UAP 5.0)(148页珍藏版)》请在金锄头文库上搜索。
1、 查询引擎技术红皮书 NC-UAP 5.0 用友 NC-UAP 2010-07-28 目 录 第一章第一章 1 前言前言 1. .1 背景 2. .2 入门 3. .8 小结 第二章第二章 9 对象管理对象管理 1. .9 对象树 1.1 .10 对象编辑 1.2 .10 对象导入导出 2. .11 数据源 3. .14 首选项 4. .15 资源权限 第三章第三章 16 查询模型查询模型 1. .17 参数控制 2. .19 SQL设计 2.1 .19 数据字典 2.2 .20 向导设计 2.3 .25 手工设计 3. .27 数据交叉 3.1 .28 投影交叉 3.2 .31 旋转交叉 4
2、. .37 代码嵌入 4.1 37 SQL整理 4.2 .39 数据加工 4.3 .43 穿透规则 5. .49 查询执行 6. .51 查询集成 6.1 .51 复合查询 6.2 .52 物化查询 6.3 .54 合并查询 7. .54 数据权限 第四章第四章 56 格式模型格式模型 1. .57 引用查询 2. .58 格式设计 2.1 .58 控件管理 2.2 .66 属性绑定 第 2 页 第 3 页 2.3 .68 行列格式设计 2.4 .71 预定义数据处理 3. .78 报表浏览 3.1 .78 界面初始化 3.2 .80 数据处理 3.3 .84 控件连动 3.4 .85 报表打
3、印 第五章第五章 88 报表发布报表发布 1. .88 发布为功能节点 1.1 手动挂接88 1.2 向导发布89 2. .91 轻量化报表展现 第六章第六章 96 插件开发插件开发 1 .96 生成插件 2 .102 设计插件 3 .102 管理插件 4 .103 开发小结 第七章第七章 104 查询引擎查询引擎V5 新特性新特性 1. 104 V5.0 新特性 2. 104 V5.01 功能变更清单 3. 104 V5.011 功能变更清单 4. 105 V5.02 新增功能描述 4.1 .105 参数重构 4.2 .109 分页技术 4.3 112 SQL代码辅助器 4.4 .113 数
4、据字典级别权限控制 5. 116 V5.02 功能变更清单 附录附录.118 1. .118 查询引擎FAQ之参数篇 2. .119 交叉表的使用样例 3. .125 查询与格式对象安装盘预置方案 4. .125 查询引擎报表联查业务节点应用方案 5. .131 查询引擎与三大模板集成方案 6. .139 基于QE底层的查询个性化设计方案 7. 144 个性化控制类(JAVADOC) 第一章第一章 前言 前言 查询引擎(Query Engine,简称 QE)的功能定位是,一个面向高级实施人员和专业开发人 员的查询建模产品,可以全面支持复杂查询的设计和个性化的报表展现。 1. 背景背景 查询引擎
5、在功能流程和查询模型方面参考了其前身产品“自定义查询”的理念,在界面设计 方面汲取了 Form Design 的思路,同时融入了 DW 的技术,并依赖于通用的 NC 数据字典。 (1) 自定义查询:NC 于 2000 年开始研发的一个面向中级实施人员和二次开发人员的查 询报表工具,由查询管理中心、报表格式设计、报表浏览、报表权限控制和数据加 工厂几个模块构成,此工具首次提出了基于数据字典来管理数据并建立查询对象的 思路,能够提供比较丰富的查询分析、数据加工和报表展现功能。 (2) Form Design:NC 于 2003 年开始研发的一种界面开发模式,定位于支持功能建模。 (3) 数据字典:
6、一种管理数据库逻辑结构的机制,存在于物理数据库和用户接口之间。 NC 于 2002 年开始研发数据字典,最开始只用于自定义查询,后来经过功能强化和 逐步推广,成为现在的 DDC(Data Dictionary Control) 。其功能包括数据库对象的管 理与编辑、数据字典的解析生成等。 (4) 数据仓库:NC 的一个独立产品,能够按照指定的入仓规则从多个业务数据库抽取 数据,并通过入仓服务定期把数据加载到数据仓库。 产品的需求背景如下所述。 (1) 复杂查询报表的需求:在实际的业务查询中,开发人员经常会遇到以下一些棘手的 问题复杂的 SQL,从不同的查询条件得到完全不同的查询结果,查询结果的
7、复 合,业务逻辑代码和大量数据加工算法的介入,各种各样的数据交叉和数据处理手 段等等;在展现格式方面,通常要求灵活、友好、可视化、个性化的设计界面,丰 富的展现控件和统计图表,依据数据对单元格、列表头和行表头的格式进行设置, 表单控件之间的连动等等。这一切都对早期的查询报表工具提出了艰巨的要求。 (2) 二次开发的需求:随着 NC 对行业用户的拓展,由业务组程序员在通用软件中针对 每个查询报表需求进行开发的方案已经变得不太现实,一线人员越来越频繁的面临 来自用户的个性化报表实施压力。实施团队迫切要求一个强大而且易用的二次开发 工具,尽管功能的强大和易用往往存在着一些矛盾。 (3) 工具整合的需
8、求:自定义查询在推出后,在实施中得到了一定的应用,但局限于出 复杂程度不太高的查询报表。 IUFO 是公司的传统报表产品, 它更偏重于报表的管理 方面,比如报表的发布、审核、校验等等。数据仓库使查询的应用由单数据源拓展 到了多数据源,并且提供定时同步业务数据的功能。为了有效地实现资源共享,结 合发挥各个工具的优势,NC 决策层一直在推动相关产品的整合。 (4) 查询分析软件发展潮流的需求:近几年来,查询分析、数据挖掘、商业智能的研究 不论在企业应用还是在学术领域都成为热点,ERP 软件的数据建模和查询建模功能 已经成为代表产品水平的重要指标。 第 1 页 2. 入门入门 现在让我们来看一个最基
9、本的查询样例,作为入门,我们知道在任何 ERP 系统中都存在公 司和用户的概念,下面我们做一个查询某公司下用户的查询。 1. 进入客户化自定义查询查询引擎管理界面 图 一-1 2. 在“查询设计”树下新建一个目录, “jl 测试用例” ,并在这个目录下面创建一个查询对 象用户查询。 第 2 页 图 一-2 3. 选择参数定义,这里我们定义一个名为 corp,显示名为“公司”的参数,注意这里的数 据类型选择编码参照, 枚举项中选择这个编码参照的类型, 我们将根据这个参数选取的 值来确定待选公司,并且在查询中根据这个参数选取的值来进行结果筛选。 图 一-3 4. 制作查询定义,制作一个查询定义的具
10、体流程实际上就是为了生成一条 SQL 语句,查 询数据源去获取数据,但是这个生成 SQL 语句的过程被我们用图形化界面代替了,用 户只需要了解基本的 SQL 规则就可以了,无需亲自手动去写纷繁复杂的 SQL 语句,同 第 3 页 图 一-4 用户可以通过增加表来增加数据字典中的数据表, 也可以点击临时表引用前面做好的查询定 义对象, 引用查询定义对象相当于设计了一个复合查询, 关于复合查询的定义参见第二章第 六节查询集成。这里我们选择增加表来增加一个 sm_user 表,这张表里面存储的是 NC 系统 的用户信息。 图 一-5 在选择字段页签下选择“用户名”等字段,这里的字段表达式可以是某表的
11、字段,也可以是 字段的运算或者函数处理表达式,例如:len(sm_user.user_name),就是代表 user_name 这个 字段的字符串长度。显示名可以是用户自定义的字符串,将来显示在报表的列表头区域。 第 4 页 图 一-6 前面我们提到这个查询必须按照公司为条件,过滤查询出来的用户,实际上就是为 SQL 语 句生成一个 where 条件,我们支持两种条件,固定和待定,顾名思义固定条件写好之后就不 能变化,而待定条件是跟参数设置相关的,可以根据用户输入参数变化。我们在这里选取待 定条件, 用户表的公司编码字段等于前面我们设置过的 corp。 关于查询定义的设计后面的章 节将有更详细
12、的论述,这里只介绍最基本的功能。 5. 制作格式设计 第 5 页 图 一-7 新建格式设计文件夹以及对象的方式与新建查询对象的方法一样, 这里略去不讲。 生成新的 格式设计对象之后可点菜单中的界面模型引用查询, 来绑定我们刚才做好的查询设计对象 “用户查询”。 图 一-8 选取刚才做好的查询之后我们在点击界面模型格式设计, 这里可以选取我们预置的几种界 面模型之一,例如这张表我们选取表头+表体格式。 图 一-9 最后点菜单中的浏览,让我们浏览一下制作出的第一张报表, 第 6 页 图 一-10 点浏览之后我们会看到一个选择参数的对话框, 在这个参数对话框中我们可以设置自己的参 数值,比如我们选取
13、 sunny_corp 这个公司,点确定,则可以浏览这个公司下的所有用户, 如下图。 图 一-11 选择表头区域的公司参照, 我们可以浏览不同公司下的用户。 至此一个最简单的自定义查询 已经制作完毕,我们可以将做好的查询作为独立节点发布到 NC 系统下供用户使用。 第 7 页 3. 小结小结 在本章中我们介绍了查询引擎的发展历史以及产品的需求背景, 通过一个入门样例, 让用户 初步了解了查询引擎的基本功能, 在后面的章节中我们将详细介绍查询引擎的各项功能, 并 通过一些样例使得用户能够使用本产品进行快速便捷的二次开发。 下图是对查询引擎开发流程的一个示意: 图 一-12 查询建模体系 第 8
14、页 第二章第二章 对象管理 对象管理 1. 对象树对象树 查询引擎的管理调度功能由主界面完成, 主界面左侧为一棵对象树, 树上挂有代表查询对象 和界面对象的节点,右侧为显示当前选中对象基本属性的属性框。 图 二-1 管理调度主界面 对象树(ObjectTree) :对象树是一个支持层次管理的数据结构,它维护自身的加载、 存储和节点的目录管理,每个节点的信息主体存储在数据库的一个 BLOB 字段中。对象树上 的节点通常分为目录 (Folder) 和对象两类, 并支持快速定位 (在树获得焦点时用 ctrl-f 快捷键可弹出查找对话框,支持按编码或名称来模糊查找) 。 属性框(ObjectInspe
15、ctor) :一个自动显示对象的属性和取值的控件,取值部分会根 第 9 页 据属性的数据类型采用不同的渲染器来展示,不同的编辑器来编辑。 1.1 对象编辑 目录的编辑操作如下: (1) 增加/删除/修改: 在根节点或目录节点之下可以增加目录, 删除目录时会删除目录下 的所有对象。目录的可修改属性为目录名称。同一目录下的目录和对象不能重名。 (2) 复制/剪切/粘贴: 在查询子树或格式子树下, 可以将一个目录及其下属内容从某位置 拷贝或移动到另一个位置。 对象分为查询对象和格式对象,其编辑操作如下: (1) 增加/删除/修改: 在根节点或目录节点之下可以增加查询对象或者界面对象。 前者的 属性为
16、编码、名称和数据源,后者的属性为编码和名称,其中编码一经使用,就不 再建议作任何修改,因为此编码可能被其它对象引用。请注意对象的唯一标识是编 码而不是显示名称,一个查询对象或是格式设计对象可以有多个显示名称但是只能 有唯一的编码。 (2) 复制/剪切/粘贴: 在查询或格式子树下, 可以将一个对象从某位置拷贝或移动到另一 个位置。请注意这里的复制粘贴都是在同一棵树下的,如果复制格式设计对象到查 询对象树下则会出错。 1.2 对象导入导出 (1) 导出:选中某个对象,可将其导出为 XML 文件,文件里描述了对象的所有信息; 也可选中某个目录,将该目录下所有的子目录和对象都导出到指定位置(保持原有 的目录级次) 。 (2) 导入:在选中某个目录之后,导入功能可用。导出的 XML 文件,可以导入到当前 目录下。此功能可用于对象的跨数据库复制。导入时,我们可以选择单个文件,也 可以选择一组文件或目录,导入后会保留原目录的级次结构。需要注意的是: 在导出查询对象或界面对象时,需将其引用的查询对象查询对象一并导出才有意义; 导入不能违反对象主键及名