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

Anúncios

Sobre Tiago Michelini Cardoso

I have been working with IT since 2006, almost of this time using Microsoft Dynamics CRM/365 as a source of solutions. I graduated in Bachelor of Information Systems at FIAP (Brazil) in 2012. I really love what I do! Technology has been my interest since always. Even in a tool different world of the current. When we didn't have internet, tablets, smartphones e social networks! Although I have worked in some roles, I can't give up "the developer life". Even so far of the greatest developers. Development in general is the thing that I love to work! I started my contributions about Dynamics in 2010. At the beginning, I used to help at MSDN and TechNet forums. But now, I'm dedicating all my time in my personal blog! Currently, I have the enormous honour of being the only Brazilian who got the award for Microsoft MVP (Most Valuable Professional) for Microsoft Dynamics CRM/365 product. I have been receiving the award since 2012.
Esse post foi publicado em Dynamics CRM e marcado , . Guardar link permanente.

Deixe um comentário

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

Logotipo do WordPress.com

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

Imagem do Twitter

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

Foto do Facebook

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

Foto do Google+

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

Conectando a %s