Это кажется тяжелым. Каково ваше точное намерение?
Может быть, использование блока WHEN или разбиение ограничений на основные (при определении поля) и специальные ограничения на уровне состояния или перехода решит вашу проблему?
<FIELD name="Approval" refname="Approval" type="String" reportable="dimension">
<REQUIRED />
<DEFAULT from="value" value="Requested" />
<WHENNOT field="System.State" value="New">
<READONLY not="[TEAM FOUNDATION]\Developers"/>
<READONLY not="[TEAM FOUNDATION]\Approvers"/>
</WHENNOT>
<HELPTEXT>Shows whether the task has been approved by management.</HELPTEXT>
</FIELD>
или
<FIELD name="Approval" refname="Approval" type="String" reportable="dimension">
<REQUIRED />
<ALLOWEDVALUES>
<LISTITEM value="Approved" />
<LISTITEM value="Requested" />
<LISTITEM value="Rejected" />
</ALLOWEDVALUES>
<DEFAULT from="value" value="Requested" />
<HELPTEXT>Shows whether the task has been approved by management.</HELPTEXT>
</FIELD>
<TRANSITION from="" to="New">
<FIELDS>
<FIELD refname="Approval">
<READONLY not="[TEAM FOUNDATION]\Developers"/>
<READONLY not="[TEAM FOUNDATION]\Approvers"/>
</FIELD>
</TRANSITION>
Между прочим: Вы должны переименовать свои поля в целое «Пространство имен», например, «My.Company.TfsFields.Common.Approval» или «My.Company.TfsFields.Bugs.IsRegression»