TagSet 与 EnumSet 属性
本文档介绍 iTop 中的 TagSet 和 EnumSet 属性类型。更多详细内容请参考 iTop 官方文档。
概述
TagSet 和 EnumSet 是两种非常相似的不同属性类型。
- 它们在 UI 中的用法相同
- 允许标签的声明是主要区别:
- EnumSet:允许值在数据模型中声明
- TagSet:允许值是在每个 iTop 实例上声明的动态数据
如果您需要基于对象上是否存在特定标签来编写 PHP 行为代码,请使用 EnumSet,这样无论 iTop 上创建了什么数据,代码都可以被测试。
字段显示
在对象详情中它看起来是什么样子:
- 如果不确定标签的确切含义,只需将鼠标悬停在上面
TagSet 特有:如果您点击一个标签值,它会显示所有具有该特定标签的对象。
搜索此类字段
搜索具有 End-User 或 Agent 标签的 FAQ,或同时具有 End-User 和 Agent 标签的 FAQ。
搜索在用户门户上显示的通信(User Portal 是 portals EnumSet 允许值的标签)。
OQL 语法
对 TagSet 和 EnumSet 类型的字段进行搜索时使用特定的 OQL 语法。
假设您有两个代码为 agent 和 enduser 的域,以及一些带有这些标签的 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