Разработка
24
Сен
0

Клиентская логика форм CRM на C# при помощи Silverlight

Сервелат — деликатесный сорт копчёной сухой колбасы 🙂

Обычно для добавления бизнес-логики на формы MS CRM используются события формы CRM (Onload/OnSave/OnChange) и JavaScript-код. Сейчас рассмотрим другой способ – Silverlight и C#.

Silverlight — это плагин для браузера от компании Microsoft, который позволяет запускать приложения написанные на языках .NET, содержащие анимацию, векторную графику и аудио-видео ролики.

В основном мы получаем тут два преимущества:

  1. Программирование: можно писать на более продвинутых языках, например, C# (вместо JavaScript);
  2. Производительность: Silverlight выполняет cкомпилированный C# код на клиенте. JavaScript – интерпретируемый язык и следовательно более медленный в производительности.

В данном примере реализуем очень простую логику: если значение поля изменено – устанавливаем значение другого поля.

Нам потребуется следующие компоненты (скачайте и установите, если у Вас еще нет 🙂 ):

  1. Visual Studio 2010;
  2. Silverlight 4 Tools for Visual Studio 2010.

Начнем:

  • Создайте в VS 2010 новый Silverlight проект: File — New — Project — выберите шаблон Silverlight Application и поставьте для него .Net Framework 3.5 — Ok- в открывшемся диалоговом окне снимите галку Host the Silverlight application in a new Web site и в качестве версии Silverlight выберите 4 — Ok;
  • Запустите один раз проект на выполнение: Debug — Start Debugging. Это нужно для того, чтобы сформировать в проекте тестовую HTML-страницу хостирующую Silverlight-компонент. Закройте открывшеся окно IE с пустым проектом Silverlight 🙂 Далее в вернитесь в VS и в Solution Explorer нажмите кнопку Shaw All Files — разверните узел Bin, а затем Debug — скопируйте страницу SilverlightApplication4TestPage.html (у Вас она может называться по другом — зависит от названия проекта) и вставьте обратно в папку Debug — переименуйте скопированную HTML-страницу в SilverlightTest.html (позже она будет добавлена на форму CRM через IFrame). Щелкните правой кнопкой мыши по файлу SilverlightTest.html в Solution Explorer и в контекстном меню выберите Include In Project;
  • Теперь займемся добавление бизнес-логики:
    • Добаьте в объявления следующее пространство имен:
      using System.Windows.Browser;
      
    • Откройте файл MainPage.xaml.cs и над классом public partial class MainPage : UserControl добавьте такую строчку:
      [ScriptableType()]
      

      Это строчка говорит надстройке Silverlight, что в данном классе будут содержаться методы доступные со страницы HTML (т.е. извне). В обычной ситуации из-за соображений безопасности нельзя обращаться к методом Silverlight из вне 🙂

    • Далее, внутрь класса MainPage добавьте такой метод:
      [ScriptableMember()]
      public string calculateRating(int creditScore)
      {
      	string creditRating;
      
      	if (creditScore <= 500)
      		creditRating = "Bad";
      	else if (creditScore > 500 && creditScore <= 700)
      		creditRating = "Good";
      	else
      		creditRating = "Excellent";       
      
      	return creditRating;
      }
      

      Здесь, вначале, с помощью инструкции [ScriptableMember()] мы определяем метод класса, доступный из страницы HTML. А в сам метод, принимает числовое значение и в зависимости от его велечины возвращает определенную строковую константу;

    • В конце конструктора public MainPage() добавьте такую строчку:
      HtmlPage.RegisterScriptableObject("basic", this);
      

      Эта строка обявляет объект (в данном случае это «basic»), через который из вне можно получить доступ к расшаренным методам, расшаренного класса 🙂







  • С логикой вроде все — займесмся публикацией:
    • Соберите проект: Build — Build <Имя проекта>;
    • Перейдите в папку проекта, далее \Bin\Debug. Скопируйте в папку ISV\SilverlightTest (которую предварительно создайте) следующие файлы:
      • SilverlightApplication4.xap;
      • SilverlightTest.html.
    • Откройте CRM и на карточке нужного Вам объекта (например, Бизнес-партнера) добавьте новый iFrame с такими параметрами:
      • Имя: silverlight;
      • URL: /isv/SilverlightTest/SilverlightTest.html;
      • Снимите галку ограничивающую использование сценариев.
    • Далее нужно как-то задействовать код Silverlight’а. Я поместил на событие onChange поля Число сотрудников такой скрипт:
      silverLightControl = window.frames['IFRAME_silverlighttest'].document.getElementById('silverlightControlHost').firstChild;
      var score = crmForm.all.numberofemployees.DataValue;
      var rating = silverLightControl.Content.basic.calculateRating(score);
      crmForm.all.sic.DataValue = rating;
      

      Этот скрипт при изменении значения в поле Число сотрудников подключается к компоненту Silverlight, расположенному в iFrame. Далее через объект basic передает методу calculateRating число, введенное в поле Число сотрудников. После обработки полученного значения на форму CRM будет возвращен результат в виде строки, которая и будет установлена в поле Код отрасли.

  • Тестируем: откройте форму Бизнес-партнера — установите значение в поле Число сотрудников, это запустит событие OnChange’а и выполнение скрипта 🙂







З.Ы. За ненадобностью, iFrame можно скрыть 🙂

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

*

code