【问题标题】:How to get TimeFrame (current or future) for a VSTS iteration如何获取 VSTS 迭代的 TimeFrame(当前或未来)
【发布时间】:2018-12-25 16:30:18
【问题描述】:

我正在使用 VSTS REST API 来获取某个项目的迭代。我要弄清楚的是“当前迭代”。

 var vstsConnection = new VssConnection(new Uri(VstsUrl), new VssBasicCredential(string.Empty, VstsPAT));
            var witClient = vstsConnection.GetClient<WorkItemTrackingHttpClient>();
//get current iteration in VS
            var iterations = witClient.GetClassificationNodeAsync(project: VstsProject, structureGroup: Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.TreeStructureGroup.Iterations, depth: 5).Result;


 // i could iterate over the iterations but i'll just get the first one for now..      
            var attributes = iterations.Children.FirstOrDefault().Attributes;

这里的属性只给了我开始日期和结束日期。我感兴趣的是“时间框架”告诉我它是当前的还是未来的。

通过调用https://dev.azure.com/{organization}/{project}/{teamid}/_apis/work/teamsettings/iterations

我确实得到了 3 个字段:

{"count":3,"value":[{"id":"f2ac8484-de34-4d5c-8838-cd388a952257","name":"Iteration 1","path":"Web And Mobile Team - Project Documentation\\Iteration 1","attributes":{"startDate":"2018-12-24T00:00:00Z","finishDate":"2018-12-31T00:00:00Z","timeFrame":"current"},"url":"https://url/_apis/work/teamsettings/iterations/f2ac8484-de34-4d5c-8838-cd388a952257"},{"id":"f57903a8-22e5-474a-a450-a7401a53511e","name":"Iteration 2","path":"Web And Mobile Team - Project Documentation\\Iteration 2","attributes":{"startDate":null,"finishDate":null,"**timeFrame**":"future"},"url":"url/_apis/work/teamsettings/iterations/f57903a8-22e5-474a-a450-a7401a53511e"},{"id":"2cfc4be3-0665-46de-81e0-0302138bd276","name":"Iteration 3","path":"Web And Mobile Team - Project Documentation\\Iteration 3","attributes":{"startDate":null,"finishDate":null,"**timeFrame**":"future"},"url":"url/_apis/work/teamsettings/iterations/2cfc4be3-0665-46de-81e0-0302138bd276"}]}

任何帮助将不胜感激。

【问题讨论】:

    标签: c# azure-devops


    【解决方案1】:

    试试这个例子:

    string projectName = ""; // your project
    string teamName = null; //change it for nondefault team 
    
    var WorkClient = Connection.GetClient<WorkHttpClient>();
    TeamContext tcx = new TeamContext(projectName, teamName);
    
    TeamSetting tmsettings = WorkClient.GetTeamSettingsAsync(tcx).Result; // current iteration without dates
    
    Console.WriteLine("Current Iteration: {0} - {1}", tmsettings.DefaultIteration.Name, tmsettings.DefaultIteration.Path);
    
    List<TeamSettingsIteration> iterations = WorkClient.GetTeamIterationsAsync(tcx).Result;  // full information for iterations
    
    foreach (TeamSettingsIteration iteration in iterations)
         Console.WriteLine("{0}: {1} : {2}-{3}", iteration.Attributes.TimeFrame, iteration.Name, iteration.Attributes.StartDate, iteration.Attributes.FinishDate);
    
    TeamSettingsIteration currentiteration = (WorkClient.GetTeamIterationsAsync(tcx, "Current").Result).FirstOrDefault(); // get only current
    
    if (currentiteration != null) Console.WriteLine("Current iteration - {0} : {1}-{2}", currentiteration.Name, currentiteration.Attributes.StartDate, currentiteration.Attributes.FinishDate);
    

    【讨论】:

    • 谢谢,但这是给 TFS 团队的。我在线使用 Azure DevOps Visual Studio,但略有不同。示例:我没有用于 workClient..的 GetTeamIterationsAsync 方法。
    • 不,我已经在 Azure DevOps Services 上对此进行了测试。检查您的“Microsoft.TeamFoundationServer.Client”nuget 包。我用的是最后一个版本:15.131.1
    【解决方案2】:

    在 REST Api 中,您可以添加属性 $timeframe=current,您将获得当前迭代:

    https://dev.azure.com/{organization}/{project}/{teamid}/_apis/work/teamsettings/iterations?$timeframe=current&api-version=4.0
    

    【讨论】:

    • 谢谢,我知道,调用 api 会返回时间范围,但是,使用 client.GetClassificationNodeAsync,我看不到时间范围..我在哪里可以启用它?
    • 因为 WorkItemClassificationNode 不包含 timeframe 属性。您可以使用 WorkHttpClient 从团队设置中获取它。您可能会在 Shayki 示例 url 中看到这一点。因此,您的迭代必须包含在某个团队中(如默认),然后您可以识别迭代。解决方法:只需将迭代日期与 Datetime.Now ))) 进行比较
    猜你喜欢
    • 2018-06-01
    • 2022-11-20
    • 2018-11-15
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 2017-01-24
    • 2015-10-03
    • 2020-10-02
    相关资源
    最近更新 更多