如何获取VSTS / TFS标识的唯一显示名称?

时间:2018-04-20 19:32:55

标签: c# .net rest tfs azure-devops

我正在使用VSTS/TFS Rest .Net libraries编写.Net应用程序,并且在一个地方我需要更新工作项的System.AssignedTo字段值,而我确实希望遵守new(ish), unique displayname rules身份工作item字段,我很难找到一种方法来获取给定身份的唯一显示名称。

旧/客户端对象模型does have an explicit helper method以获取这些唯一名称,但我没有找到任何其他端点或客户端api方法来提供相同的名称。

所以我想知道,鉴于身份列表,我如何获得他们可以用来明确设置身份工作项字段的相应唯一显示名称?

3 个答案:

答案 0 :(得分:0)

您可以尝试以下代码获取唯一名称:

using System;

using System.Collections.Generic;

using Microsoft.TeamFoundation.Client;

using Microsoft.TeamFoundation.Framework.Client;

using Microsoft.TeamFoundation.Framework.Common;

namespace ConsoleApplication3

{

    class Program

    {
        static void Main(string[] args)

        {

            TfsConfigurationServer tcs = new TfsConfigurationServer(new Uri("http://tfsserver:8080/tfs"));

            IIdentityManagementService ims = tcs.GetService<IIdentityManagementService>();

            TeamFoundationIdentity tfi = ims.ReadIdentity(IdentitySearchFactor.AccountName, "[TEAM FOUNDATION]\\Team Foundation Valid Users", MembershipQuery.Expanded, ReadIdentityOptions.None);

            TeamFoundationIdentity[] ids = ims.ReadIdentities(tfi.Members, MembershipQuery.None, ReadIdentityOptions.None);

            foreach (TeamFoundationIdentity id in ids)

            {
                if (id.Descriptor.IdentityType == "System.Security.Principal.WindowsIdentity")

                {
                    Console.WriteLine(id.DisplayName);
                    Console.WriteLine(id.UniqueName);
                }

            }

            Console.ReadLine();

        }
    }
}

答案 1 :(得分:0)

            String collectionUri = "http://collectionurl/";
            VssCredentials creds = new VssClientCredentials();
            creds.Storage = new VssClientCredentialStorage();
            VssConnection connection = new VssConnection(new Uri(collectionUri), creds);
            TeamHttpClient thc = connection.GetClient<TeamHttpClient>();
            List<IdentityRef> irs = thc.GetTeamMembersAsync("ProjectName","TeamName").Result;
            foreach (IdentityRef ir in irs)
            {
                Console.WriteLine(ir.UniqueName);
                Console.WriteLine(ir.DisplayName);
            }

答案 2 :(得分:0)

foreach (var workItem in workItems)
{
     if (workItem.Fields.ContainsKey("System.AssignedTo"))
     {
         var person = (IdentityRef)workItem.Fields["System.AssignedTo"];
         string codereview_reviewer = person.DisplayName;
          Console.WriteLine(codereview_reviewer);
     }
}