Разработка
31
Июл
0

Программное экспортирование неуправляемых решений

Ниже представлен код, который экспортирует из CRM на локальный диск все неуправляемые Решения. Его можно использовать в целях резервного копирования.

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

namespace ExportUnManagedSolutions
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1йфя\"ЦЫЧ", "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;

            // Запрос для возвращения Неуправляемых Решений
            QueryExpression query = new QueryExpression
            {
                EntityName = "solution",
                ColumnSet = new ColumnSet("friendlyname", "uniquename", "version"),
                Criteria = new FilterExpression()
                {
                    Conditions =
                    {
                        // ТОльк неуправляемые
                        new ConditionExpression("ismanaged", ConditionOperator.Equal, false),

                        // Исключаем также некоторые специальные стандратные Решения, которые помечены как неуправляемые, но не могут быть экспортированы
                        new ConditionExpression("uniquename", ConditionOperator.NotEqual, "Active"),
                        new ConditionExpression("uniquename", ConditionOperator.NotEqual, "Default"),
                        new ConditionExpression("uniquename", ConditionOperator.NotEqual, "Basic"),
                    }
                }
            };
            EntityCollection solutions = service.RetrieveMultiple(query);

            Console.WriteLine("Найдено Решений: " + solutions.Entities.Count);

            // Каждое найденное Решение выгружаем на локальный диск
            foreach (Entity s in solutions.Entities)
            {
                Console.WriteLine("Экспорт Решения: " + s["friendlyname"]);

                // Запрашиваем Решение
                ExportSolutionRequest request = new ExportSolutionRequest();
                request.Managed = false;
                request.SolutionName = (String)s["uniquename"];

                ExportSolutionResponse response = (ExportSolutionResponse)service.Execute(request);

                byte[] exportXml = response.ExportSolutionFile;
                string filename = (String)s["uniquename"] + " " + (String)s["version"] + ".zip";

                // Сохраняем на диске
                File.WriteAllBytes("c:\\test\\" + filename, exportXml);

                Console.WriteLine("Решение выгружено в {0}.", "c:\\test\\" + filename);
            }

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

Тут мы делаем следующее:

  • Подключаемся к CRM;
  • Запрашиваем в CRM все неуправляемые Решения (при это исключаем некоторые специфические неуправляемые Решения);
  • Просматриваем каждое найденное Решение и выгружаем на жесткий диск.


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

*

code