Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 解析分配给电子邮件地址并由其创建的TFS工作项_C#_Tfs_Azure Devops - Fatal编程技术网

C# 解析分配给电子邮件地址并由其创建的TFS工作项

C# 解析分配给电子邮件地址并由其创建的TFS工作项,c#,tfs,azure-devops,C#,Tfs,Azure Devops,我正在使用TFS中的一些自定义报告。我有一组WorkItem实例,我想从中获取有关创建者的信息并分配给他们 WorkItem wi = GetWorkItem( ... ); String assignedTo = (String)wi.Fields[CoreField.AssignedTo].Value; String createdBy = (String)wi.Fields[CoreField.CreatedBy].Value; 问题是这些字段是原始字符串值,包含用户的显示名称。我必须

我正在使用TFS中的一些自定义报告。我有一组
WorkItem
实例,我想从中获取有关创建者的信息并分配给他们

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
获取安全标识对象,或者至少获取用户的用户名或电子邮件地址?

您可以使用
IIdentityManagementService2
()以便使用显示名称获取有关标识的详细信息。您可以使用
tfstreamprojectcollection.GetService()
以与从项目集合对象获取
WorkItemStore
相同的方式获取服务。如果将分配给的
值强制转换为字符串,则可以使用以下代码获取标识:

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

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

谢谢,这就完成了。是否有方法使用某种方法获取实际用户名?上述解决方案在大多数情况下都适用于我们,但在某些情况下,多个用户使用相同的显示名称,在这种情况下,我们会得到“com.microsoft.tfs.core.clients.webservices.IdentityManagementException:找到多个与因子值“”匹配的标识”错误。您可能会使用
readIdentifies()
method并在数组中抛出显示名称(或者别的什么,我不确定头顶上的方法参数是什么),以返回符合条件的多个标识。