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