[返回博客](/cn/blog) # 在 ODA SDK 中使用通用数据访问（第 1 部分，共 2 部分）

Sergey Sorvenkov 八月 27, 2020 [\#CDA](/cn/blog/tag/cda)

<a class="a2a_button_facebook"></a><a class="a2a_button_twitter"></a><a class="a2a_button_linkedin"></a>

ODA 通用数据访问 API 被 ODA Visualize 等类似查看器的应用程序用于访问导入（打开）数据库的结构信息和对象属性。该结构以树的形式提供，其中至少工作表的节点通过唯一 ID 与导入的图形连接。树中层次结构的特定级别取决于领域，以及这种感知到的层次结构与数据库内容的连接。其目的是为用户提供一种以简化、通用形式查看数据库文件（图纸和模型）的方法。获取此信息基于 RxProperties 机制（非 COM 属性）。该功能在 RxCommonDataAccess.tx 模块中实现。

![Common Data Access in ODA Viewer](/files/inline-images/CDA%20example%20in%20ODA%20Viewer.png)####  

#### RxProperties 级别通用数据访问树的要求

要使用通用数据访问 API 创建分层结构，数据库必须具有以下属性集：

- 层级树节点应具有一个类型为 OdUInt64 的 ODAUniqueID 属性。ODAUniqueID 用于将树节点与可视化几何体链接起来。
- 层级树中所有必需的对象必须具有 HierarchyLevel 属性，或者必须包含在父对象的 CollectionProperty 中。此属性必须包含对子对象（或 CollectionProperty 的对象）的引用。建议排除不必要或服务对象。
- 如果对象具有嵌套对象，则该属性应具有 CollectionProperty 类型，并分别返回这些对象的引用数组。
- HierarchyLevel 属性可以设置为以下值：
    - Entity — 层级树的叶元素。
    - Block — 层级结构中的一组元素，可在树中多次使用。
    - BlockReference — 用作“Block”类型层级元素的引用的元素。
    - Model — 层级结构中的一组元素，可在层级树中进行逻辑分离。
    - Database — 包含对外部数据库引用的元素。
    - Hidden — 没有重要属性的实用元素，在查看器应用程序中显示树时可以隐藏。
- 在大多数情况下，需要继承 OdRxHierarchyLevelAttribute 类并重写函数 virtual OdString value(OdRxValue&amp; value); 以通过其 ID 确定对象类型。
- 建议参与层级树形成的对象和属性缓存的 DisplayAsAttribute 不返回空字符串。

例如：

数据库对象包含 CollectionProperty 类型的 Model 属性（例如），该属性具有 HierarchyLevel 属性。此属性的值为 Model。此属性包含对对象（模型）的引用集合。

每个模型对象都包含 CollectionProperty 类型的 Entity 属性（例如），该属性具有 HierarchyLevel 属性。该属性的值为 Entity。要确定项的确切类型，需要 OdRxHierarchyLevelAttribute 类的重载函数 virtual OdString value(OdRxValue&amp; value);。

本系列文章的下一部分将包含一个从通用数据访问树获取分层信息的示例。

## 今天就开始行动

**免费试用 ODA 软件 60 天。  
无风险，无需信用卡。**

[免费试用](https://www.opendesign.com/cn/free-trial)
