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…