TagSet 与 EnumSet 属性

介绍 iTop 中 TagSet 和 EnumSet 两种属性类型的用法、显示、搜索、编辑、批量操作及配置方法。

本文档介绍 iTop 中的 TagSet 和 EnumSet 属性类型。更多详细内容请参考 iTop 官方文档

概述

TagSet 和 EnumSet 是两种非常相似的不同属性类型。

  • 它们在 UI 中的用法相同
  • 允许标签的声明是主要区别:
    • EnumSet:允许值在数据模型中声明
    • TagSet:允许值是在每个 iTop 实例上声明的动态数据

如果您需要基于对象上是否存在特定标签来编写 PHP 行为代码,请使用 EnumSet,这样无论 iTop 上创建了什么数据,代码都可以被测试。

字段显示

在对象详情中它看起来是什么样子:

  • 如果不确定标签的确切含义,只需将鼠标悬停在上面

TagSet 特有:如果您点击一个标签值,它会显示所有具有该特定标签的对象。

搜索此类字段

搜索具有 End-UserAgent 标签的 FAQ,或同时具有 End-UserAgent 标签的 FAQ。

搜索在用户门户上显示的通信(User Portalportals EnumSet 允许值的标签)。

OQL 语法

对 TagSet 和 EnumSet 类型的字段进行搜索时使用特定的 OQL 语法。

假设您有两个代码为 agentenduser 的域,以及一些带有这些标签的 FAQ:

您可以搜索具有这两个标签中任一标签的 FAQ:

SELECT FAQ WHERE domains MATCHES 'agent enduser'

您可以搜索同时具有两个标签的 FAQ:

SELECT FAQ WHERE domains MATCHES 'agent' AND domains MATCHES 'enduser'

您可以搜索没有任何标签的 FAQ:

SELECT FAQ WHERE domains = ''

搜索可以穿 S 或 M 码衣服的人:

SELECT Person WHERE cloth_size = '__S __M'

编辑此类字段

添加标签

如果可能标签数量较少,它们会列在下拉列表中。

如果您输入一些文本,可选值列表会过滤为包含您文本的那些。

如果只有一个值列出,按 Enter 键会将其添加到您的标签中。

当达到允许的最大标签数量时,可能的值列表将不再显示,因此您无法再添加值。如果在达到限制后移除一个标签,则可能的值列表将再次显示。

移除标签

如果您至少有一个已选标签并将光标放在该字段中:按 Backspace 键将移除最后一个标签。

如果您点击已选标签上的 x,它将移除该标签。

批量编辑 TagSet/EnumSet 字段

如果您具有批量写入权限,则可以大规模添加或移除标签。它支持以下用例:

  • 向一组对象添加标签,并在所有修改的对象上保留其他标签不变。向已经具有该标签的对象添加标签没有效果。
  • 从一组对象中移除标签,并在所有修改的对象上保留其他标签不变。从不具有该标签的对象中移除标签没有效果。

修改您想要批量添加或移除标签的对象列表:

这是标签在批量修改编辑屏幕中的显示方式:

  • 在所有待修改对象上都存在的标签以白色背景显示
  • 在至少一个待修改对象上存在的标签以灰色背景显示
    • 如果您点击一个灰色标签,它会变成白色,并将被添加到所有待修改对象中
    • 如果您保持灰色标签不变,它将保留在之前具有它的那些对象上,不会添加到其他对象上。
  • 在待修改对象上都不存在但需要添加的标签,必须像单个对象编辑一样选择。
  • 您可以按照单个对象编辑中描述的方式移除标签。

导出 / 导入

当您导出具有 TagSet 属性的对象时,标签会以其标签导出,用管道符 | 分隔。导入数据时也支持相同的格式。

  • 您可以导出标签,或勾选"导出代码而非标签"标志来导出代码
  • 您只能使用标签导入,目前不支持在控制台中使用代码导入。

针对上述限制的 EnumSet 变通方法:如果您必须有较短的标签(如鞋码或服装尺码),请在不使用的语言中定义较长的标签,并使用该语言的用户导入 CSV 的 EnumSet 字段。

管理 TagSet 允许值

添加允许标签

管理特定 TagSet 属性的建议值,与在 iTop 中管理分类(Typology)的方式相同。请参阅"数据管理"下的新菜单:

可以更改谁可以看到此菜单(与任何菜单一样),以及谁可以通过使用父类 TagSetFieldData 或子类(TagSetFieldDataFor_Class__AttCode)微调角色来修改这些类。

例如,如果您这样定义代码:

XS, S, M, L, XL, XXL

iTop 会将它们更改为:

_XS, __S, __M, __L, _XL, XXL

对于标签,它们不会被转换,但如果它们少于 3 个字母,则您无法在对象字段的 CSV 导入中使用此标签值。请参阅导出/导入部分。

搜索允许值

  • 选择您要管理值的类/属性
  • 检查现有值
  • 创建缺失的值
  • 代码只能使用数字和字母,不能使用其他字符。
  • 标签按代码使用字母顺序排序:[1..9][A..Z][a..z]。

修改允许标签

  • 如果没有对象使用该标签值,则可以自由修改。
  • 如果至少有一个对象正在使用该标签,则代码不能更改,但标签描述可以更改。

删除允许标签

  • 如果没有对象使用该标签值,则可以自由删除。
  • 如果至少有一个对象正在使用该标签,则不能删除。

首先从所有使用它的对象中移除该标签:

  • 点击该标签
  • 打开"标签使用"标签页
  • 点击列出对象的修改操作
  • 在批量编辑表单中移除标签并提交
  • 现在您可以从面包屑导航中删除该标签

配置 TagSet 属性

作为标签定义的一部分,您必须定义:

  • 给定对象上允许的最大标签数量 <max_items>。这不会限制可用标签的数量,可用标签数量没有限制。
  • 您应该限制标签代码的大小以获得更好的性能 <tag_code_max_len>

常见问题

查询结果与内容不一致,我该怎么办?

尝试通过以 MySQL 用户身份执行 optimize table 语句来重建相应的 MySQL 表全文索引(请参阅相应文档)。

限制

  • “允许值"无法使用 TagSet 进行本地化,但使用 EnumSet 当然可以
  • 当用户达到对象上允许的最大标签数量时,没有警告,只是停止建议新值
  • 扩展 Data Localizer 尚未与 TagSet 测试
  • 在具有实际数据的现有 TagSet 上减小 <max_items><tag_code_max_len> 的大小,将导致根据您的数据库产生不可预测的结果
  • TagSet / EnumSet 无法使用 Object Copier 复制

原文:https://www.itophub.io/wiki/page?id=3_2_0:feature:tag

版本:3_2_0/feature/tag.txt · Last modified: 2025/08/28 19:11 by 127.0.0.1