TFS 工作项类型定义 System.AssignedTo 转换错误

TFS Work Item Type Definition System.AssignedTo Transition Error

尝试通过 Visual Studio 更改自定义工作项的状态时出现以下错误:

The field 'Assigned To' contains the value 'Seth Denburg <Project\SDenburg>' that is not in the list of supported values.

在状态转换期间,另一个字段的值被复制到 System.AssignedTo 字段。此错误阻止我在通过 Visual Studio.

签到期间解决相关工作项

我注意到以下替代方法可以让我成功更改状态,这有助于指出问题所在:

这是自定义工作项类型定义中我认为与此问题相关的状态、转换和字段的子集:

<FIELD name="Assigned To" refname="System.AssignedTo" type="String" syncnamechanges="true" reportable="dimension">
    <ALLOWEXISTINGVALUE />
    <VALIDUSER group="Project\Users" />
</FIELD>

<FIELD name="Lead" refname="Project.Tfs.Lead" type="String" reportable="dimension">
    <ALLOWEXISTINGVALUE />
    <DEFAULT from="value" value="Seth Denburg" />
    <REQUIRED />
    <VALIDUSER group="Project\TechnicalLeads" />
</FIELD>

<STATE value="Pending">
  <FIELDS>
    <FIELD refname="System.AssignedTo">
      <VALIDUSER />
    </FIELD>
  </FIELDS>
</STATE>

<TRANSITION from="Active" to="Pending">
  <REASONS>
    <DEFAULTREASON value="Completed" />
  </REASONS>
  <FIELDS>
    <FIELD refname="System.AssignedTo">
      <COPY from="field" field="Project.Tfs.Lead" />
    </FIELD>
  <ACTIONS>
    <ACTION value="Microsoft.VSTS.Actions.Checkin" />
  </ACTIONS>
</TRANSITION>

在我这边创建了一个测试,效果很好。上面自定义工作项类型定义的代码似乎缺少一个 </FIELDS> of TRANSITION 部分。

确保用户 Seth Denburg 在组 Project\TechnicalLeads[=25= 中].

您也可以在 TFS2015 中创建一个新的团队项目并使用此自定义工作项类型定义来查看问题是否仍然存在。如果不是,问题应该与从 TFS 2012 升级到 2015 有关。确保您有 Configure features after an upgrade

问题最终是字段 Project.Tfs.Lead 没有 syncnamechanges="true"。这是更改后该字段的样子:

<FIELD name="Lead" refname="Project.Tfs.Lead" type="String" syncnamechanges="true" reportable="dimension">
    <ALLOWEXISTINGVALUE />
    <DEFAULT from="value" value="Seth Denburg" />
    <REQUIRED />
    <VALIDUSER group="Project\TechnicalLeads" />
</FIELD>

进行更改时,请确保像以下命令一样使用 witadmin changefield,因为该字段需要跨工作项类型定义进行更新。导入 xml 更改将不起作用,并且会给您警告 TF248017。

witadmin changefield /collection:https://project.com/tfs/projectCollection/ /n:Project.Tfs.Lead /syncnamechanges:true

这就是为什么必须从 MSDN 进行此更改的原因:

You must manually enable synchronization of any custom work item fields that you have created in previous releases of Visual Studio Team Foundation Server and that are used to assign person names that reference Active Directory. You must enable synchronization for each field for each team project collection that contains the custom fields.

https://msdn.microsoft.com/en-us/library/dd286562(v=vs.100).aspx