【问题标题】:Resolving TFS WorkItem Assigned-To and Created-By to email address将 TFS 工作项分配给和创建者解析到电子邮件地址
【发布时间】:2014-02-20 03:18:28
【问题描述】:

我正在使用 TFS 中的一些自定义报告。我有一组 WorkItem 实例,我想从中获取有关 Creator 和 Assigned-To 的信息。

WorkItem wi = GetWorkItem( ... );
String assignedTo = (String)wi.Fields[CoreField.AssignedTo].Value;
String createdBy  = (String)wi.Fields[CoreField.CreatedBy].Value;

问题在于这些字段是包含用户显示名称的原始字符串值。我必须存储我自己的数据库,将这些显示名称映射到他们的 Active Directory 身份(通过他们的用户名或电子邮件地址)。

显然维护我自己的并行用户数据库不是正确的方法 - 有没有其他方法可以从 wi.Fields[CoreField.AssignedTo].Value 获取安全身份对象,或者至少是用户的用户名或电子邮件地址?

【问题讨论】:

    标签: c# tfs azure-devops


    【解决方案1】:

    您可以使用IIdentityManagementService2 (http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.framework.client.iidentitymanagementservice2.aspx) 来获取有关使用显示名称的身份的详细信息。您可以采用与使用TfsTeamProjectCollection.GetService<IIdentityManagementService2>() 从项目集合对象中获取WorkItemStore 相同的方式获取服务。如果将AssignedTo 值转换为字符串,则可以使用以下代码获取身份:

    var identity = identityService.ReadIdentity(
                IdentitySearchFactor.DisplayName, 
                assignedTo, 
                MembershipQuery.Direct,
                ReadIdentityOptions.ExtendedProperties);
    

    其中assignedTo 是您从工作项的字段中检索到的显示名称的值。

    【讨论】:

    • 谢谢,这成功了。
    • 有没有办法使用某种方法获取实际用户名?上述解决方案在大多数情况下适用于我们,但在某些情况下,多个用户使用相同的显示名称,在这种情况下,我们得到 "com.microsoft.tfs.core.clients.webservices.IdentityManagementException: Multiple identities发现匹配因子值“””错误。
    • 您可能会使用ReadIdentities() 方法并将显示名称放入数组中(或其他东西,我不确定方法参数是什么)以返回多个身份符合条件的。
    猜你喜欢
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-27
    • 2022-11-02
    • 2019-04-03
    • 2011-05-14
    • 1970-01-01
    相关资源
    最近更新 更多