WorkItemHttpClient-找不到TFS工作项或没有读取它的权限

时间:2019-02-13 07:23:00

标签: c# tfs tfs-sdk

请找到以下Wiql查询。 (获取某个日期至今的所有工作项)

 @"SELECT *  FROM WorkItems  WHERE [System.TeamProject] = '" + _teamProjectName + "'  and( [System.ChangedDate] >= '" + fromDate + "' and [System.ChangedDate] <= '" + toDate + "')  ORDER BY [System.AssignedTo]"

我正在按照以下代码从此查询中获取所有工作项。 (请让我知道查询是否正确)。但是,每当我尝试调用此功能GetWorkItemsAsync时,都会出现错误-

  

TFS工作项目“ xyz”不存在,或者您没有权限   阅读

本质上,fromDate是一周的开始,toDate是一周的结束。

 using (WorkItemTrackingHttpClient workItemTrackingHttpClient = connection.GetClient<WorkItemTrackingHttpClient>())
            {
                //execute the query to get the list of work items in the results
                WorkItemQueryResult workItemQueryResult = workItemTrackingHttpClient.QueryByWiqlAsync(wiql).Result;

                IEnumerable<WorkItemReference> workItemRefs = workItemQueryResult.WorkItems;


                List<DateTime> weekDatesToGetWorkItems = weekDates();


                foreach (var item in weekDatesToGetWorkItems)
                {
                    try
                    {

                        int skip = 0;
                        const int batchSize = 100;

                        do
                        {
                            workItemRefs = workItemQueryResult.WorkItems.Skip(skip).Take(batchSize);
                            if (workItemRefs.Any())
                            {
                                //Exception here
                                List<WorkItem> workItems = workItemTrackingHttpClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id), this.GetFieldNames(), item).Result;
                                }
                        }
                        while (workItemRefs.Count() == batchSize);

                    }
                    catch (Exception ex)
                    {
//// Always gives an exception for one of the workItem "TFS work item xyz does not exist or you don't have permission to read it"
                    }

                }
}

问题1: 您知道如何调试或解决上述异常吗?

问题2: 我已经尝试通过传递单个workitemId来使用GetWorkItemAsync获取workitem数据。此方法有效,但是我得到的数据未与最新数据同步,它始终为我提供直到上周的数据。有没有合适的方法来获取最新的?

在此问题上的任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

第二个问题我得到了答案。似乎我在时间部分上犯了一个愚蠢的错误。

我添加了时间戳值,现在我可以获取最新数据。

   List<WorkItem> workItems = workItemTrackingHttpClient.GetWorkItemsAsync(workItemRefs.Select(wir => wir.Id), this.GetFieldNames(),
 item.Add(new TimeStamp(23,59,59))).Result;
 //// Adding timestamp worked here.

因此,下次如果您坚持使用某些具有日期功能的东西,请不要忽略“时间”部分。 (很傻,但是总是被忽略)。

编码愉快!! 欢呼!