创建、管理和扩展视图
与表一样,视图中也包含行和列,用于在查询、窗体和报表等输出中向用户提供数据。 视图中可能包括联接表的字段,可实现数据的集中访问并简化访问。
视图中的组件与表类似,包括字段、字段组、索引、关系、映射、状态机、方法和事件。
您可以创建视图扩展来增强视图,但不能创建代码扩展。 使用事件处理程序类为方法创建前期事件和后期事件。
此外,还可以使用 Microsoft Visual Studio 创建、管理和扩展视图。
创建视图
使用解决方案资源管理器窗口,将视图添加到项目中。 右键单击项目或激活上下文菜单,然后选择添加>新建项目。 可以使用设计器和属性窗口修改创建的视图。 设计器窗口中包含一个带视图名称的顶层节点,它应是表和视图的特有节点。
对于查询、数据源和类似内容,选择表名称后,系统会创建一个包含所有表和视图名称的列表。 顶层属性包括 Label、Title Field1 和 Title Field2 等属性。
下表列出了视图的顶层属性。 要了解更多属性,请参阅填充表和字段属性。
属性 | 选项 | 描述 |
---|---|---|
查询 | 空白或查询 | 在 Query 属性使用空白值,手动创建视图元数据。 然后,在属性中选择一个查询,系统会将其用作视图元数据,包括字段、范围、排序、联接等。 如果要选择查询,则无法更改视图元数据。 |
下表列出了设计器中视图可用的节点。
节点 | 选项 | 描述 |
---|---|---|
元数据 | 手动创建或使用视图顶层的 Query 属性 | 系统用于视图的基础数据。 通常包括一个或多个表或其他视图(数据源)。 元数据不会作为表存储在数据库中。 视图可以定义为内容由查询定义的虚拟表。 数据的行和列来自元数据引用的表。 生成视图元数据时,请务必注意性能问题。 |
字段 | 视图元数据中的字段、虚拟字段或计算列(虚拟字段) | 使用此节点从视图元数据中添加字段,方法是选择视图中已定义数据源上的字段,然后将其拖动到视图上的节点字段。 要手动创建字段,请右键单击“字段”节点或激活上下文菜单,然后选择“新建”、“字段”。 系统将虚拟字段定义为计算列,但属性设置为 virtual,字段值要在视图的 postLoad 方法中设置。 右键单击“字段”节点或激活上下文菜单,然后选择计算列的相应类型(详细介绍请参见后续部分),将计算字段添加为视图上的字段。 对于字段和计算列而言,最佳做法是创建扩展数据类型。 |
字段组 | 与表类似,字段组可以由系统创建,也可以是自定义组。 | |
索引 | 使用此节点可以选择在视图上创建索引并将其存储到视图的数据库中。 | |
关系 | 查看关系工作,例如表关系。 | |
状态机 | 指定要使用的数据字段。 | |
映射 | 指定要映射到另一个对象的映射。 | |
方法 | 通常,此节点用于显示方法(与表的使用原理相同)或使用 Microsoft Transact-SQL (T-SQL) 返回值的计算列方法。 注意:视图的目的是写入数据,因此不需要插入、更新或删除方法。 | |
事件 | 节点存在但未使用。 |
计算列是视图中的虚拟计算列,系统会使用一种方法的 T-SQL 在数据库上进行计算。
为计算列选择相应类型,在字段节点上创建计算列,这在较早版本中称为未映射字段。 然后,指定 View Method
属性,即在视图方法节点中定义的计算列的计算。
右键单击解决方案资源管理器中的视图,或激活上下文菜单,然后选择查看代码 (F7),创建方法。 如果已经在设计器中打开了视图,则可以右键单击顶层或激活上下文菜单,然后选择查看代码 (F7)。 为计算列创建新方法时,必须确保它是静态方法,并且返回 str 类型(要在数据库上实施的 T-SQL)。
该方法使用以下组件来计算结果:
- 视图名称,可帮助您找到 DictView 类。
- 数据源名称,位于视图元数据中,可帮助您查找表的数据源。
- 数据源字段列表中的字段。
在全局 DictView 类中,您可以使用数据源和字段调用 computedColumnString 方法对返回值生成 T-SQL 返回。
如果要创建更加复杂的表达式,例如 and
、or
、compare
或 if
,请参阅 SysComputedColumn 类中的帮助方法。
以下示例展示了计算列(视图 AssetTransReverse)方法的使用:
/// <summary>
/// Defines the computed column for the negative <c>AmountMST</c> view field.
/// </summary>
/// <returns>
/// The SQL statement which defines the negative <c>AmountMST</c> view field.
/// </returns>
public static str negativeAmountMST()
{
#define.ViewName(AssetTransReverse)
#define.DataSourceName("AssetTrans_1")
#define.AmountMSTField("AmountMST")
str amountMST;
DictView dictView;
dictView = new DictView(tableNum(#ViewName));
amountMST = dictView.computedColumnString(#DataSourceName, #AmountMSTField, FieldNameGenerationMode::FieldList, true);
return SysComputedColumn::negative(amountMST);
}
与其他元素一样,也需要保存并生成创建的视图。
管理视图
务必将视图同步到数据库,从而在基础数据库中创建视图。
在同步期间,系统会通过使用已选中查看方法字段的名称并将列添加到视图创建来检测计算列。 如果计算列生成了无效的 T-SQL 语法,同步可能会失败。 使用不同步视图会导致向用户显示错误。
扩展视图
您可以通过创建扩展来更改视图。 要扩展视图,请在应用程序资源管理器找到相应视图,右键单击或激活上下文菜单,然后选择创建扩展。
您可以在当前项目或新项目中创建扩展,然后使用它们完成以下任务:
- 添加新字段。 无法向视图添加代码,因此,无法添加计算列。
- 更改视图元数据,例如添加范围或新数据源。
- 添加或更改字段组。
- 添加新映射。
无法为视图创建代码扩展,但可以为视图创建事件处理程序类,使方法可以使用前期事件和后期事件。