【发布时间】: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 检查)以查看是否可以检索任何工作项?