<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>iTopCN – iTop 功能特性</title><link>/docs/feature/</link><description>Recent content in iTop 功能特性 on iTopCN</description><generator>Hugo -- gohugo.io</generator><language>zh</language><lastBuildDate>Fri, 27 Jun 2025 00:00:00 +0000</lastBuildDate><atom:link href="/docs/feature/index.xml" rel="self" type="application/rss+xml"/><item><title>Docs: 生命周期：转换时的标志</title><link>/docs/feature/lifecycle/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/feature/lifecycle/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍生命周期中状态转换时的字段标志配置。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:lifecycle">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>自 2.4 版本起，当对象通过转换从源状态进入目标状态时，您可以定义在转换表单中哪些字段需要被记录（必填）、必须被更改或仅被提示。&lt;/p>
&lt;h2 id="状态上的标志">状态上的标志&lt;/h2>
&lt;p>在状态上设置的 &lt;code>must_change&lt;/code>、&lt;code>must_prompt&lt;/code> 和 &lt;code>mandatory&lt;/code> 标志适用于所有以该状态为终点的转换。&lt;/p>
&lt;h2 id="示例">示例&lt;/h2>
&lt;p>例如，在一个工单（Ticket）上，有 3 个不同的转换以 &lt;code>assigned&lt;/code> 状态为终点：&lt;/p>
&lt;ul>
&lt;li>在 &lt;code>assign&lt;/code> 转换期间，您希望提示用户输入必填的 &lt;code>agent&lt;/code>（2.4 之前所有转换的默认行为）&lt;/li>
&lt;li>在 &lt;code>re-assign&lt;/code> 转换上，您希望强制更改 &lt;code>agent&lt;/code>（自 2.4 起在 XML 中支持）&lt;/li>
&lt;li>在门户上执行的 &lt;code>re-open&lt;/code> 转换中，&lt;code>agent&lt;/code> 字段甚至不应显示（自 2.4 起在增强门户中支持）&lt;/li>
&lt;li>在 &lt;code>assigned&lt;/code> 状态下，&lt;code>agent&lt;/code> 在工单修改表单中应为只读模式，否则更改代理将不会触发与转换关联的操作（例如向新代理发送通知邮件）&lt;/li>
&lt;li>一个字段现在可以在转换期间被设为必填，之前隐藏，之后只读，从而只允许具有允许运行该转换的角色的用户写入该字段&lt;/li>
&lt;/ul>
&lt;h2 id="配置方法">配置方法&lt;/h2>
&lt;p>示例 2：如何在 XML 中配置&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;UserRequest&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;lifecycle&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;states&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;state&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;assigned&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;transitions&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;transition&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ev_reassign&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;target&amp;gt;&lt;/span>assigned&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/target&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;flags&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;attribute&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;agent_id&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;must_change/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/attribute&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;attribute&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;team_id&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;must_prompt/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/attribute&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/flags&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/transition&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="itop-行为">iTop 行为&lt;/h2>
&lt;p>控制台上的转换表单会根据数据模型中定义的标志自动构建。在门户上，可以覆盖自动表单，但空的必填字段不能被移除。&lt;/p>
&lt;h3 id="适用于转换的标志">适用于转换的标志&lt;/h3>
&lt;p>对于对象的每个字段，iTop 会组合在转换上设置的所有标志以及最终状态上定义的 &lt;code>Must_xxx&lt;/code> 和 &lt;code>Mandatory&lt;/code> 标志（并忽略最终状态上的其他标志，如 &lt;code>hidden&lt;/code>、&lt;code>read_only&lt;/code>、&lt;code>read_write&lt;/code>）。&lt;/p>
&lt;h3 id="转换表单">转换表单&lt;/h3>
&lt;p>按以下顺序检查标志，并在第一个匹配处停止：&lt;/p>
&lt;ul>
&lt;li>&lt;code>must_change&lt;/code>：以编辑模式显示，值必须更改且与之前不同&lt;/li>
&lt;li>&lt;code>must_prompt&lt;/code>：以编辑模式显示&lt;/li>
&lt;li>最终状态或转换上的 &lt;code>mandatory&lt;/code>，且初始值为空：以编辑模式显示&lt;/li>
&lt;li>转换上的 &lt;code>read_only&lt;/code>：以只读模式显示该字段&lt;/li>
&lt;li>如果以上情况均不符合：不在表单中显示该字段&lt;/li>
&lt;/ul>
&lt;p>表单验证：&lt;/p>
&lt;ul>
&lt;li>转换上、最终状态上或字段定义上的 &lt;code>mandatory&lt;/code> 标志：强制要求填写该字段&lt;/li>
&lt;li>否则，字段可以留空&lt;/li>
&lt;/ul>
&lt;h3 id="状态上的修改表单">状态上的修改表单&lt;/h3>
&lt;ul>
&lt;li>&lt;code>Must Change&lt;/code>：强制在控制台上更改该字段（对门户无影响）&lt;/li>
&lt;li>&lt;code>Must Prompt&lt;/code>：对控制台和门户均无影响&lt;/li>
&lt;/ul>
&lt;h2 id="门户定义转换表单">门户：定义转换表单&lt;/h2>
&lt;p>增强门户支持按转换定义特定表单。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-xml" data-lang="xml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;form&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ticket-reopen&amp;#34;&lt;/span> &lt;span style="color:#c4a000">_delta=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;define&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;class&amp;gt;&lt;/span>UserRequest&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/class&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;fields/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;twig&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;div&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;div&lt;/span> &lt;span style="color:#c4a000">class=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;form_field&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;public_log&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-flags=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;mandatory&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;div&lt;/span> &lt;span style="color:#c4a000">class=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;form_field&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;team_id&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-flags=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;hidden&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&amp;lt;/div&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;div&lt;/span> &lt;span style="color:#c4a000">class=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;form_field&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;agent_id&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-flags=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;hidden&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&amp;lt;/div&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/div&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/twig&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;modes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;mode&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;apply_stimulus&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;stimuli&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;stimulus&lt;/span> &lt;span style="color:#c4a000">id=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;ev_reopen&amp;#34;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/stimuli&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/mode&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#204a87;font-weight:bold">&amp;lt;/modes&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">&amp;lt;/form&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>与门户中定义的任何其他表单一样，您可以在字段上设置标志以：&lt;/p>
&lt;ul>
&lt;li>向门户用户隐藏字段，即使该字段在控制台中被提示&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">div&lt;/span> &lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;form_field&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;xxxxx&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-flags&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;hidden&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ul>
&lt;li>强制门户用户在字段中输入值，即使该字段在控制台中不是必填的&lt;/li>
&lt;/ul>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-html" data-lang="html">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#000;font-weight:bold">&amp;lt;&lt;/span>&lt;span style="color:#204a87;font-weight:bold">div&lt;/span> &lt;span style="color:#c4a000">class&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;form_field&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-id&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;xxxxx&amp;#34;&lt;/span> &lt;span style="color:#c4a000">data-field-flags&lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#4e9a06">&amp;#34;mandatory&amp;#34;&lt;/span>&lt;span style="color:#000;font-weight:bold">/&amp;gt;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:lifecycle">https://www.itophub.io/wiki/page?id=3_2_0:feature:lifecycle&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/feature/lifecycle.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 标识测试实例</title><link>/docs/feature/markup/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/feature/markup/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍如何标识 iTop 测试实例以及 iTop 标记功能。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:markup">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="标识测试实例">标识测试实例&lt;/h2>
&lt;p>iTop 默认使用 &lt;code>light-grey&lt;/code> 主题来定义控制台的外观。我们添加了一个新主题 &lt;code>test-red&lt;/code>，以便一眼识别您的测试实例。&lt;/p>
&lt;h3 id="如何更改主题">如何更改主题&lt;/h3>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-php" data-lang="php">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#4e9a06">&amp;#39;backoffice_default_theme&amp;#39;&lt;/span> &lt;span style="color:#ce5c00;font-weight:bold">=&amp;gt;&lt;/span> &lt;span style="color:#4e9a06">&amp;#39;test-red&amp;#39;&lt;/span>&lt;span style="color:#000;font-weight:bold">,&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="更改控制台颜色">更改控制台颜色&lt;/h2>
&lt;p>您可以通过扩展或（对于 Combodo 客户）使用 ITSM Designer 来修改控制台颜色。&lt;/p>
&lt;h2 id="itop-标记markup">iTop 标记（Markup）&lt;/h2>
&lt;p>从 2.7 版本起，我们在一些页面（控制台和门户）中添加了标记信息。&lt;/p>
&lt;h3 id="部分标记内容">部分标记内容&lt;/h3>
&lt;p>对象详情上添加的标记：&lt;/p>
&lt;ul>
&lt;li>&lt;code>class=&amp;quot;object-details&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>data-object-class=&amp;quot;UserRequest&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>data-object-id=&amp;quot;34&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>data-object-mode=&amp;quot;view&amp;quot;&lt;/code> 或 &lt;code>&amp;quot;edit&amp;quot;&lt;/code>&lt;/li>
&lt;/ul>
&lt;p>对象详情中字段上添加的标记：&lt;/p>
&lt;ul>
&lt;li>&lt;code>data-attribute-type=&amp;quot;AttributeEnum&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>data-attribute-code=&amp;quot;status&amp;quot;&lt;/code>&lt;/li>
&lt;li>&lt;code>data-value-raw=&amp;quot;new&amp;quot;&lt;/code> — 对于枚举类型，这是代码而非翻译后的值&lt;/li>
&lt;/ul>
&lt;p>对象列表中行上添加的标记：&lt;/p>
&lt;p>对象列表中字段上添加的标记：&lt;/p>
&lt;h3 id="自定义">自定义&lt;/h3>
&lt;p>借助添加的 HTML 标记，您可以编写简洁的代码来修改对象在 iTop 中的显示方式。例如：在控制台中高亮显示状态。&lt;/p>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:markup">https://www.itophub.io/wiki/page?id=3_2_0:feature:markup&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/feature/markup.txt · Last modified: 2024/09/10 10:25 by 127.0.0.1&lt;/p></description></item><item><title>Docs: 新闻中心</title><link>/docs/feature/newsroom/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/feature/newsroom/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍 iTop 新闻中心功能。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:newsroom">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>新闻中心是 iTop 向当前用户显示新闻的地方。这些新闻可能来自各种新闻提供者。&lt;/p>
&lt;ul>
&lt;li>从一开始，iTop Hub 就是一个新闻提供者，仅向 iTop 管理员发送新闻。&lt;/li>
&lt;li>一些扩展提供者（如 Molkobain）也有自己的新闻提供者，仅当其某个扩展部署在该 iTop 实例上时，才向 iTop 管理员发送新闻。&lt;/li>
&lt;li>自 iTop 3.2.0 起，iTop 本身也成为了一个新闻提供者，可以使用触发器-操作机制向任何后台办公用户发送新闻。&lt;/li>
&lt;/ul>
&lt;p>从用户的角度来看，新闻只是了解 iTop 中发生事件的另一种方式。对于整天在 iTop 后台办公中工作的用户，新闻可以替代电子邮件。&lt;/p>
&lt;h2 id="铃铛与新闻">铃铛与新闻&lt;/h2>
&lt;p>新闻可通过左侧菜单栏底部显示的铃铛图标访问。&lt;/p>
&lt;ul>
&lt;li>当有未读新闻时，铃铛上会显示红色圆点。&lt;/li>
&lt;li>鼠标悬停在铃铛上时，会显示一个工具提示，显示新闻中心中&amp;quot;未读&amp;quot;新闻的数量（如果超过 99 条未读消息，则显示&amp;quot;99&amp;quot;）。&lt;/li>
&lt;li>红色圆点和消息数量仅在用户在 iTop 中导航或重新加载当前页面时更新。&lt;/li>
&lt;li>点击此图标会显示一个弹出菜单，其中包含消息。每条消息由图标和简短描述组成，实际上是指向更多信息的链接。&lt;/li>
&lt;li>点击其中一条消息会在新标签页/窗口中打开消息的链接，并将消息标记为已读，从而将其从新闻中心菜单中移除。&lt;/li>
&lt;/ul>
&lt;h2 id="管理员">管理员&lt;/h2>
&lt;p>iTop 社区管理员将接收来自两个不同新闻发布者的消息。每条消息右侧图标下方的标签提供了消息的来源（iTop Hub、iTop 或其他新闻发布者）。&lt;/p>
&lt;h2 id="查看所有消息">查看所有消息&lt;/h2>
&lt;h3 id="阅读未读查看删除">阅读、未读、查看、删除&lt;/h3>
&lt;ul>
&lt;li>点击铃铛，可以选择&amp;quot;查看所有消息&amp;quot;，这会打开一个用户专用页面。&lt;/li>
&lt;li>如果您收到来自不同提供者的消息（只有 iTop 管理员会处于这种情况），则点击新闻提供者名称以查看来自该特定提供者的所有消息。&lt;/li>
&lt;/ul>
&lt;p>在该页面上，您可以：&lt;/p>
&lt;ul>
&lt;li>删除收到的新闻&lt;/li>
&lt;li>将新闻标记为未读，以便保持该状态，因为您仍需要回复或处理&lt;/li>
&lt;li>将新闻标记为已读&lt;/li>
&lt;li>在新浏览器标签页中打开新闻&lt;/li>
&lt;/ul>
&lt;h3 id="批量管理">批量管理&lt;/h3>
&lt;p>此外，通过更改&amp;quot;选择模式&amp;quot;，用户可以批量执行所有这些操作。&lt;/p>
&lt;h2 id="取消订阅通知">取消订阅通知&lt;/h2>
&lt;p>当用户由于 iTop 中特定类型的事件（在 iTop 术语中称为触发器）而收到新闻和/或电子邮件时，他现在可以决定取消订阅此类通知，前提是管理员已允许此类操作。&lt;/p>
&lt;ul>
&lt;li>一个特定的触发器可以配置为向同一组人发送电子邮件和新闻。&lt;/li>
&lt;li>每个收件人在收到至少一次通知后，可以决定取消订阅特定渠道，例如不再接收电子邮件，但保留新闻。&lt;/li>
&lt;li>如果触发器设置允许，他们甚至可以完全取消订阅，移除所有渠道。&lt;/li>
&lt;/ul>
&lt;p>有两种路径可以打开此通知中心页面：一种是通过&amp;quot;我的新闻&amp;quot;页面右上角的图标，另一种是从用户偏好设置页面，点击链接。&lt;/p>
&lt;p>最终进入用户专用页面，他们可以在其中管理通知订阅：&lt;/p>
&lt;ul>
&lt;li>移除渠道和重新订阅时会提供反馈&lt;/li>
&lt;li>当触发器不允许移除渠道时，会显示一条通用消息，不太容易与真正的原因关联起来&lt;/li>
&lt;/ul>
&lt;p>触发器和操作的配置人员可以限制用户取消订阅的可能性：&lt;/p>
&lt;ul>
&lt;li>对于&amp;quot;提及&amp;quot;触发器，我们通常希望拒绝用户取消订阅所有渠道，他们将必须保留至少一个，以确保他们被通知。&lt;/li>
&lt;li>对于某些操作（如 iCalendar 邀请、未经身份验证的表单等），用户根本不允许取消订阅。&lt;/li>
&lt;li>用户只能取消订阅他们已经至少收到过一次通知事件的操作。&lt;/li>
&lt;li>用户只能取消订阅直接发送到与其用户关联的联系人的操作，例如电子邮件和新闻，而不是 Rocket、Teams 等此类通知渠道。&lt;/li>
&lt;/ul>
&lt;h2 id="配置新闻">配置新闻&lt;/h2>
&lt;p>负责配置 iTop 通知的用户可以创建新的&amp;quot;通过新闻中心通知&amp;quot;操作，这与&amp;quot;通过电子邮件通知&amp;quot;非常相似：&lt;/p>
&lt;p>有关更多详细信息，请参阅通知页面。&lt;/p>
&lt;h2 id="发送的通知">发送的通知&lt;/h2>
&lt;p>当对象在创建或修改过程中生成了通知时，它们会在对象详情的专用标签页中可见（与之前一样）。这些通知按通知类型分组，标签更加清晰易懂。&lt;/p>
&lt;h2 id="新闻管理">新闻管理&lt;/h2>
&lt;h3 id="新闻清理">新闻清理&lt;/h3>
&lt;ul>
&lt;li>有一个后台任务会删除已读新闻，这些新闻的保存时间超过配置参数 &lt;code>notifications.itop.read_notification_retention&lt;/code>。默认值为 182 天&lt;/li>
&lt;li>未读新闻永远不会被自动删除。&lt;/li>
&lt;/ul>
&lt;h3 id="禁用新闻">禁用新闻&lt;/h3>
&lt;p>管理员可以通过在 iTop 配置文件中将配置参数 &lt;code>newsroom_enabled&lt;/code> 设置为 false 来禁用整个新闻中心机制（对所有用户），这将导致：&lt;/p>
&lt;ul>
&lt;li>对所有用户隐藏铃铛&lt;/li>
&lt;li>不会阻止 iTop 创建新闻，如果配置了&amp;quot;通过新闻中心通知&amp;quot;来生成新闻，但用户将很难看到它们。&lt;/li>
&lt;li>停止所有其他新闻中心提供者从其对应的新闻发布者获取新闻（iTop Hub、扩展发布者如 TeemIp 或 Molkobain等）。&lt;/li>
&lt;/ul>
&lt;h3 id="其他配置">其他配置&lt;/h3>
&lt;ul>
&lt;li>&lt;code>notifications.itop.newsroom_cache_time&lt;/code>：新闻中心铃铛后面通知消息列表两次刷新之间的间隔（分钟）。默认值为 5 分钟。
&lt;ul>
&lt;li>如果用户已读完所有新闻，那么刚创建的新闻将在不到此延迟的时间内通过在其铃铛上添加红色圆点显示给他们。&lt;/li>
&lt;li>如果用户按下铃铛，缓存会立即清除，因此他们会获得其消息的准确当前状态。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;code>notifications.itop.send_asynchronously&lt;/code>：如果为 true，则 iTop 新闻中心通知将异步发送，除非在特定的&amp;quot;通过新闻中心通知&amp;quot;对象上另有设置。&lt;/li>
&lt;/ul>
&lt;h3 id="用户偏好设置">用户偏好设置&lt;/h3>
&lt;p>用户偏好设置屏幕有一个部分供用户配置与新闻中心相关的一些参数：&lt;/p>
&lt;ul>
&lt;li>已知问题：虽然在用户&amp;quot;偏好设置&amp;quot;页面中，下拉菜单中显示的消息数量似乎可以由每个用户配置，但此设置不会被保存。&lt;/li>
&lt;li>每个新闻来源可以在同一用户&amp;quot;偏好设置&amp;quot;页面中启用或禁用。社区版本有两个新闻来源：iTop Hub、iTop 新闻。
&lt;ul>
&lt;li>但无法一次性禁用所有 iTop 发布的新闻，我们已将&amp;quot;显示来自 iTop 的消息&amp;quot;选项置灰。如果用户可以在选择了新闻中心作为&amp;quot;提及&amp;quot;触发器的唯一渠道时禁用所有来自 iTop 的消息，这将违背强制渠道始终处于活动状态的目的。&lt;/li>
&lt;li>如果管理员取消选中&amp;quot;显示来自 iTop Hub 的消息&amp;quot;选项，其效果只会在他下次连接 iTop 时可见。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;h3 id="itop-hub-新闻提供者">iTop Hub 新闻提供者&lt;/h3>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:newsroom">https://www.itophub.io/wiki/page?id=3_2_0:feature:newsroom&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/feature/newsroom.txt · Last modified: 2025/01/13 14:59 by 127.0.0.1&lt;/p></description></item><item><title>Docs: TagSet 与 EnumSet 属性</title><link>/docs/feature/tag/</link><pubDate>Fri, 27 Jun 2025 00:00:00 +0000</pubDate><guid>/docs/feature/tag/</guid><description>
&lt;div class="pageinfo pageinfo-primary">
&lt;p>本文档介绍 iTop 中的 TagSet 和 EnumSet 属性类型。更多详细内容请参考 &lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:tag">iTop 官方文档&lt;/a>。&lt;/p>
&lt;/div>
&lt;h2 id="概述">概述&lt;/h2>
&lt;p>TagSet 和 EnumSet 是两种非常相似的不同属性类型。&lt;/p>
&lt;ul>
&lt;li>它们在 UI 中的用法相同&lt;/li>
&lt;li>允许标签的声明是主要区别：
&lt;ul>
&lt;li>&lt;strong>EnumSet&lt;/strong>：允许值在数据模型中声明&lt;/li>
&lt;li>&lt;strong>TagSet&lt;/strong>：允许值是在每个 iTop 实例上声明的动态数据&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>如果您需要基于对象上是否存在特定标签来编写 PHP 行为代码，请使用 EnumSet，这样无论 iTop 上创建了什么数据，代码都可以被测试。&lt;/p>
&lt;h2 id="字段显示">字段显示&lt;/h2>
&lt;p>在对象详情中它看起来是什么样子：&lt;/p>
&lt;ul>
&lt;li>如果不确定标签的确切含义，只需将鼠标悬停在上面&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>TagSet 特有&lt;/strong>：如果您点击一个标签值，它会显示所有具有该特定标签的对象。&lt;/p>
&lt;h2 id="搜索此类字段">搜索此类字段&lt;/h2>
&lt;p>搜索具有 &lt;code>End-User&lt;/code> 或 &lt;code>Agent&lt;/code> 标签的 FAQ，或同时具有 &lt;code>End-User&lt;/code> 和 &lt;code>Agent&lt;/code> 标签的 FAQ。&lt;/p>
&lt;p>搜索在用户门户上显示的通信（&lt;code>User Portal&lt;/code> 是 &lt;code>portals&lt;/code> EnumSet 允许值的标签）。&lt;/p>
&lt;h3 id="oql-语法">OQL 语法&lt;/h3>
&lt;p>对 TagSet 和 EnumSet 类型的字段进行搜索时使用特定的 OQL 语法。&lt;/p>
&lt;p>假设您有两个代码为 &lt;code>agent&lt;/code> 和 &lt;code>enduser&lt;/code> 的域，以及一些带有这些标签的 FAQ：&lt;/p>
&lt;p>您可以搜索具有这两个标签中&lt;strong>任一&lt;/strong>标签的 FAQ：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">FAQ&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">domains&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">MATCHES&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;agent enduser&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>您可以搜索同时具有&lt;strong>两个&lt;/strong>标签的 FAQ：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">FAQ&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">domains&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">MATCHES&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;agent&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">AND&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">domains&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">MATCHES&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;enduser&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>您可以搜索&lt;strong>没有任何&lt;/strong>标签的 FAQ：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">FAQ&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">domains&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>搜索可以穿 S 或 M 码衣服的人：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-sql" data-lang="sql">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#204a87;font-weight:bold">SELECT&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">Person&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#204a87;font-weight:bold">WHERE&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#000">cloth_size&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#ce5c00;font-weight:bold">=&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline"> &lt;/span>&lt;span style="color:#4e9a06">&amp;#39;__S __M&amp;#39;&lt;/span>&lt;span style="color:#f8f8f8;text-decoration:underline">
&lt;/span>&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="编辑此类字段">编辑此类字段&lt;/h2>
&lt;h3 id="添加标签">添加标签&lt;/h3>
&lt;p>如果可能标签数量较少，它们会列在下拉列表中。&lt;/p>
&lt;p>如果您输入一些文本，可选值列表会过滤为包含您文本的那些。&lt;/p>
&lt;p>如果只有一个值列出，按 Enter 键会将其添加到您的标签中。&lt;/p>
&lt;p>当达到允许的最大标签数量时，可能的值列表将不再显示，因此您无法再添加值。如果在达到限制后移除一个标签，则可能的值列表将再次显示。&lt;/p>
&lt;h3 id="移除标签">移除标签&lt;/h3>
&lt;p>如果您至少有一个已选标签并将光标放在该字段中：按 Backspace 键将移除最后一个标签。&lt;/p>
&lt;p>如果您点击已选标签上的 x，它将移除该标签。&lt;/p>
&lt;h3 id="批量编辑-tagsetenumset-字段">批量编辑 TagSet/EnumSet 字段&lt;/h3>
&lt;p>如果您具有批量写入权限，则可以大规模添加或移除标签。它支持以下用例：&lt;/p>
&lt;ul>
&lt;li>向一组对象添加标签，并在所有修改的对象上保留其他标签不变。向已经具有该标签的对象添加标签没有效果。&lt;/li>
&lt;li>从一组对象中移除标签，并在所有修改的对象上保留其他标签不变。从不具有该标签的对象中移除标签没有效果。&lt;/li>
&lt;/ul>
&lt;p>修改您想要批量添加或移除标签的对象列表：&lt;/p>
&lt;p>这是标签在批量修改编辑屏幕中的显示方式：&lt;/p>
&lt;ul>
&lt;li>在所有待修改对象上都存在的标签以&lt;strong>白色&lt;/strong>背景显示&lt;/li>
&lt;li>在至少一个待修改对象上存在的标签以&lt;strong>灰色&lt;/strong>背景显示
&lt;ul>
&lt;li>如果您点击一个灰色标签，它会变成白色，并将被添加到所有待修改对象中&lt;/li>
&lt;li>如果您保持灰色标签不变，它将保留在之前具有它的那些对象上，不会添加到其他对象上。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>在待修改对象上都不存在但需要添加的标签，必须像单个对象编辑一样选择。&lt;/li>
&lt;li>您可以按照单个对象编辑中描述的方式移除标签。&lt;/li>
&lt;/ul>
&lt;h3 id="导出--导入">导出 / 导入&lt;/h3>
&lt;p>当您导出具有 TagSet 属性的对象时，标签会以其&lt;strong>标签&lt;/strong>导出，用管道符 &lt;code>|&lt;/code> 分隔。导入数据时也支持相同的格式。&lt;/p>
&lt;ul>
&lt;li>您可以导出标签，或勾选&amp;quot;导出代码而非标签&amp;quot;标志来导出代码&lt;/li>
&lt;li>您只能使用标签导入，目前不支持在控制台中使用代码导入。&lt;/li>
&lt;/ul>
&lt;p>针对上述限制的 EnumSet 变通方法：如果您必须有较短的标签（如鞋码或服装尺码），请在不使用的语言中定义较长的标签，并使用该语言的用户导入 CSV 的 EnumSet 字段。&lt;/p>
&lt;h2 id="管理-tagset-允许值">管理 TagSet 允许值&lt;/h2>
&lt;h3 id="添加允许标签">添加允许标签&lt;/h3>
&lt;p>管理特定 TagSet 属性的建议值，与在 iTop 中管理分类（Typology）的方式相同。请参阅&amp;quot;数据管理&amp;quot;下的新菜单：&lt;/p>
&lt;p>可以更改谁可以看到此菜单（与任何菜单一样），以及谁可以通过使用父类 &lt;code>TagSetFieldData&lt;/code> 或子类（&lt;code>TagSetFieldDataFor_Class__AttCode&lt;/code>）微调角色来修改这些类。&lt;/p>
&lt;p>例如，如果您这样定义代码：&lt;/p>
&lt;pre tabindex="0">&lt;code>XS, S, M, L, XL, XXL
&lt;/code>&lt;/pre>&lt;p>iTop 会将它们更改为：&lt;/p>
&lt;pre tabindex="0">&lt;code>_XS, __S, __M, __L, _XL, XXL
&lt;/code>&lt;/pre>&lt;p>对于标签，它们不会被转换，但如果它们少于 3 个字母，则您无法在对象字段的 CSV 导入中使用此标签值。请参阅导出/导入部分。&lt;/p>
&lt;h4 id="搜索允许值">搜索允许值&lt;/h4>
&lt;ul>
&lt;li>选择您要管理值的类/属性&lt;/li>
&lt;li>检查现有值&lt;/li>
&lt;li>创建缺失的值&lt;/li>
&lt;li>代码只能使用数字和字母，不能使用其他字符。&lt;/li>
&lt;li>标签按代码使用字母顺序排序：[1..9][A..Z][a..z]。&lt;/li>
&lt;/ul>
&lt;h3 id="修改允许标签">修改允许标签&lt;/h3>
&lt;ul>
&lt;li>如果没有对象使用该标签值，则可以自由修改。&lt;/li>
&lt;li>如果至少有一个对象正在使用该标签，则&lt;strong>代码&lt;/strong>不能更改，但&lt;strong>标签&lt;/strong>和&lt;strong>描述&lt;/strong>可以更改。&lt;/li>
&lt;/ul>
&lt;h3 id="删除允许标签">删除允许标签&lt;/h3>
&lt;ul>
&lt;li>如果没有对象使用该标签值，则可以自由删除。&lt;/li>
&lt;li>如果至少有一个对象正在使用该标签，则不能删除。&lt;/li>
&lt;/ul>
&lt;p>首先从所有使用它的对象中移除该标签：&lt;/p>
&lt;ul>
&lt;li>点击该标签&lt;/li>
&lt;li>打开&amp;quot;标签使用&amp;quot;标签页&lt;/li>
&lt;li>点击列出对象的修改操作&lt;/li>
&lt;li>在批量编辑表单中移除标签并提交&lt;/li>
&lt;li>现在您可以从面包屑导航中删除该标签&lt;/li>
&lt;/ul>
&lt;h2 id="配置-tagset-属性">配置 TagSet 属性&lt;/h2>
&lt;p>作为标签定义的一部分，您必须定义：&lt;/p>
&lt;ul>
&lt;li>给定对象上允许的最大标签数量 &lt;code>&amp;lt;max_items&amp;gt;&lt;/code>。这不会限制可用标签的数量，可用标签数量没有限制。&lt;/li>
&lt;li>您应该限制标签代码的大小以获得更好的性能 &lt;code>&amp;lt;tag_code_max_len&amp;gt;&lt;/code>&lt;/li>
&lt;/ul>
&lt;h2 id="常见问题">常见问题&lt;/h2>
&lt;p>&lt;strong>查询结果与内容不一致，我该怎么办？&lt;/strong>&lt;/p>
&lt;p>尝试通过以 MySQL 用户身份执行 &lt;code>optimize table&lt;/code> 语句来重建相应的 MySQL 表全文索引（请参阅相应文档）。&lt;/p>
&lt;h2 id="限制">限制&lt;/h2>
&lt;ul>
&lt;li>&amp;ldquo;允许值&amp;quot;无法使用 TagSet 进行本地化，但使用 EnumSet 当然可以&lt;/li>
&lt;li>当用户达到对象上允许的最大标签数量时，没有警告，只是停止建议新值&lt;/li>
&lt;li>扩展 Data Localizer 尚未与 TagSet 测试&lt;/li>
&lt;li>在具有实际数据的现有 TagSet 上减小 &lt;code>&amp;lt;max_items&amp;gt;&lt;/code> 或 &lt;code>&amp;lt;tag_code_max_len&amp;gt;&lt;/code> 的大小，将导致根据您的数据库产生不可预测的结果&lt;/li>
&lt;li>TagSet / EnumSet 无法使用 Object Copier 复制&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>原文：&lt;a href="https://www.itophub.io/wiki/page?id=3_2_0:feature:tag">https://www.itophub.io/wiki/page?id=3_2_0:feature:tag&lt;/a>&lt;/p>
&lt;p>版本：3_2_0/feature/tag.txt · Last modified: 2025/08/28 19:11 by 127.0.0.1&lt;/p></description></item></channel></rss>