Citando uma outra aplicação da ótima solução encontrada por Alberto Gemin, criarei este post, na verdade irei comentar o RevokeAccess (remover o acesso de registros compartilhados).
Pois em alguns momentos necessitamos compartilhar registros no CRM, porém o momento da remoção sempre é complicado, as vezes desejamos remover a permissão de usuário/equipe A, mas do usuário/equipe B não, ou ainda gerir este nível de permissão programaticamente, ou seja, através de codificação seja em uma importação de dados ou outra utilização.
Para remover acesso a um registro, necessitamos de dois métodos:
// Retorna uma lista contendo todos os objetos relacionados ao registro informado private PrincipalAccess[] GetPrincipals() { TargetOwnedDynamic target = new TargetOwnedDynamic(); target.EntityName = NOME_ENTIDADE; target.EntityId = ID_DO_REGISTRO_QUE_DESEJA_REMOVER_O_COMPARTILHAMENTO; RetrieveSharedPrincipalsAndAccessRequest retrieve = new RetrieveSharedPrincipalsAndAccessRequest(); retrieve.Target = target; RetrieveSharedPrincipalsAndAccessResponse retrieved = (RetrieveSharedPrincipalsAndAccessResponse)SEU_WEB_SERVICE.Execute(retrieve); return retrieved.PrincipalAccesses; } // Remove todos os objetos relacionados ao registro informado // ***Aqui poderiamos inserir qualquer regra de negócio desejada*** private void RemovePrincipals(PrincipalAccess[] principals) { TargetOwnedDynamic target = new TargetOwnedDynamic(); target.EntityName = NOME_ENTIDADE; target.EntityId = ID_DO_REGISTRO_QUE_DESEJA_REMOVER_O_COMPARTILHAMENTO; RevokeAccessRequest request = new RevokeAccessRequest(); request.Target = target; foreach (PrincipalAccess principal in principals) { request.Revokee = principal.Principal; RevokeAccessResponse response = (RevokeAccessResponse)SEU_WEB_SERVICE.Execute(request); } }
Com isso em mãos podemos realizar diversas funcionalidades, criando plugins e workflows customizados com ótimo controle as permissões.
Vale a dica…