Разработка
14
Июн
0

Программная выгрузка/загрузка кастомизации

Частенько приходится видеть различные способы синхронизации данных между продуктивной и тестовой средой или двумя продуктивными средами. Оставив в стороне вопрос переноса контента, расмотрим как с помощью C# и плагина (в Вашем случаи это может быть любой другой компонент) выгрузить и загрузить кастомизацию в CRM.

Экспорт всей кастомизации из CRM

Для этого используется используется класс ExportAllXmlRequest:

  • Для примера создаем плагин (подписываем его и подключаем сборки SDK) и вешаем на него такой код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Crm.Sdk;  
    using Microsoft.Crm.SdkTypeProxy;  
    using System.IO;
    using System.IO.Compression;
    
    namespace ClassLibrary2
    {
        public class ExportAll : IPlugin  
        {  
            public void Execute(IPluginExecutionContext context)  
            { 
                // Настраиваем CrmService
                ICrmService Service = context.CreateCrmService(true);
    
                // Вытаскиваем всю кастомизацию из CRM
                ExportAllXmlRequest request = new ExportAllXmlRequest();
                ExportAllXmlResponse response = Service.Execute(request) as ExportAllXmlResponse;
    
                // Создаем выходной файл
                byte[] data = Encoding.Default.GetBytes(response.ExportXml);
                
                string filePath = @"C:\test\customizations_backup.xml";
                if (File.Exists(filePath)) { File.Delete(filePath); }
                FileStream fs = File.Create(filePath);
                fs.Write(data, 0, data.Length);
                fs.Close();
    
                throw new Exception("Кастомизация выгружена");
            }
        }
    }
    
  • Регистрируем его в CRM и вызываем событие на которое он зарегин;
  • И смотрим папку выгрузки 🙂



Экспорт части кастомизации из CRM

Для выгрузки только части кастомизации используется другой класс – ExportXmlRequest – в котором Вы можете задать в свойстве ParameterXml объекты, которые хотите выгрузить:

  • Создаем плагин, подписываем его и подключаем сборки SDK. Вешаем на него такой код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Crm.Sdk;  
    using Microsoft.Crm.SdkTypeProxy;  
    using System.IO;
    using System.IO.Compression;
    
    namespace ClassLibrary2
    {
        public class ExportPart : IPlugin
        {
            public void Execute(IPluginExecutionContext context)
            {
                // Настраиваем CrmService
                ICrmService Service = context.CreateCrmService(true);
    
                ExportXmlRequest exportRequest = new ExportXmlRequest();
    
                // Определяем объекты CRM, которые хотим выгрузить
                exportRequest.ParameterXml = @"
                    <importexportxml>
                        <entities></entities>
                        <nodes>
                            <node>isvconfig</node>                                               
                        </nodes>
                        <securityroles></securityroles>
                        <settings></settings>
                        <workflows></workflows>
                    </importexportxml>
                ";
    
                // Выполняем запрос
                ExportXmlResponse isvconfigXml = (ExportXmlResponse)Service.Execute(exportRequest);
    
                // Создаем выходной файл
                byte[] data = Encoding.Default.GetBytes(isvconfigXml.ExportXml);
    
                string filePath = @"C:\test\customizations_backup_isv.xml";
                if (File.Exists(filePath)) { File.Delete(filePath); }
    
                FileStream fs = File.Create(filePath);
                fs.Write(data, 0, data.Length);
                fs.Close();
    
                throw new Exception("Кастомизация выгружена");
            }
        }
    }
    
  • Регистрируем в CRM и вызываем событие на которое он зарегин;
  • XML файлик должен быть в папке!



Импорт кастомизации в CRM

Ну, и наконец загрузка кастомизации в CRM. Для этого используется класс ImportAllXmlRequest (в коде также используется класс PublishAllXmlRequest для публикации загруженных настроек):

  • Создаем плагин и вешаем на него код:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Microsoft.Crm.Sdk;  
    using Microsoft.Crm.SdkTypeProxy;  
    using System.IO;
    using System.IO.Compression;
    
    namespace ClassLibrary2
    {
        public class ImportPublish : IPlugin  
        {  
            public void Execute(IPluginExecutionContext context)  
            {
                // Настраиваем CrmService
                ICrmService Service = context.CreateCrmService(true);
    
                // Считываем файл
                string filePath = @"C:\test\customizations_backup_isv.xml";
    
                FileStream fs = File.Open(filePath, FileMode.Open);
                byte[] data = new byte[fs.Length];
                fs.Read(data, 0, data.Length);
                fs.Close();
    
                // Загружаем кастомизацию в CRM и публикуем все настройки
                string customizationXml = Encoding.Default.GetString(data);
    
                if (!string.IsNullOrEmpty(customizationXml))
                {
                    ImportAllXmlRequest requestI = new ImportAllXmlRequest { CustomizationXml = customizationXml };
                    Service.Execute(requestI);
    
                    PublishAllXmlRequest requestP = new PublishAllXmlRequest();
                    Service.Execute(requestP);
                }
    
                throw new Exception("Кастомизация загружена и опубликована");
            }
        }
    }
    
  • Регистрируем его на какое-нибудь событие и вызываем это событие в CRM;
  • Ну, а результаты Вы увидите только если что-нибудь изменили в файле кастомизации 🙂


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

*

code