Разработка
18
Май
1

Shared Projects и плагины CRM

Начиная с 2015 версии в Visual Studio появилась новая функция – Shared Projects. Как понятно из названия, предназначена она для написания кода совместно используемого в различных проектах. И данная функция будет очень полезна при разработке плагинов и кастомных БП в CRM. Как Вы знаете, добавить ссылки на другие библиотеки в плагинах CRM можно только двумя способами: разместить эту стороннюю сборку в GAC’е, либо смёрджить их в одну сборку с помощью утилиты ILMerge.

Теперь у нас есть третий вариант: Вы можете создать одну библиотеку с общими методами в Shared Projects и ссылаться на них в Ваших плагинах. А после компиляции Visual Studio самостоятельно поместить все этим методы в одну сборку с плагином.

Посмотрим как это сделать:

  • Создайте новый проект Shared Projects. Добавьте в него новый класс с таким кодом:
    using Microsoft.Crm.Sdk.Messages;
    using Microsoft.Xrm.Sdk;
    
    namespace CRM.Common
    {
        public static class Utils
        {
            public static string Version (IOrganizationService service)
            {
                RetrieveVersionRequest versionRequest = new RetrieveVersionRequest();
                RetrieveVersionResponse versionResponse = (RetrieveVersionResponse)service.Execute(versionRequest);
                string version = versionResponse.Version;
                return version;
            }
        }
    }
    

    Здесь у нас один единственный метод, который принимает Organization Service, выполняет запрос в CRM и возвращает номер версии CRM.

  • Добавьте в решение еще один проект – Class Library – для нашего плагина.
    • Добавьте в него ссылки на библиотеки CRM, а также на созданный ранее Shared Projects.
    • Поместите в него такой код:
      using System;
      using Microsoft.Xrm.Sdk;
      using static CRM.Common.Utils;
      
      namespace CRM.MyPlg
      {
          public class MyPlg : IPlugin
          {
              public void Execute(IServiceProvider serviceProvider)
              {
                  IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
                  IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                  IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
      
                  string version = Version(service);
                  throw new InvalidPluginExecutionException(version);
              }
          }
      }
      

      Тут у нас происходит вызов метода из Shared Projects и вывод полученного ответа в Exception.

  • Скомпилируйте и зарегистрируйте плагин в CRM.



З.Ы. Shared Projects доступны и для Visual Studio 2013, но как отдельное дополнение, которое Вы можете скачать отсюда: https://marketplace.visualstudio.com/items?itemName=KieranMockfordMSFT.SharedProjectReferenceManager

Комментарии (1)
  • magicandy 18.05.2017

    Рекомендую сделать ещё одну ремарку к статье, что Shared Projects ни разу не заменяют ИЛмердж или ГАК в случае с плагинами.
    http://axforum.info/forums/showthread.php?t=75855

*

code