【问题标题】:TFS 2012 Extensibility - TF201077 Work Item Type cannot be foundTFS 2012 可扩展性 - 找不到 TF201077 工作项类型
【发布时间】:2014-07-20 16:00:36
【问题描述】:

我正在编写一段可扩展性代码,该代码检索自定义工作项类型的 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:找不到工作项类型。 它可能已被重命名或销毁。

我对为什么会发生这种情况有些困惑,因为我已经将更改记录工作项类型加载到 TFS 中。请参阅下面的 XML 和屏幕截图的 sn-p:

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

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

【问题讨论】:

  • 由于您已经证明该项目退出,我猜您处于此错误的“拒绝”部分。您能否验证用于 C# 请求的帐户是否具有对工作项的完全访问权限。据我所知,简单的写入或读取权限是不够的。
  • @Herdo 我已经用我的 TfsService 帐户和我的个人 TFS 帐户(这是一个项目管理员)尝试了这个,并且都遇到了同样的问题。
  • 您是否尝试过删除 where 子句(或将其替换为 id 检查)以查看是否可以检索任何工作项?

标签: c# tfs


【解决方案1】:

直接将更改编号添加到查询中并仅检查结果计数如何?那么就没有必要遍历所有的变更记录,未来可能会得到很多。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-17
    • 1970-01-01
    • 2014-02-05
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    相关资源
    最近更新 更多