Как можно запретить изменение состояния с предложенного на активный в рабочем элементе TFS Requirement на основе значения другого поля? - PullRequest
3 голосов
/ 30 июня 2011

Я добавил утверждения отделов в стандартный рабочий элемент CMMI-Template Requirement.Я бы хотел ограничить поле System.State таким образом, чтобы его можно было изменить только с Предложено на Активно , если для всех утверждений отдела установлено значение "Да".
Requirement Work-Item with Approvals

Я пробовал внести следующие изменения в Requirement.xml

<FIELD name="State" refname="System.State" type="String" reportable="dimension">
  <WHEN field="Approval.Marketing" value="No">
    <READONLY />
  </WHEN>
  <WHEN field="Approval.Quality" value="No">
    <READONLY />
  </WHEN>
  <WHEN field="Approval.RD" value="No">
    <READONLY />
   </WHEN>
   <WHEN field="Approval.System" value="No">
     <READONLY />
   </WHEN>
   <WHEN field="Approval.ProgManagement" value="No">
     <READONLY />
   </WHEN>
</FIELD>

. Это приводит к тому, что поле «Состояние» становится ГОТОВНЫМ, если для любого из полей утверждения установлено значение «Нет», чтоЯ хочу.Однако это создает проблемы при создании нового требования, так как все утверждения изначально были «Нет» и, таким образом, первоначальное «Предложенное» значение по умолчанию для State не устанавливается из-за условия READONLY.Что я хотел бы сделать, так это добавить логику к условиям WHEN, указанным выше, к И их с условием System.State = "Proposed".Я пытался вложить предложения WHEN, такие как

<FIELD name="State" refname="System.State" type="String" reportable="dimension">
  <WHEN field="System.State" value="Proposed">
    <WHEN field="Approval.Marketing" value="No">
      <READONLY />
    </WHEN>
         . . .
  </WHEN>
</FIELD>

Но при импорте возникает ошибка, что предложение WHEN не может содержать WHEN .Как можно запретить изменение состояния с Предложено на Активно , если для любого из полей Утверждение установлено значение «Нет»

1 Ответ

0 голосов
/ 30 июня 2011

Я потратил некоторое время на выяснение, могу ли я придумать вариант, который будет работать, так как вы не можете установить значение по умолчанию для System.State так же, как и для других полей. Я, вероятно, прошел около 50 вариантов, прежде чем я нашел что-то, что работает. Конечно, это не идеально, но это решит вашу проблему после первоначального создания.

Вы можете в каждом из переходных состояний добавить свои предложения when. Для моего примера я использовал поле приоритета и делал что-то вроде:

<State value="Proposed">
  <FIELDS>
    <FIELD refname="Microsoft.VSTS.Common.ResolvedDate">
      <EMPTY />
    </FIELD>
    ...
    <FIELD refname="System.State">
      <WHEN field="Microsoft.VSTS.Common.Priority" value="2">
        <READONLY />
      </WHEN>
    </FIELD>
  </FIELDS>
</State>

Вы, конечно, должны добавить свои пункты в другие состояния: активный, закрытый и разрешенный.

Как только вы это сделаете, создайте новое Требование. При создании нового требования у вас есть два варианта:

Вы можете установить все параметры на «да», установить состояние на предложенное и сохранить. Затем вернитесь и установите для них значение no и сохраните.

Или

Измените все настраиваемые поля по умолчанию на да. Создать требование и сохранить. Отредактируйте его, переключите все значения на нет, сохраните.

В любом случае вы решите пойти, как только это начальное препятствие закончится с созданием требования. Это будет действовать так, как вы хотели. Другими словами, если какое-либо из значений равно no, тогда состояние будет только для чтения.

Это было лучшее, что я мог придумать, учитывая ограничение для поля System.State.

...