CRM 4 – Exclusão em Massa (Bulk Record Deletion)


Como já sabemos o CRM trabalha com uma camada intermediária para acesso ao Banco de Dados, que seriam os Web Services (CrmService e MetaData), concordo plenamente com a utilização desta arquitetura, porém em alguns casos podem nos atrapalhar.

Imaginem um cenário que tenham que apagar uma grande quantidade de registro de uma determinada entidade, e lembrando que os grids do CRM podem apenas listar de 250 em 250 registros por vez. Um grande trabalho manual teria que ser feito, correto? Porém foi pensado em uma forma de otimizar este tempo e automatizar as coisas.

Na versão 4 foi disponibilizado uma ferramenta para exclusão em massa, só que vem a má notícia… Esta ferramenta está apenas disponível para a versão ONLINE! Assim, amigos “On-Premises”, voltamos a estaca zero…rs

A forma para resolver isso é programando! Não são muitas linhas, iremos apenas criar um serviço de exclusão que será adicionado a fila de processos do CRM de forma assíncrona, veja um exemplo:

QueryExpression query = new QueryExpression();
query.EntityName = "account";
query.Criteria = new FilterExpression();
query.Criteria.FilterOperator = LogicalOperator.And;

BulkDeleteRequest request = new BulkDeleteRequest();
request.JobName = "Excluir todas as Contas";
request.QuerySet = new QueryBase[] { query };
request.SendEmailNotification = false;
request.ToRecipients = new Guid[0];
request.CCRecipients = new Guid[0];
request.RecurrencePattern = string.Empty;
request.StartDateTime = new CrmDateTime();
request.StartDateTime.Value = DateTime.Now.ToString("s");

BulkDeleteResponse response = (BulkDeleteResponse)SEU_WEB_SERVICE.Execute(request);

Basta executar este script e acompanhar a sua execução em Configurações > Gerenciamento de Dados > Exclusão em Massa de Registros.

O interessante é que podemos criar nossas queryExpressions, assim a exclusão pode seguir um determinado critério.

O único ponto negativo que encontrei foi a velocidade na execução, pode demorar um bom tempo dependendo da quantidade de registros, realizei um pesquisa que não encontrei nada que acelere o tempo a não ser criarmos threads com os jobs, ou seja, nós mesmos particionarmos os jobs, por exemplo de 10000 em 10000 registros por job, assim teríamos vários serviços rodando em paralelo assincronamente.

Nota: Na versão 2011 o “wizard” de exclusão em massa funciona em todos os modo do produto, eliminando o trabalho citado acima.

Alguns links, que discutem o assunto mais aprofundadamente:

http://archive.msdn.microsoft.com/crmbulkdelete
http://blog.customereffective.com/blog/2008/12/bulk-record-deletion-in-crm-40.html
http://blogs.msdn.com/b/crm/archive/2008/11/13/leveraging-bulk-delete-jobs-to-manage-system-job-log-records.aspx

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.