NC查询引擎使用详解.doc_第1页
NC查询引擎使用详解.doc_第2页
NC查询引擎使用详解.doc_第3页
NC查询引擎使用详解.doc_第4页
NC查询引擎使用详解.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第 1 页 用友用友 NCNC 二次开发平台二次开发平台 查询引擎查询引擎 目目 录录 第一章前言 1 第 2 页 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 第 3 页 1 查询引擎 FAQ 之参数篇 45 参考文献 47 第 1 页 第一章第一章 前言前言 查询引擎的功能定位 一个面向高级实施人员和专业开发人员的查询建模产品 可以全面 支持复杂查询的设计和个性化的报表展现 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 软件的数据建模和查询建模功能 第 2 页 已经成为代表产品水平的重要指标 第 3 页 第二章第二章 查询引擎的查询引擎的管理管理 1 对象树管理对象树管理 查询引擎的管理调度功能由主界面完成 主界面左侧为一棵对象树 树上挂有代表查询对 象和界面对象的节点 右侧为显示当前选中对象基本属性的属性框 图 2 1 管理调度主界面 对象树 ObjectTree 对象树是一个支持层次管理的数据结构 它维护自身的加载 存储和节点的目录管理 每个节点的信息主体存储在数据库的一个 BLOB 字段中 对象树上 的节点通常分为目录 Folder 和对象两类 并支持快速定位 在树获得焦点时用 ctrl f 快捷键可弹出查找对话框 支持按编码或名称来模糊查找 属性框 ObjectInspector 一个自动显示对象的属性和取值的控件 取值部分会根 据属性的数据类型采用不同的渲染器来展示 不同的编辑器来编辑 1 1 目录管理 1 增加 删除 修改 在根节点或目录节点之下可以增加目录 删除目录时会删除目录 第 4 页 下的所有对象 目录的可修改属性为目录名称 同一目录下的目录和对象不能重名 2 复制 剪切 粘贴 在查询子树或格式子树下 可以将一个目录及其下属内容从某位 置拷贝或移动到另一个位置 1 2 对象管理 1 增加 删除 修改 在根节点或目录节点之下可以增加查询对象或者界面对象 前者 的属性为编码 名称和数据源 后者的属性为编码和名称 其中编码一经使用 就 不再建议作任何修改 因为此编码可能被其它对象引用 2 复制 剪切 粘贴 在查询或格式子树下 可以将一个对象从某位置拷贝或移动到另 一个位置 1 3 导入导出 1 导出 选中某个对象 可将其导出为 XML 文件 文件里描述了对象的所有信息 也可选中某个目录 将该目录下所有的子目录和对象都导出到指定位置 保持原有 的目录级次 2 导入 在选中某个目录之后 导入功能可用 导出的 XML 文件 可以导入到当前 目录下 此功能可用于对象的跨数据库复制 导入时 我们可以选择单个文件 也 可以选择一组文件或目录 导入后会保留原目录的级次结构 需要注意的是 a 在 导出查询对象或界面对象时 需将其引用的查询对象一并导出才有意义 b 导入 不能违反对象主键及名称的唯一性约束 下图显示了某查询对象所导出的 XML 文 件 第 5 页 图 2 2 导出 XML 文件 2 切换定义数据源切换定义数据源 多数据源运作机制 查询引擎支持这样的模式 NC 业务在数据源 A 下运行 查询引 擎的定义放在数据源 B 通过引擎定义的查询可以到数据源 C 去执行 注 只有数据仓库下的查询引擎有切换定义数据源和跨库查询的功能 客户化下的查询引 擎只能查询当前账套数据源的数据 图 2 3 切换定义数据源 定义数据源 上面说的 B 是指查询引擎自身的系统表所在的数据源 执行切换功能后 主界面上的对象树的内容会作相应改变 第 6 页 图 2 4 切换定义数据源效果 第 7 页 第三章第三章 查询引擎的查询模型查询引擎的查询模型 查询模型的定义包括参数定义 SQL 设计 含交叉定义 SQL 整理 数据加工 穿透规 则等几部分 其中穿透规则描述的是本查询与外部查询的通信关系 剩余部分都用于描述 查询内部的属性 查询引擎的查询模型 数据模型 设计如下 查询设计态和运行态的基本流程如下图所示 图 3 1 查询模型流程 1 参数控制参数控制 参数是查询模型中代表动态信息的元素 在 SQL 设计 SQL 整理和数据加工中 均可以根 据参数的不同 对查询的定义和执行进行调整 第 8 页 过滤型参数 如果创建某个参数的作用是根据其取值的不同改变 WHERE 条件的设置 则 这类参数成为过滤型参数 这是最常用的参数功能 参数的应用可以参见附录 1 参数定义 用于定义本查询内部引用的所有参数 其中参数名要保证互不相同 数据类型包括自由录入 枚举 参照几种 当类型为枚举时 枚举项为用 分隔的枚举值 或者是一个单字段的查询 SQL 当类型为参照时 枚举 项为基础参照名 或者是用尖括号括起的自定义参照的类名 2 参数引用 参数可在 SQL 设计的筛选条件页签引用 也可在 SQL 整理或数据 加工的嵌入代码中利用编码向导引用 3 参数设置 运行态要求用户首先对参数进行设置 这与查询模板的使用类似 当报表引用了多个查询时 参数将通过多页签设置 每个页签代表一个查询 图 3 2 参数定义 图 3 3 参数引用 第 9 页 图 3 4 参数设置 2 SQL 设计设计 SQL 设计包括向导设计方式和手工设计方式 无论采用哪种 在完成设计时系统均会对 SQL 进行合法性校验 如未通过校验则不能保存设计 作为向导设计的一个重要组成环节 我们有必要先介绍一下数据字典 2 1 数据字典 前面已经提到过 查询对象的属性中包含数据源信息 因此在设计查询的时候需要加载相 应数据源的数据字典 我们知道 NC 的数据库以 DDC 作为数据字典 但非 NC 的数据库 则没有 DDC 此时 系统会根据执行数据源是系统会根据执行数据源是 NC IUFO 或其它数据库三种情况分别加或其它数据库三种情况分别加 载不同的数据字典载不同的数据字典 而且这一机制已经预留了扩展的接口 其目的就是可以面向各种类型 的数据库执行取数功能 NC 数据字典提供了统一的数据建模平台 支持对各种数据库对象进行管理 维护这些物 理对象的逻辑属性 并向外系统提供访问数据库逻辑信息的接口 以查询引擎为例 查询查询 对象的定义是基于数据字典进行的对象的定义是基于数据字典进行的 而这份数据字典来自查询对象所指定的数据源 由于 多数报表的列与业务数据库的字段存在某种对应关系 因此数据字典的存在有助于提高查 询定义的直观性和易用性 第 10 页 图 3 5 NC 数据字典 NC 数据字典通常在安装产品时候由系统生成由系统生成 如果想自己为某些数据库对象生成字典 可以采用数据字典管理界面提供的导入方法 导入方式包括三种 详细操作可参见 数据 字典导入说明 1 解析 PDM 文件 xml 格式 2 解析 NC 标准建库脚本 3 提取数据库元数据 如果需要给非 NC 数据库 比如用户采用的第三方数据库 生成数据字典 可以利用 PowerDesigner 提供的逆向工程功能将库里的物理表生成 PDM 文件 修改其中表和字段的 中文名称 然后以 xml 文件格式存储 再使用上述第一种方法导入 查询引擎中用到的数据字典都以一棵对象树的形式存在 树节点包括目录 表 视图 字 段 外键等信息 通过双击对象节点可以协助录入 SQL 语句的成分 2 2 向导设计 向导设计参考典型 SQL 的构成规则 充分利用数据字典的功能 引导用户一步步完成 SQL 的设计 因此是推荐使用的方式 它由以下六个环节构成 其中最后一步 交叉属性 超 出了 SQL 的涵义 我们在后面的专门章节中进行介绍 1 表定义 即 SQL 语句中的 from 部分 可以利用数据字典选择库里的数据表 也可以选择查询对象 从而实现查询的集成 基于查询结果定义新的查询 2 连接定义 即 SQL 语句中的 join 部分 表间连接关系 支持单键连接和多键 连接两种模式 第 11 页 3 字段定义 即 SQL 语句中的 select 部分 可以定义任何 SQLSERVER 语法支 持的查询表达式 但要保证字段别名不重复且使用规范名称 以字母开头 由 字母 数字 下划线组成的字符串 且不能使用 SQL 保留字 如果使用了聚 集函数 则由系统自动完成 group by 部分 4 筛选条件定义 即 SQL 语句中的 where 部分 可定义确定条件和待定条件 秘笈 如果是待定条件 在值编辑框获得焦点时双击编辑框可弹出参数界面并 作引用 或者在值编辑框获得焦点时按 F12 键弹出参数引用框 如果是固定 条件 在值编辑框获得焦点时按 F11 键可弹出环境变量引用框 按 F12 键可弹 出所引用的基础数据表的参照 对于在查询字段里使用了聚集函数的 SQL 设计 筛选条件可能需要使用 having 子句 Having 页签默认是隐藏的 可以在查询定义框的南部面板按 Ctrl Shift 鼠标左键弹出隐藏的 Having 页签 5 排序字段定义 即 SQL 语句中的 order by 部分 6 数据交叉属性 交叉是一种常用的多维数据分析手段 详见后文 秘笈 向导设计完成后在查询定义框的南部面板鼠标双击可弹出向导生成的等效 SQL 待定条件全用 1 1 代替 图 3 6 表定义 第 12 页 图 3 7 增加表 物理表 与临时表 图 3 8 连接定义 图 3 9 字段定义 第 13 页 图 3 10 表达式生成器 图 3 11 筛选条件定义 典型模式参见图 3 3 图 3 12 排序字段定义 第 14 页 2 3 手工设计 手工设计是支持自由 SQL 的方式 由于复杂 SQL 在解析 适配 执行等方面的不稳定性 较大 因此不推荐普通用户使用 手工设计分为以下两个环节 1 SQL 录入 用户可以在数据字典的辅助下录入 SQL 语句 要求遵循 SQLSERVER 语法 如图 3 13 注意 我们在 SQL 定义里用到了一个替换型参数 pk corp 关于替换 型参数的具体说明参见附录 2 字段显示名设置 系统通过对用户录入 SQL 的解析获得字段信息 并向用户提供输入 字段显示名的机会 显示名的默认值与查询字段的物理名相同 图 3 13 SQL 录入 图 3 14 字段显示名设置 第 15 页 3 数据交叉数据交叉 3 1 第一类 投影 交叉 投影交叉 假定有一个查询 SQL 其查询结果是单行单列的汇总值 另外还有两组 WHERE 条件的序列 分别为横向序列 WhereX1 WhereX2 WhereXn 和纵向序列 WhereY1 WhereY2 WhereYn 则数据矩阵 A aij 对应的结果集成为投影交叉 如果 aij是 WhereXi和 WhereYj同时作用在上述 SQL 上获得的结果 比如 某查询用于某公司下各部门各民族的人数 原始 SQL 由查询向导生成的等效 SQL 为 select bd deptdoc deptname as deptname bd defdoc docname as docname count bd psndoc pk psndoc as psnno from bd deptdoc left outer join bd psndoc on bd deptdoc pk deptdoc bd psndoc pk deptdoc left outer join bd accpsndoc on bd psndoc pk psndoc bd accpsndoc pk psndoc left outer join bd defdoc on bd accpsndoc nationality bd defdoc pk defdoc where bd deptdoc pk corp group by bd deptdoc deptname bd defdoc docname 查出的结果如下表所示 图 3 15 原始数据 无交叉 现在我们把查询字段中只保留人数 count bd psndoc psncode 一项 然后进行如下的投影交 叉设置 第 16 页 图 3 16 投影交叉设置 则交叉后的结果如下表所示 图 3 17 投影交叉结果 3 2 第二类 旋转 交叉 旋转交叉 此类交叉用于显示表中某几个字段 称为交叉值字段 的统计值 并将其分 组放置在查询结果中 一组列在数据表的左侧 称为交叉行字段 一组列 称为交叉列字 段 旋转到数据表的上部成为列表头 统计值则放在对应的交叉单元 关于旋转交叉的更细节的内容 请参考李媛媛所著的 交叉表使用说明 两类交叉的最大差别在于 第一类交叉属于查询行为 适用于行列设置都已在表样中固定 的报表 其交叉结果严格遵循表样格式 其行列结构不会受查询数据的影响 第二类交叉 属于数据加工行为 其交叉后的行列结构在查询出数据之前不可预料 多用于完全真实地 对原始数据进行动态处理 沿用 3 1 使用的例子 假定我们进行如下的旋转交叉设置 其中交叉砝码的意义是代表交 叉值字段的位置 它只能出现在交叉行字段或交叉列字段当中 第 17 页 图 3 18 旋转交叉设置 则交叉后的结果如下表所示 图 3 19 旋转交叉结果 在旋转交叉设置界面上单击行 列 值标签 在图 3 18 中用蓝色框标示的位置 可弹 出交叉行列复合维度设置和是否小计的设置框 第 18 页 图 3 20 旋转交叉结果 设置了小计 4 代码嵌入代码嵌入 4 1 SQL 整理 SQL 整理 SQL Repair 指在 SQL 查询之前 对 SQL 所作的调整 通常会根据参数的 不同 对查询的表 字段或条件等信息进行增补或修改 SQL 整理的具体内容由内嵌的代码片段描述 这与后面将介绍的数据加工和穿透规则一样 代码的录入可通过编码向导协助完成 尽管如此 这几种功能仍然推荐由高级实施人员或 程序员使用 第 19 页 图 3 21 SQL 整理代码 在图示的 SQL 整理代码中 表达了这样一个整理愿望 当参数 detail 取值为 Y 时 引擎会在本查询对象已完成的 SQL 设计基础上多查询一张表 bd defdoc 和两个字段 档案编码 档案名称 从而获得更明细的查询信息 如果该参数取值不为 Y 则仍 然按照 SQL 设计的定义去执行查询 以下简单介绍几种 SQL 整理算法的编码向导使用方法 1 追加查询表 参数为待追加的表物理名 图 3 22 追加表向导 2 追加连接条件 与追加表同时使用 参数为连接模式 追加表物理名和追加的 表间连接条件 第 20 页 图 3 23 追加连接条件向导 3 追加查询字段 与追加表同时使用 参数为追加字段的表达式 显示名和别名 图 3 24 追加字段向导 4 按参数追加条件 根据参数取值的不同追加不同的筛选条件 参数为参数名和 筛选字段 图 3 25 按参数追加条件向导 4 2 数据加工 查询结果集 ResultSet 由二维数据集合 数据体 及其列信息 元数据 包括列名 第 21 页 列数据类型等信息 构成的一个数据载体 查询引擎中使用的结果集为 Borland 公司开发 的 DataSet 数据加工 Data Process 数据加工是指某个 或某几个 结果集在经过一系列加工 算法的变换后得到另一个结果集 而后者通常是业务上要求的展现结果 相关的算法又称 为加工滤镜 滤镜通常支持输入多个结果集和输出一个结果集 并可以嵌套使用 数据加工与 SQL 整理的区别在于 前者在 SQL 查询之后进行 作用的对象是结果集 后者 在查询之前进行 作用的对象是 SQL 定义 在数据加工的编码向导中 提供了多种实用加工滤镜 图示的数据加工代码把 ID 分别为 male 和 female 的两个结果集按照 deptname 字段为键进行了左外连接 并在连接结 果中保留了 deptname mpsnnum fpsnnum 三列 图 3 26 数据加工代码 以下简单介绍几种数据加工算法的编码向导使用方法 1 由查询获得结果集 根据查询 ID 和参数变量获得查询结果集 这里的参数变 量是指需要传给目标查询的参数哈希表 默认可以是当前查询的参数哈希表 见图 3 27 不需修改 第 22 页 图 3 27 获得结果集向导 2 公式设置 参数为公式列名 返回值数据类型和公式 如果公式列名不存在则 新增一列 否则将该列的内容更新为公式返回值 一个公式也可以引用另一个 公式列的计算结果 图 3 28 公式编辑 第 23 页 图 3 29 公式定义 3 结果集连接 指定两个结果集的连接字段 连接方式和连接后的保留字段 得 到连接后的结果集 图 3 30 结果集连接向导 4 结果集联合 指定两个列结构相兼容的结果集 得到联合 union 后的结果 第 24 页 图 3 31 结果集联合向导 4 3 穿透规则 数据穿透 假定报表 R1 上存在某个区域 A1 A1 内部有若干业务数据 如果以 A1 为出 发点能够切换到另一张报表 R2 的上的区域 A2 而且 A1 和 A2 的内部数据存在着某种内在 联系 则称可以从 R1 穿透到 R2 当这种穿透行为传递下去 我们就可以了解某张报表的 数据明细 甚至追溯到它的数据来源 通常我们会把上述的区域选为一个表格行或者一个 表单元 而上述的内在联系就称为穿透规则 一个查询上可以定义多个穿透规则 每个规则需要指定穿透的目标查询 同时目标查询上 要创建一个过滤型参数 用于接收穿透区域的取值 如我们现在定义了两个查询 公司部门和部门人员 如图 3 32 我们希望在浏览公司部门 的时候选中某个部门能穿透到部门人员查询查看这个部门下的所有员工 这首先需要我们 在公司部门的查询列和部门人员的查询参数之间建立一个关联关系 这里我们选择公司部 门的部门编码 deptcode 列 在部门人员查询里加入一个查询参数部门编码 deptcode 源查询列和目标查询参数名字不一定要相同 但是含义要一致 并在查询定义里引用该参 数作为过滤条件 第 25 页 图 3 32 公司部门 上 和部门人员 下 定义公司部门的穿透规则 选择查询间穿透向导 设置如下 图 3 33 穿透规则定义向导 图 3 34 穿透规则代码 下图显示了一个由人员信息穿透到薪资信息再穿透到同姓员工工资信息 最后穿透到每月 明细的用例 其中第一步穿透是单列等值穿透 相当于 人员 李涤非 第二步是非等 值穿透 相当于 姓名 like 李 第三步是多列联合穿透 相当于 人员 李屏 and 年份 2003 第 26 页 图 3 35 穿透效果示意 第 27 页 5 查询浏览查询浏览 5 1 查询执行与展现 在建立好查询模型之后 系统提供预览查询执行结果的功能 用户首先输入执行查询所需 要的参数取值 如果有参数的话 查询引擎会根据该查询对象的数据源去对应的数据库执 行查询 在经过查询结果集评估 对于查询记录数过大的情况允许用户优化或放弃查询 之后 把结果集展现给用户 在展现之后 用户可以继续进行穿透 交叉等工作 图 3 36 查询预览 5 2 数据导出 导出功能支持将预览数据导出为纯文本文件 并可进而用 EXCEL 打开 随着产品的发展 数据导出的格式会逐步丰富 5 3 创建物化表 查询引擎可以根据预览数据直接到数据库创建物化表 同时将物化表的结构注册到数据字 典 物化表会注册到 DDC 的 物化临时表 目录下 中 以后的 SQL 设计就可以基于新创 建的物化表进行 从而扩充了查询集成的范围 引用了物化表的查询 在执行前会提示是 否同步刷新物化表 如果选择了刷新 则会按当前的参数设置传递给产生物化表的查询 重新执行得到结果并更新物化表 再在此基础上执行当前查询 如果未选择刷新 则直接 基于物化表里的已有数据执行查询 第 28 页 由一个查询生成物化表 该表会创建到查询定义所在的数据源 如果是数据仓库下 可 通过切换定义数据源查看当前所在数据源 而不是查询取数数据源 就是选中查询后在右 边属性列表里的数据源 如果是客户化下的查询引擎 这两者是一致的 因为客户化下的 查询引擎只支持单数据源 就是当前登录账套所在数据源 图 3 37 创建物化表 图 3 38 在定义查询时引用创建的物化表 第 29 页 第四章第四章 查询引擎的界面模型查询引擎的界面模型 界面模型节点的新建和管理参见第二章 我们可以设计新的界面模型 也可以对已有的界 面模型进行修改 界面模型的设计包括引用查询 界面可视化设计 绑定数据集 数据预 处理等部分 界面模型 展现模型 设计如下 界面模型设计态和运行态的基本流程如下图所示 设计态的操作并没有严格意义上的顺序 限制 图 4 1 界面模型流程 第 30 页 1 引用查询引用查询 引用查询是指将界面模型所要展现的查询结果集对应的查询定义引用到模型中来 由于同 一查询定义根据不同参数设置也可以得到不同结果集 所以为了区分这种绑定基于同一查 询定义的不同结果集时 我们对每一个查询结果集起一个单一的别名来标志 图 4 2 查询引用界面 对于数据集之间存在的某种一对多的关系 我们还可以根据需要建立主从关系 即主子表 查询引擎支持两个数据集之间按照多列关联建立主从关系 图 4 3 主子连接设置界面 2 格式设计格式设计 界面模型的格式设计包括了控件拖放 编辑控件属性及数据绑定属性 定义列格式 列表 头 行表头等行列格式以及数据预处理等几部分 分别介绍如下 第 31 页 图 4 4 界面模型设计界面 2 1 控件管理 界面模型设计工具提供了几种最常用的控件 如图 4 4 中控件栏中所示 分别是按钮 复 选框 组合框 标签 列表 单选框 多页签 表 文本域 文本框 树 面板 分割栏 图表和参照控件 其中最重量级的控件是表和图表 绝大部分的数据集展现工作是这两个 控件完成的 初始时 界面上只有一个面板 处于选中状态 布局是默认的 BorderLayout 我们接下来 的工作就是要在这个面板上定制我们的界面 这个过程和一般的 Java 可视化设计大同小异 查询引擎的布局基本上沿用 Java 布局的 FlowLayout BorderLayout 和 GridLayout BorderLayout 和 Java 稍有区别 前两种是比较常用的 FlowLayout 布局顾名思义 是流程式的 象字处理程序安排段落里的文本一样布局 GUI 元 素 图 4 5 FlowLayout 示例 查询引擎里的 BorderLayout 将容器分成了北 中 南三个区域 每个区域放置一个子控件 和 Java 的五个区域稍有不同 北区域和南区域按控件首选高度来布置 宽度都是充满 这个容器 剩下的空间全部划分给中区域 如图 4 6 主面板的布局就是 BorderLayout 其北区域放置了一个子面板 布局为 FlowLayout 中区域放置了一个分隔栏控件 左右各 第 32 页 放了一个表格 南区域放置了一个多页签 图 4 6 BorderLayout 示例 GridLayout 按照指定的行数和列数来平均分隔容器空间 形成很多子区域 每一个区域内 放置一个子控件 图 4 7 GridLayout 示例 图 4 8 界面模型 双击界面上的控件就可以打开属性编辑器 可以编辑控件的相关属性 属性编辑器上边是 当前界面的控件列表 下面列出了当前选中控件的属性列表 我们可以从控件列表中选中 控件 也可以在界面上双击控件来选中控件进行属性编辑 图 4 9 属性编辑器 所有控件都有背景色 前景色 字体和首选大小等普通属性 其次 控件具有一些自己特 有的属性 如面板具有布局属性 分割栏有分栏方向 分栏位置等特有属性 下面我们来 介绍一下几个主要的控件 展现数据集的最重要的控件 表的几个属性 1 绑定数据集 可以将表绑定到引用查询中的某一个查询定义 那么在运行态下 表展现的就是该查询定义对应得到的查询结果集 当设置了表的数据集绑定属 性后 该查询定义中定义的列就相应的出现在表里 此时没有数据只有表头 2 列格式绑定 有时候会对表中的数据展现有各种格式上的要求 如预警显示 精度设置 前缀后缀等等 这时可以设置表的列格式属性 在列格式属性里不 但可以设置列绑定的列格式 也可以设置列的显示顺序 显示与否等属性 列 格式的定义在后面的小节里专门讲述 第 33 页 图 4 7 列格式设置 3 列表头绑定 当表绑定了数据集之后 可以根据展现需要绑定列表头格式 在 表头 ID 属性里绑定表头的 ID 之后 从界面上就可以看到表的列表头已经绑定 到了表头 ID 对应的表头格式 列表头格式的设计在后面的小节里会专门讲述 4 行表头绑定 如果表绑定的查询定义里定义了第一类交叉 即投影交叉 参见 第三章第 3 节 则表还可以设置行表头格式 关于行表头的定义和设置在后 面小节中讲述 图表 图表控件在设置了数据集绑定属性之后 可以设定其数据绑定属性 在图表控件上弹出右 键菜单点击数据绑定菜单项 可弹出数据绑定设置界面如图 4 8 所示 在这里我们可以设 置图表的类型 以及绑定的系列等属性 图 4 8 图表数据绑定设置界面 图表支持的类型有三种 分类图 饼图和仪表图 分类图有 2D 和 3D 两种 还可以选择是水平方向还是垂直方向展开 如果选择了各系列单 独设置图例 还可以对不同的系列设置不同的展现类型 如图 4 9 显示了两个系列的数 据 一个系列是直方图 一个系列是折线图 第 34 页 图 4 9 分类图 饼图也有 2D 和 3D 两种 图 4 10 显示了图 4 9 中的数据用饼图类型的展现 图 4 10 饼图 仪表图将每个系列的数据在一个仪表盘中显示 图 4 11 为同样的数据在仪表图的展现 仪 表图一次展现数据中的一条记录 可以通过仪表图中的导航工具栏浏览数据 第 35 页 图 4 11 仪表图 列表 下拉框 文本框 标签 参照等简单控件提供了绑定到多种内容的属性 其中 列 表和下拉框可以绑定到查询结果集中某列 导航或枚举 绑定查询结果集对应的参数 即 查询参数 文本框可以绑定查询参数和环境变量 参照控件可以绑定查询参数 下面是设 置一个文本框绑定到查询参数的截图 图 4 12 绑定查询参数的文本框 2 2 行列格式设计 行列格式设计包括列格式定义 列表头定义和行表头定义三部分 分别说明如下 列格式定义 第 36 页 图 4 13 列格式定义界面 我们可以定义四种类型的列格式 字符型 数值型 货币型 百分比型 后三种实际上都 属于数值型数据的不同展现 格式定义包括对齐方式 文本颜色 前导符号等等 对于数 值型的列格式还可以设置保留小数位数 是否加千分位等格式 列格式的一个比较重要的 设置就是设置预警显示 预警显示就是将符合指定条件的数据按指定颜色来显示 如销售 额这样的数据通过分段预警就很容易体现出高中低来 方便浏览数据 图 4 14 中所示预警设置就是将小于 60 的数用红色显示 60 到 80 之间的数用蓝色显示 大于 80 的数用黄色显示 预警条件中除支持用常量表达式进行比较之外 也支持用含变量 的表达式进行比较 其中的变量名必须是表中某列的列名 如表中有 A B C 三列 要 求某行中 A 列中的值大于 B 列和 C 列的值之和时该行 A 列按某种指定颜色显示 我们可 以给 A 列绑定列格式 在列格式的预警设置中设置预警条件为 B C 注 这里的 A B C 都是指的列名 不是列显示名 参见图 4 7 图 4 14 预警设置界面 列表头定义 第 37 页 图 4 15 列表头设计界面 有时候为了方便归类和分组列数据 我们需要定义多表头来加强展现 如图 4 15 我们可 以根据自己的需要定义一个多表头用来展现 在这里 可以很方便的组合表中列 定义好 的表头格式存在数据库中 并有一个表头 ID 与之对应 通过表头 ID 该列表头格式可以被 表绑定 绑定了列表头的表效果参见图 4 5 小技巧 定义对应某一查询的列表头展现时 我们可以通过参照 选中该查询来快速引 入该查询定义的列 而不用手工录入 行表头定义 如果设置表的绑定数据集属性到一个定义了第一类交叉的查询 那么表中会出现与查询中 定义的列和行相对应的列头和行头 默认的列头和行头没有任何附加的格式 如图 4 16 所 示 第 38 页 图 4 16 绑定到第一类交叉查询定义的表 就像可以给列分组定义列表头一样 我们也可以给行分组定义行表头 如图 4 17 所示 类似于列表头的定义 我们也可以合并行 还可以定义行号显示与否 行号显示的位置 甚至可以为定义好的表头绑定列表头 保存后我们可以看到界面上的表已经显示了新定义 的行表头格式 图 4 17 行表头设计界面 图 4 18 定义了行列表头格式的表 承图 4 16 2 3 预定义数据处理 界面模型中支持两种数据预定义的处理 定义公式列和定义小计合计 其中 公式列定义 是基于查询结果集的 定义的公式列对于所有绑定该查询结果集的控件都是可见的 小计 合计是基于表控件的 定义的小计合计只对该表起作用 不影响其他绑定到相同数据集的 第 39 页 控件 公式列 点击数据处理菜单下的公式列菜单项 就会弹出如图 4 19 所示的公式列定义界面 图 4 19 公式列定义界面 在查询结果集下拉框中选中要定义公式列的数据集 如果是添加公式列 则数据集中可选 的列名会出现在可选列列表中 如果是预定义的公式列 则可选列是数据集的原始列 如 果是运行态定义的公式列 可选列还包括已经定义的公式列 双击列项可将该列添加到公 式表达式中 公式列中可用函数和操作符也已列出 均是通过双击可以添加到表达式中 添加公式列需要指定公式列名和公式类型 也可以给公式列指定列格式 公式列表达式只 支持 Ascii 字符 不支持中文 如果表达式有误 则运行态下公式列内各行的值均为空 如果是删除公式列 列表中列出了当前数据集已定义的公式列 选中即可删除 修改公式 列界面与添加公式列类似 小计合计 设计界面模型时在表控件的表头上弹出右键菜单 点击小计合计菜单项可弹出设置小计合 计的界面 如图 4 20 其中 根据表绑定的查询定义的不同 界面会稍有区别 分别说明 如下 普通表 可以设置根据什么列分组 进行小计合计 以及分组列的升降序 可以设置小计合计计算与否 以及小计行和合计行标志展现 可以设置需要小计合计的列 以及统计运算的类型 目前支持的运算类型有求和 最大值 和最小值 可以设置统计数据放置在原始数据之前还是放置在后 第一类交叉表 投影交叉表 定义了第一类交叉的查询结果集行列结构是固定的 多用在固定格式的报表中 因此 其 第 40 页 小计合计也设计得稍有区别 在这种情况下 小计合计是根据表的行头来进行的 它根据 表行头所示的树状结构中树节点的级次来小计合计 所以 对于这类表 我们设置的是小 计开始级次和终止级次 而不是分组列 a 普通表 b 投影交叉表 图 4 20 小计合计设置界面 3 界面运行界面运行 对于已经格式设计完毕的界面模型 我们可以运行该界面来查看结果 3 1 界面初始化 我们发出运行某界面的命令后 在界面呈现出来之前 系统会做一系列的初始化工作 根 据界面模型引用的查询定义查询得到对应的结果集 由界面定义构造出界面 根据数据集 绑定属性将控件绑定到对应的结果集 当所有的初始化工作都完成以后 界面才呈现在我 们面前 图 4 21 查询参数设置界面 第 41 页 如果界面引用的查询定义里定义了查询参数 那么在初始化界面工作去后台查询结果集之 前 会要求我们输入查询参数 如当我们运行图 4 5 中定义的界面模型 它引用的查询如 图 4 2 所示 时 因为其引用的查询定义中 部门档案 是定义了参数的 所以系统会弹 出查询参数设置界面让我们输入查询参数 如图 4 21 所示 图 4 22 界面模型运行结果 承图 4 5 输入相应的查询参数 运行结果如图 4 22 所示 3 2 数据处理 界面模型在运行态提供了几种数据处理的功能 查找 排序 过滤 公式列 小计合计 交叉和穿透 其中 查找 排序 过滤和公式列是基于数据集的 这些操作对于所有绑定 到被操作数据集的控件都是起作用的 放在数据处理菜单下 而小计合计 交叉和穿透是 基于表控件的 放在表控件表头右键菜单下 只对表控件本身的数据展现起作用 不影响 其他控件 查找 图 4 23 查找设置界面 选中要进行查找的数据集 以及要查找的字段 输入查找值就可以进行查找 如果数据集 中存在符合查找条件的记录 数据集会滚动到这一条记录 同时在界面控件上体现出来 第 42 页 排序 图 4 24 排序设置界面 选中要进行排序的数据集 选择排序列及升降序 可以对数据集进行排序 相当于 Order By 过滤 过滤设置分两种类型 叠加过滤和重新过滤 叠加过滤是在前过滤结果的基础上再按指定 条件进行过滤得到新的结果 而重新过滤则是去掉了之前设置的过滤条件 在原始结果集 的基础上按指定条件过滤得到新的结果 过滤条件的设置有普通模式和高级模式 普通模式的条件设置类似于查找设置 而高级模 式的过滤条件设置支持带参数表达式的过滤 其表达式的定义类似与公式列表达式的定义 但必须是逻辑表达式 第 43 页 图 4 25 过滤设置界面 公式列 小计合计 运行态公式列定义和小计合计定义类似于预定义数据处理中所述 不再赘述 交叉 图 4 26 第一类交叉 投影交叉设置界面 第 44 页 图 4 27 第二类交叉 旋转交叉设置界面 数据交叉的意义和说明参见第三章第 3 节 界面运行态下的表控件支持交叉操作 如果绑 定了定义第一类交叉 投影交叉 的查询定义 则表控件支持的是第一类交叉 如果绑定 的是其他查询定义 表控件支持第二类交叉 穿透 第 4 28 穿透规则选取界面 穿透的意义和说明参见第三章第 4 3 小节 界面运行态上如果某表控件绑定到定义了穿透 规则的查询定义 则该表控件支持穿透操作 回退 恢复 界面还提供了回退 恢复功能 在对数据集进行了一系列数据处理操作之后 可以利用恢复 功能恢复到原始状态 表控件提供了回退功能可以撤销交叉和穿透等操作 3 3 控件连动 控件连动分同步连动和主子连动两种 同步连动 当多个控件绑定到一个数据集时 当对该数据集进行了查找 排序 过滤 公式列等操作 第 45 页 时 数据集的变化会通知到每个控件 是它们相应的更新展现 体现出同步的连动 图 4 29 上的表格和图表引用了相同数据集 因此当进行排序 过滤等数据集操作的时候 表和图上的数据会出现完全同步的变化 同样 在图上点击某个系列时 表也会相应的定 位到该系列 图 4 29 表 图同步互动 主从连动 如果两个数据集之间建立了主从关系 则分别绑定到这两个数据集的控件之间就形成了主 从连动的关系 如图 4 22 展现的就是两组建立了主从连动关系的表控件 当主表选中某 行时 子表则相应的展现出与主表记录对应的所有子表记录 3 4 报表打印 界面模型提供了预览和直接打印的功能 这部分的功能暂时还不完善 有待扩充 3 5 功能节点挂接 定义好的界面模型并不限制在查询引擎下运行 它也可以作为独立的功能节点挂接在各业 务组的功能模块下 其挂接步骤如下 第 46 页 图 4 30 功能节点挂接 注册功能节点 注册功能节点时需指定对应文件名为 nc ui pub querymodel QueryNodeUI 每个节点还需 定义两个参数 pkQryNode 界面模型对应的编码 dsName 定义数据源 这样 功能节点挂接就完成了 第 47 页 附录附录 1 查询引擎查询引擎 FAQ 之参数篇之参数篇 1 参数定义中的 操作符提示 列是什么意思 是否有用 答 通常此列内容只有提示意义而无实际用处 只有对于参照型参数并且所填内容为 like 或 in 的时候有特殊含义 前者会在参照出来的值后面加百分号 后者支持参照多选 2 数值型参数和字符型参数有何差别 答 数值型参数保证其在引用过程中参数值不加单引号 而字符型参数可能视引用的具体 情况有所不同 3 在进行复合查询的参数定义时 是否需要列出所引用子查询的参数 答 是的 复合查询不会自动去递归提取所引用子查询的参数并集 这个并集需要通过手 工引用 复合查询自身不一定使用其中的参数 但它负责把参数分发给引用的子查询 4 如何快速引用其它查询对象的参数 答 鼠标单击南部面板 5 什么是替换型参数 答 参数名以 开头和结尾的参数称为替换型参数 如 param1 这类参数在引用时被完 全字符替换为相应的参数值 而普通参数只限于在向导式设计中作为待定条件的取值 在 Sql 手工设计

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论