Nas consultorias que faço aqui na Lambda3, quando falamos de WorkItems no TFS, uma das perguntas que os clientes mais fazem é:

(…) Quero mandar o email para o dono do WorkItem (AssignedTo). Como a partir do nome do usuário, consigo encontrar o seu email?

Mediante a essa dúvida, surgiu a oportunidade de escrever esse post. Então vamos à solução 🙂

Buscando o email do AssignedTo de um WorkItem

Para a resolução dessa dúvida, você deverá criar uma solution no seu Visual Studio e incluir as seguintes referências:

using Microsoft.TeamFoundation.Client;
using Microsoft.TeamFoundation.Framework.Client;
using Microsoft.TeamFoundation.Server;
using Microsoft.TeamFoundation.WorkItemTracking.Client;

Depois faça a conexão com o seu TFS:

//conectar Server TFS
TfsConfigurationServer configSvr = new TfsConfigurationServer(new Uri("http://server:8080/tfs/"));

//Conectar Collection
TfsTeamProjectCollection tfs = new TfsTeamProjectCollection(new Uri("http://server:8080/tfs/Collection"));

//Conectar TeamFoundationRegistry
ITeamFoundationRegistry regSvc = configSvr.GetService<ITeamFoundationRegistry>();

//Conectar User Identity
IIdentityManagementService mgmsvc = configSvr.GetService<IIdentitymanagementservice>();

//Buscar servidor SMTP configurado no Admin Console
string smtpHost = regSvc.GetValue(@"/Service/Integration/Settings/SmtpServer");

//Buscar mailFrom configurado no Admin Console
string fromAddress = regSvc.GetValue(@"/Service/Integration/Settings/EmailNotificationFromAddress");

Depois das configurações iniciais, basta acessar o WorkItem e buscar o campo AssignedTo:

//WorkItemStore
WorkItemStore wis = tpc.GetService<WorkItemStore>();

//Buscar WorkItem
WorkItem wi = wis.GetWorkItem(workItemID);

//Acessar campo AssignedTo
var userId = wi.Fields["Assigned To"].Value.ToString();

//Buscar atributo Mail
var member = mgmsvc.ReadIdentity(IdentitySearchFactor.DisplayName, userId, MembershipQuery.Direct, ReadIdentityOptions.ExtendedProperties);
var toAddress = member.GetAttribute("Mail", null);

Com todas as confiurações criadas, basta então utilizar os objetos para envio de email:

var smtp = new SmtpClient(smtpHost);
var mailBody = new StringBuilder();
var mail = new MailMessage();
mail.From = new MailAddress(fromAddress);
mail.Subject = "Subjects email";
mail.To.Add(new MailAddress(toAddress));
mailBody.Append("Mensagem: ");
mail.Body = mailBody.ToString();
mail.IsBodyHtml = true;
smtp.Port = 25;
smtp.SendMailAsync(mail);

Espero que tenham gostado,

Até o próximo post,

Um abraço,

Vinicius Moura.

Vinicius Moura

Consultor ALM na empresa Lambda3. Formado em Tecnologia da Informação pela Universidade Presbiteriana Mackenzie. Pós graduado em Gestão de Tecnologia da Informação pela FIAP. Certificação Microsoft 70-512 Visual Studio Team Foundation Server 2010, Administration