Разработка
13
Окт
0

Массовое удаление записей с помощью C#

Пример программного выполнения запроса на массовое удаление записей. Массовое удаление намного лучше с точки зрения производительности, поскольку мы можем просто выполнить запрос, чтобы удалить записи множества объектов. И нас не нужно возвращать их все, чтобы затем по одиночке удалять в цикле.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Messages;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Client;
using System.ServiceModel;
using System.ServiceModel.Description;
using System.Runtime.Serialization;
using Microsoft.Crm.Sdk.Messages;
using System.Threading;

namespace BulkDelete
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2011");
            Uri uri = new Uri("http://win-ebu0m4kvf06/superfirma/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
            proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            IOrganizationService service = (IOrganizationService)proxy;

            Console.WriteLine("Удаляем все записи...");

            // Формируем запрос на массовое удаление
            BulkDeleteRequest request = new BulkDeleteRequest
            {
                JobName = "Удаляем все записи",
                ToRecipients = new Guid[] { },
                CCRecipients = new Guid[] { },
                RecurrencePattern = string.Empty,
                QuerySet = new QueryExpression[]
                {
                    new QueryExpression { EntityName = "account" },
                    new QueryExpression { EntityName = "contact" },
                    new QueryExpression { EntityName = "lead" }
                }
            };

            // Выполняем запрос и получаем его GUID
            BulkDeleteResponse response = (BulkDeleteResponse)service.Execute(request);
            Guid jobId = response.JobId;

            // Проверяем завершено ли удаление
            bool deleting = true;
            while (deleting)
            {
                Console.WriteLine("Все еще удаляется");
                Thread.Sleep(10000);    // Ожидаем еще 10 секунд

                QueryExpression query = new QueryExpression { EntityName = "bulkdeleteoperation" };
                query.Criteria.AddCondition("asyncoperationid", ConditionOperator.Equal, jobId);
                query.Criteria.AddCondition("statecode", ConditionOperator.Equal, 3);
                query.Criteria.AddCondition("statuscode", ConditionOperator.Equal, 30);

                EntityCollection results = service.RetrieveMultiple(query);
                if (results.Entities.Count > 0)
                {
                    Console.WriteLine("Удаление завершено");
                    deleting = false;
                }
            }

            Console.WriteLine("Press Enter");
            Console.ReadLine();
        }
    }
}


Комментарии (0)

*

code