Назначение условных значений и правил

Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018 — TFS 2013

Важно!

Эта статья относится к настройке проекта для локальных моделей процессов XML. Общие сведения о моделях процессов см. в статье Настройка отслеживания работы.

Можно определить правила, которые выполняются условно с помощью элементов when, WHENNOT, WHENCHANGEDи WHENNOTCHANGED . Эти правила используются для определения элементов, которые выполняются, если определено предложение True . Вы можете определить условия, основанные на значении определенного поля или на том, изменяет ли пользователь конкретное поле. Например, можно создать зависимый список выбора, чтобы предоставить подробные данные о поведении безопасности или пользовательском поведении.

Условия полей — это дополнительные элементы, которые перечисляются внутри FIELD элемента (определение) или FIELD элемента (рабочий процесс). Дополнительные сведения об этих элементах см. в разделе ссылка на элемент Field (определение) и поле (рабочий процесс).

Следующий код является простым примером предложения when :

<FIELD  . . .  > 
<WHEN field="referenceName" value="yyy">  
</FIELD>

Это предложение означает, что все в этом элементе FIELD применимо, если поле refname имеет значение yyy. Поле должно быть допустимым именем ссылки на поле. Дополнительные сведения см. в разделе соглашения об именовании для объектов отслеживания рабочих элементов.

Примечание

При указании атрибута значения не учитывается регистр. Следовательно, если имя ссылки на поле содержит "YYY", в совпадениях будут указаны значения "yyy" и "YYY".

Структура синтаксиса для условных элементов

В следующей таблице описаны условные правила, которые можно указать в качестве дочерних элементов FIELD элемента (определения) или FIELD элемента (рабочего процесса). Эти элементы принимают один или несколько следующих атрибутов.

  • field: Строка, описывающая поле. Длина должна составлять от 1 до 255 символов.
  • value: Если указанное поле имеет это значение, правила в WHENWHENNOT элементах и применяются к текущему полю.

Элемент

Синтаксис

Описание

WHEN

<WHEN field="fieldReferenceName" value="value">
<ALLOWEDVALUES> . . . </ALLOWEDVALUES>
<ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
<CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
<COPY> . . . </COPY>
<DEFAULT> . . . </DEFAULT>
<EMPTY> . . . </EMPTY>
<FROZEN> . . . </FROZEN>
<MATCH> . . . </MATCH>
<NOTSAMEAS> . . . </NOTSAMEAS>
<PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
<READONLY> . . . </READONLY>
<REQUIRED> . . . </REQUIRED>
<SERVERDEFAULT> . . . </SERVERDEFAULT>
<SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
<VALIDUSER> . . . </VALIDUSER>
</WHEN>

Задает одно или несколько правил, применяемых к текущему полю, если другое поле имеет определенное значение. Родительский элемент определяет текущее поле.

Если указанное поле содержит указанное значение, правила в этом элементе применяются к текущему полю.

WHENNOT

<WHENNOT field="fieldReferenceName" value="value">
<ALLOWEDVALUES> . . . </ALLOWEDVALUES>
<ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
<CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
<COPY> . . . </COPY>
<DEFAULT> . . . </DEFAULT>
<EMPTY> . . . </EMPTY>
<FROZEN> . . . </FROZEN>
<MATCH> . . . </MATCH>
<NOTSAMEAS> . . . </NOTSAMEAS>
<PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
<READONLY> . . . </READONLY>
<REQUIRED> . . . </REQUIRED>
<SERVERDEFAULT> . . . </SERVERDEFAULT><br/><SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
<VALIDUSER> . . . </VALIDUSER>
</WHENNOT>

Указывает условие, при котором одно или несколько правил применяются к текущему полю. Правила применяются к текущему полю, если значение другого поля изменяется. Родительский элемент определяет текущее поле.

Если указанное поле не содержит заданное значение, правила в этом элементе применяются к текущему полю.

WHENCHANGED

<WHENCHANGED field="fieldReferenceName" >
<ALLOWEDVALUES> . . . </ALLOWEDVALUES>
<ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
<CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
<COPY> . . . </COPY>
<DEFAULT> . . . </DEFAULT>
<EMPTY> . . . </EMPTY>
<FROZEN> . . . </FROZEN>
<MATCH> . . . </MATCH>
<NOTSAMEAS> . . . </NOTSAMEAS>
<PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
<READONLY> . . . </READONLY>
<REQUIRED> . . . </REQUIRED>
<SERVERDEFAULT> . . . </SERVERDEFAULT>
<SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
<VALIDUSER> . . . </VALIDUSER>  
</WHENCHANGED>

