Skip to content
赞助合作

本站右侧赞助位长期招租

联系我投放

多态对象类 Poly Items 建模

在企业建模中,我们经常遇到需要将多个完全不同物理结构的 ItemType 视为同一种类型进行统一处理的场景。例如:

  • 企业的交付文档Document)和设计图纸CAD Document)结构不同,但它们在“发布审批”、“下发分发”时需要被视作同等的“受控文档(Controlled Document)”对待。
  • 制造系统的 零件 (Part)辅料 (Material)服务性采购项 (Service),在“合同关联”或“设计受控”时都应属于“采购目录项 (Catalog Item)”。

为了应对这类复杂的面向对象多态设计需求,Aras Innovator 提供了 Poly Item (多态类/虚基类) 机制。


1. 多态类的设计原理

在 Aras 中,Poly Item 相当于面向对象编程中的**“接口(Interface)”“抽象基类(Abstract Class)”**:

  • Poly Item (虚基类):它本身也是一个 ItemType,但它不对应真实的物理数据表。数据库中只会为它生成一个 SQL View (数据库视图)
  • Member ItemType (实体类/派生类):这是真实存储物理数据的普通 ItemType(如 Part, Material)。
  • Common Properties (公共属性):Poly Item 上定义的所有属性都必须映射到每个 Member ItemType 对应的物理属性上。

2. 底层数据库视图 (SQL View) 实现

当你在 Aras 中创建了一个名为 Catalog_Item 的 Poly Item,并在其下关联了 PartMaterial 两个 Member 项,Innovator 的数据元引擎会自动在 SQL Server 中生成一个类似于如下逻辑的视图:

sql
CREATE VIEW [innovator].[CATALOG_ITEM] AS
SELECT 
    id, 
    item_number AS item_number, 
    name AS name, 
    unit_price AS unit_price,
    'Part' AS itemtype -- 记录原始的成员类类型
FROM [innovator].[PART]
UNION ALL
SELECT 
    id, 
    item_number AS item_number, 
    name AS name, 
    unit_price AS unit_price,
    'Material' AS itemtype
FROM [innovator].[MATERIAL]

这意味对 Poly Item 的 GET(检索)操作在数据库底层会被透明地翻译为对所有 Member 物理表的 UNION ALL 查询,从而极大地简化了多类型关联时的 AML 编写。


3. 配置 Poly Item 的步骤

步骤一:创建 Poly Item

  1. 进入管理端 -> ItemTypes,新建一个 ItemType(如 Catalog_Item)。
  2. Implementation Type 下拉框中,选择 Polymorphic(多态)。

步骤二:指定 Member ItemType (成员类)

  1. 保存新建的多态类后,切换到 Morphae(多态子类) 关系选项卡(仅当选择 Polymorphic 后才可见)。
  2. 将真实的实体类(如 Part, Material)添加为 Morphae 成员。

步骤三:映射公共属性 (Common Properties)

  1. 在 Poly Item 的 Properties 列表中定义所需的公共字段(例如 item_number, name, unit_price)。
  2. 进入各个成员 Morphae 记录的编辑窗口。
  3. 建立映射关系:为每一个 Morphae 成员显式地配置“公共属性对应其哪一个私有物理字段”。例如,Poly Item 上的 name 可以映射为 Partname 属性,以及 Materialmat_name 属性。

步骤四:配置 TOC 导航与权限

  • 你可以将 Poly Item 添加到 TOC。当用户在左侧菜单点击“采购目录项列表”时,系统会列出统一的公共网格,包含了 PartMaterial 的混合数据。
  • 可以对 Poly Item 配置统一的权限控制,这会覆盖或叠加上游的成员权限。

4. 多态类与关系类关联

Poly Item 在定义“一对多”或“多多关联”时具有极高的系统架构价值。

  • 问题背景:如果你想在“设计变更请求 (Change Request)”的底部 Tab 页中关联所有受变更影响的实体对象(这些对象可能是 Part,也可能是 DocumentSoftware_Package)。
  • 常规做法:在 Change Request 下分别建立三个关系类。这会导致前端界面需要展示 3 个不同的 Tab 标签,且难以进行总体的状态管控。
  • Poly Item 做法
    1. 建立一个名为 Affected_Item 的 Poly Item,将 Part, Document, Software_Package 设为 Morphae 成员。
    2. 在 Change Request 下仅配置一个指向 Affected_Item 的关系类。
    3. 前端将呈现一个统一的 Tab 页,用户在点击添加时,弹窗会让用户选择“你要添加 Part 还是 Document?”选择完成后,它们将以统一的网格结构平铺在同一个界面里。

5. 多态建模的关键限制

多态建模的关键限制

  1. 主键唯一性:虽然 Aras 自动生成的 GUID 在全系统是全球唯一的,但如果人工向多态类成员中插入了重复 ID,多态视图查询将会报错。
  2. 不可直接插入 (Read-Only View):不能直接对多态类执行 add 操作。任何新增记录的事务都必须针对具体的成员实体类(如 Part)发起,然后再通过 Poly 视图进行查询呈现。

本站内容仅供学习与参考

本站总访问量