属性的使用与限制

属性的使用与限制。

本文档介绍 iTop 中各种属性类型的使用限制和替代方案。更多详细内容请参考 iTop 官方文档

概述

iTop 提供了多种属性类型,但并非每种属性都能在任何地方使用。本文档说明各种限制和替代方案。

字段在子类上的覆盖

字段在单个类上定义,具有属性:默认值、允许值、是否必填、依赖关系等。

在每个子类上,可以:

  • 定义字段的显示位置
  • 覆盖标签和工具提示
  • 若字段定义中不是必填,则可通过 PHP 代码仅对该子类设为必填

必填字段的限制

某些属性类型不能设为必填:

  • AttributeLinkedSet:可通过 PHP 代码强制必填
  • AttributeCaselog:仅对第一个条目有效,之后不再为空

更改属性类型

在已有对象的情况下更改属性类型并非安全操作,取决于 MySQL/MariaDB 的能力:

操作结果
增大 Text 字段大小支持,但 Setup 期间可能耗时
减小 Text 字段大小可能导致数据截断损坏
Date 改为 DateTime时间部分设为 00:00:00
Text 改为 HTML建议添加 <format>html</format> 标签而非更改类型
Duration/Integer/Decimal/Date/Datetime 改为 String可能可行
String 改为 Duration/Integer/Decimal/Date/Datetime假设数据格式正确才可能可行
LinkedSetIndirect 改为 LinkedSet对数据库无影响,可安全回退

门户限制

以下属性类型在门户中不可编辑:

  • EnumSet 和 TagSet
  • File 和 Image
  • Duration

关系中的属性限制

链接类不支持以下字段类型:

  • Caselog
  • LinkedSet、LinkedSetIndirect
  • Text、HTML、Template
  • File、Image
  • Duration
  • TagSet、EnumSet

属性类型选择

多值选择

  • TagSet、EnumSet、LinkedSetIndirect:允许为单个对象字段设置多个值

单值选择

  • Enum 或 ExternalKey(指向 Typology 子类):允许选择单个值

数据模型值 vs 数据库值

Enum 和 EnumSet

  • 缺点:添加新值需要 Designer MTP 或新扩展版本加 Setup
  • 优点:OQL 过滤器可基于这些值,不依赖实例数据

Typology、TagSet 和 LinkedSetIndirect

  • 优点:添加值快速简单
  • 缺点:基于这些值的 PHP 业务规则与数据耦合,文档化不足

更改枚举值

若在数据模型中更改 Enum 属性的允许值,而 iTop 中已有对象使用旧值:

  • 数据模型视角的允许值限制为新值集合
  • 每次 Setup 时,数据库视角的允许值 = 数据模型值 + 数据库中现有值
  • 编辑时,可选值 = 当前值 + 所有数据模型定义值
  • 搜索时,可选值仅限于数据模型定义值

过滤关系

外部键

AttributeExternalKeyfilter XML 标签允许使用 OQL 查询过滤允许值。支持 $this->attcode 语法,其中 attcode 是当前类的有效字段 ID。

多对多关系

例如限制团队成员属于同一组织:

PersonlnkPersonToTeamTeam
字段teams_listperson_id / team_idpersons_list
属性类型LinkedSetIndirectExternalKeyLinkedSetIndirect
过滤方法Search Form PrefillXML filterXML filter

原文:https://www.itophub.io/wiki/page?id=3_2_0:customization:attribute-limitation

版本:3_2_0/customization/attribute-limitation.txt · Last modified: 2026/06/10 17:31 by 127.0.0.1