Fala pessoal,Recentemente precisei migrar servidor SharePoint para outro dominio, a tarefa mais problematica e a migracao de todos os usuarios de cada site collections em seus respectivos usuarios no novo dominio.Antes eu fiz um script SQL para substituir os usuarios diretamente no banco de dados, mas ainda assim havia problemas com Historico de SID, o SharePoint fornece uma funcao que faz isso, tanto via stsadm quanto programaticamente, vejam como ficaria com C#:foreach (SPUser user in web.AllUsers) { SPFarm farm = SPFarm.Local; string oldLogin = user.LoginName; string newLogin = user.LoginName.Replace(OldDomainName, NewDomainName); bool enforceSidHistory = request.EnforceSidHistory; farm.MigrateUserAccount(oldLogin, newLogin, enforceSidHistory); } Como precisei fazer isso algumas vezes, criei uma ferramenta para facilitar o trabalho, publiquei no GitHub, fiquem a vontade para utilizar o codigo fonte, sugerir melhorias ou ate submeter melhorias atravez do fork.Url do repositorio: https://github.com/davidsellen/SPMigrateUsersUtilityAte mais,David Sellen pre.source-code { font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; color: #000000; background-color: #eee; font-size: 12px; border: 1px dashed #999999; line-height: 14px; padding: 5px; overflow: auto; width: 100%}Estudo de casoConsidere um ambiente SharePoint 2013 cujo metodo de Autenticacao e feito atraves de custom token server (STS), como WIF por exemplo, e precisa combinar informacoes do Usuario que esta logando no sistema e realizar verificacoes de negocio para atualizar informacoes do usuario no site SharePoint antes que ele tenha acesso ao conteudo do site.Passo a passo:Obter claims do usuario LogadoHttpApplication application = (HttpApplication)sender;var context = application.Context;if (context == null) return;IPrincipal usuarioLogado = context.User;if (usuarioLogado == null) return;IIdentity identidadeUsuarioLogado = usuarioLogado.Identity;if (identidadeUsuarioLogado == null) return;if (!identidadeUsuarioLogado.IsAuthenticated) return;ClaimsIdentity claimsIdentidade = identidadeUsuarioLogado as ClaimsIdentity;Selecionar claim do Identity ProviderClaim claimIdp = claims.FirstOrDefault(c => c.ClaimType.EndsWith(claimType, StringComparison.OrdinalIgnoreCase));Selecionar claim do NameIdentifierClaim claimIdf = claims.FirstOrDefault(c => c.ClaimType == ClaimTypes.NameIdentifier);Converter claimIdf em SPClaimSPClaim spClaim = SPClaimProviderManager.CreateUserClaim(claimIdf.Value, SPOriginalIssuerType.TrustedProvider, claimIdp.Value);Obter claim codificadastring encodedClaim = spClaim.ToEncodedString();Acessar instancia do site para obter objeto SPUserusing (SPSite site = new SPSite(siteUrl))using (SPWeb web = site.OpenWeb()){ SPUser spUser = web.EnsureUser(encodedClaim);}O codigo acima foi utilizado em um HTTPModule durante o evento AuthorizeRequest. Com isso, conseguimos obter e validar informacoes de usuarios do provedor de autenticacao externo para a base do site SharePoint. Este ano eu iniciei uma serie de estudos para aperfeicoar meus conhecimentos e habilidades com desenvolvimento de sistemas, um dos livros escolhidos foi sobre refactory:Refactoring: Improving the Design of Existing CodeEste livro ensina como melhorar o codigo de um projeto existente. Nele, voce vai aprender como melhorar o codigo fonte de um sistema, melhorando a estrutura interna sem alterar o comportamento externo das funcionalidades.O livro oferece uma discussao aprofundada dos principios envolvidos no refactory, mostra como detectar oportunidades para refactory e como configurar os testes necessarios. Ha tambem um catalogo de mais de 40 refatoracoes comprovada com detalhes a respeito de quando e por que usar o refactoring, instrucoes passo a passo para a sua aplicacao, e exemplos que ilustram o funcionamento.Os codigos de exemplo sao escritos em java, mas as ideias podem ser utilizadas em qualquer linguagem orientada a objetos, no meu caso, codifiquei alguns exemplos em C# para observar a evolucao de um codigo sujo a um codigo limpo, legivel e facil de manter.Donwload codigo de exemplo em C#(function(d, s,