Программная выгрузка/загрузка кастомизации
Частенько приходится видеть различные способы синхронизации данных между продуктивной и тестовой средой или двумя продуктивными средами. Оставив в стороне вопрос переноса контента, расмотрим как с помощью 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;
- Ну, а результаты Вы увидите только если что-нибудь изменили в файле кастомизации 🙂