分配基于条件的值和规则
可以使用 WHEN、WHENNOT、WHENCHANGED 和 WHENNOTCHANGED 元素来定义按条件运行的规则。使用这些规则定义当所定义的子句为 True 时将运行哪些元素。可以基于指派给特定字段的值或者用户是否修改特定字段来定义条件。例如,您可以创建相关选取列表以提供详细的安全性或自定义行为。
字段条件是 FIELD(定义)元素或者 FIELD(工作流)元素内所列的附加元素。有关这些元素的更多信息,请参见 FIELD(定义)元素和 FIELD(工作流)元素。
下列代码是一个简单的 WHEN 子句示例:
<FIELD . . . >
<WHEN field="referenceName" value="yyy">
</FIELD>
此子句表示,只要字段 refname 具有值“yyy”,则此 FIELD 元素中的任何内容都适用。该字段必须为有效的字段引用名称。有关更多信息,请参见工作项跟踪对象的命名约定。
说明 |
---|
值特性不区分大小写。所以,如果字段引用名称存储的值为“YYY”,则匹配将包括值为“yyy”或“YYY”的所有项。 |
主题内容
条件元素的语法结构
定义相关的必需字段
定义条件选取列表
定义用户更改一个字段时另一个字段的状态 (WHENCHANGED)
定义用户不修改字段时字段值的状态 (WHENNOTCHANGED)
条件元素的语法结构
下表描述可以指定为 FIELD(定义)元素或 FIELD(工作流)元素的子元素的条件规则。这些元素接受一个或多个以下特性:
field:描述字段的字符串。必须包含 1 至 255 个字符。
value:当指定的字段具有此值时,WHEN 和 WHENNOT 元素中的规则会应用到当前字段。
元素 |
语法 |
说明 |
---|---|---|
WHEN |
|
指定在另一个字段具有特定值时要应用于当前字段的一个或多个规则。父元素用于定义当前字段。 当指定的字段具有此指定值时,此元素中的规则会应用到当前字段。 |
WHENNOT |
|
指定将一个或多个规则应用于当前字段的条件。在另一个字段的值发生更改时,这些规则会应用于当前字段。父元素用于定义当前字段。 当指定的字段不包含指定的值时,此元素中的规则会应用于当前字段。 |
WHENCHANGED |
|
指定将一个或多个规则应用于当前字段的条件。当在工作项修订过程中另一个字段的值变化时,这些规则会应用于当前字段。父元素用于定义当前字段。 |
WHENNOTCHANGED |
|
指定将一个或多个规则应用于当前字段的条件。当在工作项修订过程中另一个字段的值不变时,这些规则会应用于当前字段。父元素用于定义当前字段。 |
下表描述了使用 WHEN、WHENNOT、WHENCHANGED 或 WHENNOTCHANGED 元素指定的条件子句为 true 时,每个基于条件的可选规则如何应用于父字段。有关更多信息,请参见对工作项字段设置条件。
元素 |
说明 |
---|---|
父字段必须具有来自指定的值列表的值。 |
|
允许使用已存在的父字段值,即使该值违反了其他规则。如果父字段的值发生更改,则此元素不适用。 |
|
用户可以将父字段的值更改为 NULL,但不能将其更改为其他任何值。 |
|
第三个字段中的值自动复制到父字段。在 COPY 元素中指定第三个字段。 |
|
此元素指定父字段的默认值。 |
|
父字段不能包含值。 |
|
父字段被冻结。字段冻结后,可以将其值更改为 NULL,但不能将其更改为其他任何值。 |
|
父字段的值必须与指定的模式匹配。 |
|
父字段的值不能与第三个字段的值匹配。在 NOTSAMEAS 元素中指定第三个字段。 |
|
父字段不能包含枚举列表中的任何值。 |
|
父字段是只读的。 |
|
父字段必须包含非 NULL 值。 |
|
父字段从指定的服务器组件获取其值。有效服务器组件是“clock”(表示更新工作项的时间)和“currentuser”(表示更新工作项的用户标识)。 |
|
枚举列表包含父字段的建议值。 |
|
只有指定的用户可以修改父字段。 |
返回页首
定义相关的必需字段
您可以指定某个字段仅在另一个字段包含特定值时是必需的。在下面的示例中,当客户报告 Bug 时,必须指定客户严重级别。如果客户没有报告 Bug,则不需要输入客户严重级别。
<FIELD refname="MyCorp.Severity" name="Customer Severity" type="String">
<ALLOWEDVALUES>
<LISTITEM value="Blocking" />
<LISTITEM value="Major" />
<LISTITEM value="Minor" />
</ALLOWEDVALUES>
<WHEN field="MyCorp.CustomerReported" value="true">
<REQUIRED />
</WHEN>
</FIELD>
定义条件选取列表
下面的示例演示一个条件选取列表,在该列表中 Problem Type 字段的允许值是受限的,具体取决于是否将 ProblemCharacteristic 字段的值设置为 Documentation。
<FIELD refname="MyCorp.ProblemType" name="Problem Type" type="String">
<WHEN field="MyCorp.ProblemCharacteristic" value="Documentation">
<ALLOWEDVALUES>
<LISTITEM value="Spelling Error" />
<LISTITEM value="Bad Format" />
<LISTITEM value="Missing Info" />
</ALLOWEDVALUES>
</WHEN>
</FIELD>
定义用户更改一个字段时另一个字段的状态 (WHENCHANGED)
在下面的示例中,当用户更改 MyCorp.State 字段的值时,MyCorp.StateDate 字段将设置为服务器时钟显示的当前时间和日期。
<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime">
<WHENCHANGED field="MyCorp.State">
<COPY from="clock" />
</WHENCHANGED>
</FIELD>
在下面的示例中,用户更改 MyCorp.State 字段的值时,MyCorp.Status 字段的值将被清除。
<!-- Clear the status field whenever someone changes the state -->
<FIELD refname="MyCorp.Status" name="Status" type="String">
<WHENCHANGED field="MyCorp.State">
<COPY from="value" value="">
</WHENCHANGED>
</FIELD>
定义用户不修改字段时字段值的状态 (WHENNOTCHANGED)
在下面的示例中,用户不更改 MyCorp.State 字段的值时,MyCorp.StateDate 字段将变为只读。
<FIELD refname="MyCorp.StateDate" name="Date Of Last State Change" type="DateTime">
<!-- Make the StateDate field read-only when the State field is not changed -->
<WHENNOTCHANGED field="MyCorp.State">
<READONLY />
</WHENNOTCHANGED>
</FIELD>