TFS 2012可扩展性 - 无法找到TF201077工作项类型

时间:2014-05-30 19:39:53

标签: c# tfs tfs2012

我正在处理一段可扩展性代码,该代码检索WorkItemCollection个自定义工作项类型,并尝试从中检查自定义字段。我已使用我的TfsService帐户从代码连接到TFS,并且我使用WorkItemStore对象使用静态WIQL字符串执行查询。查询返回一个结果(因为我目前在DEV中加载了一个测试更改记录)。

public bool ChangeExists(ChangeRecord record)
{
    var tfsChanges = wis.Query("SELECT * FROM WorkItems WHERE [Work Item Type] = 'Change Record'");

    foreach (WorkItem tfschg in tfsChanges)
    {
        if(tfschg.Fields["ABC.ReportingTeam.CustomFields.ChgNumber"].Value == record.ChangeNumber) //Error here
        {

            return true;
        }
    }
    return false;
}

执行代码时,WorkItemStore会返回WorkItemCollection。当我尝试访问集合中的任何WorkItem时,我收到以下错误:

  

' Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException'   发生在Microsoft.TeamFoundation.WorkItemTracking.Client.dll

中      

其他信息:TF201077:找不到工作项类型。   它可能已被重命名或销毁。

对于为什么会发生这种情况,我有点神秘,因为我已经将一个Change Record工作项类型加载到TFS中。请参阅下面的XML片段和截图:

<Witd:WITD application="Work item type editor" version="1.0" xmlns:Witd="http://schemas.microsoft.com/VisualStudio/2008/workitemtracking/typedef">
  <WORKITEMTYPE name="Change Record">
    <DESCRIPTION>Represents a Change Order in SDM </DESCRIPTION>
    <FIELDS>
      <FIELD name="Change Start Date" refname="ABC.ReportingTeam.CustomFields.ChgStartDate" type="DateTime" reportable="detail">
        <REQUIRED />
      </FIELD>
      <FIELD name="Change End Date" refname="ABC.ReportingTeam.CustomFields.ChgEndDate" type="DateTime" reportable="detail">
        <REQUIRED />
      </FIELD>
      <FIELD name="Change Number" refname="ABC.ReportingTeam.CustomFields.ChgNumber" type="String" reportable="detail" />
     </FIELDS>

Change Record exists in TFS

我的工作项类型存在,我的自定义字段存在,我的工作项模板已成功加载到TFS中。为什么我的代码会抛出DeniedOrDoesNotExist错误?

1 个答案:

答案 0 :(得分:0)

如何直接在查询中添加更改编号,只检查结果计数?然后没有必要遍历所有变更记录,未来可能会有很多变化。

var tfsChanges = wis.Query("SELECT * FROM WorkItems WHERE [Work Item Type] = 'Change Record' AND ["ABC.ReportingTeam.CustomFields.ChgNumber"] = '"+record.ChangeNumber+"'");

如果您确实有权限问题进行测试,请尝试获取您创建的其中一个更改记录并知道ID:

WorkItem wi = wis.GetWorkItem(WorkItemID);