Указывает условие, при котором одно или несколько правил применяются к текущему полю. Правила применяются к текущему полю, если значение другого поля изменяется при исправлении рабочего элемента. Родительский элемент определяет текущее поле.

WHENNOTCHANGED

<WHENNOTCHANGED field="fieldReferenceName">
<ALLOWEDVALUES> . . . </ALLOWEDVALUES>
<ALLOWEXISTINGVALUE> . . . <ALLOWEXISTINGVALUE>
<CANNOTLOSEVALUE> . . . </CANNOTLOSEVALUE>
<COPY> . . . </COPY>
<DEFAULT> . . . </DEFAULT>
<EMPTY> . . . </EMPTY>
<FROZEN> . . . </FROZEN>
<MATCH> . . . </MATCH>
<NOTSAMEAS> . . . </NOTSAMEAS>
<PROHIBITEDVALUES> . . . </PROHIBITEDVALUES>
<READONLY> . . . </READONLY>
<REQUIRED> . . . </REQUIRED>
<SERVERDEFAULT> . . . </SERVERDEFAULT>  
<SUGGESTEDVALUES> . . . </SUGGESTEDVALUES>
<VALIDUSER> . . . </VALIDUSER>
</WHENNOTCHANGED>

Указывает условие, при котором одно или несколько правил применяются к текущему полю. Правила применяются к текущему полю, если значение другого поля не изменяется при исправлении рабочего элемента. Родительский элемент определяет текущее поле.

В следующей таблице описывается, как каждое необязательное условное правило применяется к родительскому полю, если условное предложение, заданное с помощью элемента when, WHENNOT, WHENCHANGEDили WHENNOTCHANGED , имеет значение true. Дополнительные сведения см. в разделе правила и оценка правил.

Элемент Описание
ALLOWEDVALUES Родительское поле должно иметь значение, наследуемое из указанного списка значений.
ALLOWEXISTINGVALUE Значение родительского поля, которое уже существует, будет разрешено, даже если оно нарушает другие правила. Элемент неприменим, если значение родительского поля изменено.
CANNOTLOSEVALUE Пользователи могут изменить значение родительского поля на NULL, но они не могут изменить его на любое другое значение.
КОПИРОВАТЬ Значение третьего поля автоматически копируется в родительское поле. Третье поле задается в элементе Copy .
DEFAULT Этот элемент задает значение родительского поля по умолчанию.
УКАЗАНО Родительское поле не должно содержать значения.
Крепление Родительское поле зафиксировано. Если поле зафиксировано, его значение можно изменить на NULL, но невозможно изменить на любое другое значение.
MATCH Значение родительского поля должно совпадать с указанным шаблоном.
NOTSAMEAS Значение родительского поля не может совпадать со значением третьего поля. Третье поле указывается в элементе нотсамеас .
PROHIBITEDVALUES Родительское поле не может содержать значения в списке перечисляемых значений.
ДОСТУПНО Родительское поле доступно только для чтения.
ОБЯЗАТЕЛЬНО Родительское поле должно содержать значение, отличное от NULL.
SERVERDEFAULT Родительское поле получает значение из указанного компонента сервера. Допустимыми серверными компонентами являются часы, то есть время обновления рабочего элемента, а CurrentUser— идентификатор пользователя, который обновил рабочий элемент.
сугжестедвалуес Список перечисляемых значений содержит предлагаемые значения для родительского поля.
VALIDUSER Только указанные пользователи могут изменять родительское поле.

Определение зависимого обязательного поля

Вы можете указать, что поле является обязательным, только если другое поле содержит конкретное значение. В следующем примере при получении отчета об ошибке клиента необходимо указать уровень серьезности. Если отчет об ошибке пришел не от клиента, уровень серьезности можно не указывать.

<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>  

Определение списка условных выборок

В следующем примере демонстрируется список условного выбора, в котором разрешенные значения для поля "Тип проблемы" ограничены на основе того, задано ли для поля ProblemCharacteristic значение "Документация".

<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>