我正在处理一段可扩展性代码,该代码检索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时,我收到以下错误:
对于为什么会发生这种情况,我有点神秘,因为我已经将一个Change Record工作项类型加载到TFS中。请参阅下面的XML片段和截图:' Microsoft.TeamFoundation.WorkItemTracking.Client.WorkItemTypeDeniedOrNotExistException' 发生在Microsoft.TeamFoundation.WorkItemTracking.Client.dll
中其他信息:TF201077:找不到工作项类型。 它可能已被重命名或销毁。
<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错误?
答案 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);