NAV4U (онлайн-журнал) » Blog Archive » Расширение функциональности ролеориентированного клиента NAV 2009 с помощью подключаемых компонентов. Пример 1. Динамическое форматирование

Расширение функциональности ролеориентированного клиента NAV 2009 с помощью подключаемых компонентов. Пример 1. Динамическое форматирование

В данной статье мы начнем беседу об еще одном новшестве, появившемся в Dynamics NAV 2009 SP1 – подключаемых компонентах – addin’ах. С помощью этой технологии с ролеориентированным клиентом можно “творить чудеса” и добавлять в него возможности, ранее недоступные.

Итак, как было сказано выше, с версии Dynamics NAV 2009 SP1 в ролеориентированный клиент можно добавлять новые элементы управления. Спрашивается где их взять? Ответ точно такой же как и для OCX библиотек: купить у третьих лиц или написать самостоятельно.

Если с пунктом “купить” все ясно, то вот на пункте “написать” хотелось бы остановиться подробнее. В этом номере  планируется привести ряд примеров по созданию подключаемых компонентов.

Для начала подготовим рабочее место. Естественно нам потребуется Microsoft Dynamics NAV 2009 SP1.

Подключаемые компоненты можно создавать для ролеориентированного клиента, это указывает на то, что нам потребуется сам ролеориентированный клиент. Так же нам нужен Microsoft Dynamics NAV Server (напомню, что ролеориентированный клиент является элементом трехзвенной архитектуры и без сервера работать не будет). Кроме того, чтобы подключить новый компонент нам потребуется классический клиент (разработка по-прежнему ведется в классическом клиенте).

Но это еще не все. Подключаемый компонент мы будем создавать с помощью Visual Studio (сейчас без нее никуда, настоятельно рекомендую заняться изучением - в жизни пригодится). Получить бесплатную версию можно здесь: http://www.microsoft.com/express/download/ (нас интересует Visual Studio Express for C#).

Отдельно хочется обратить внимание, что для создания подключаемых компонентов нам потребуется специальная библиотека: Microsoft.Dynamics.Framework.UI.Extensibility.dll она входит в комплект поставки NAV 2009 SP1, и находится обычно здесь:

C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client.

Итак, приступим.

Откройте Visual Studio и создайте новый C#-проект StyleControl типа Class Library (File > New > Project).

New Project

Далее нужно добавить ссылки на ряд сборок, которые будут использованы в нашем проекте. Для этого нужно щелкнуть Project > Add Reference. Откроется окно Add Reference.

На закладке .NET выберите и добавьте ссылки на сборки, которые отвечают за базовую графическую функциональность и создание Windows интерфейса:

  • System.Drawing
  • System.Windows.Forms

Кроме этого нужно добавить ссылку на библиотеку Microsoft.Dynamics.Framework.UI.Extensibility.dll. Эта библиотека содержит реализацию интерфейсов для подключения компонентов. Для этого нужно щелкнуть Project > Add Reference, перейти на закладку Browse и выбрать нужную библиотеку.

Add Reference Browse

Теперь приступим непосредственно к работе с кодом. В начало файла Class1.cs нужно добавить следующие using директивы:

  1. using Microsoft.Dynamics.Framework.UI.Extensibility;
  2. using Microsoft.Dynamics.Framework.UI.Extensibility.WinForms;
  3. using System.Windows.Forms;
  4. using System.Drawing;

Эти директивы упрощают процесс написания кода, так как сообщают компилятору пространство имен, в котором нужно искать используемые классы и методы. Например, далее мы используем класс Size пространства имен System.Drawing. Т.к. мы используем using, то код можно писать следующим образом:

this.MinimumSize = new Size(50, 0);

Без директивы using мы должны были бы указать полный путь:

this.MinimumSize = new System.Drawing.Size(50, 0);

Не стоит путать директиву using с добавлением ссылок на сборки. Using – всего лишь способ не указывать каждый раз пространство имен.

Примечание. В отличие от C/AL в C# регистр имеет значение. Т.е. имена методов и переменных различаются по их регистру.

Далее создадим новый класс StyleControl на базе класса StringControlAddInBase

  [ControlAddInExport("NAV4U.StyleControl")]      
 
  public class StyleControl : StringControlAddInBase

Обратите внимание, что перед определением класса установлен атрибут ControlAddInExport (также можно использовать ControlAddInExportAttribute). Он сообщает ролеориентированному клиенту, что данный класс связан с подключаемым компонентом. Так как в сборке может быть несколько подключаемых компонентов, ролеориентированный клиент использует свойство Name атрибута ControlAddInExport чтобы определить какой именно класс следует использовать (в данном примере Name = NAV4U.StyleControl).

В созданный класс добавьте следующий код:

{      
 
  protected override Control CreateControl()      
 
  {      
 
    TextBox tbcontrol = new Textbox();      
 
    return tbcontrol;      
 
  }      
 
}

Мы переопределяем метод CreateControl базового класса и создаем новый элемент управления типа Textbox.

В класс StyleControl добавьте следующий код:

  public override string Value      
 
  {      
 
    get      
 
    {      
 
      return base.Value;      
 
    }      
 
    set      
 
    {      
 
      base.Value = value;      
 
      control_format();      
 
    }      
 
  }  private void control_format()      
 
  {      
 
    Double doubleVal;      
 
    if (!Double.TryParse(this.Value, out doubleVal)) { doubleVal = 0; }      
 
    if (doubleVal > 0)      
 
    {      
 
      this.Control.ForeColor = Color.Blue;      
 
      this.Control.Font = new Font("Tahoma", 9, FontStyle.Italic);      
 
    }      
 
    else      
 
    {      
 
      this.Control.ForeColor = Color.Red;      
 
      this.Control.Font = new Font("Tahoma", 9, FontStyle.Bold);      
 
    }      
 
  }

Сюда входит переопределенное свойство Value и новый метод control_format. control_format – это закрытый метод, который отвечает за форматирование элемента управления. Именно в нем используется свойство Value, на основании которого определяется цвет и другие параметры шрифта элемента управления.

Что и как делает метод control_format понятно, однако чтобы его вызвать пришлось переопределить свойство Value, унаследованное от базового класса. Свойство отличается от поля тем, что у него есть, так называемые, аксессоры: set и get. Они отвечают за запись значения в свойство и соответственно за извлечение значения.
Именно в аксессор set мы добавили вызов метода control_format.

С программированием все. Теперь сборку нужно подписать. Неподписанные сборки ролеориентированный клиент не воспринимает. В первую очередь это нужно для безопасности. Во-вторых, если используется несколько библиотек с одинаковыми элементами управления (в смысле с одинаковыми названиями), то без хеша открытого ключа клиент просто не знает какой именно компонент нужно использовать.

Чтобы подписать сборку нужно открыть свойства проекта, для этого щелкните Project > StyleControl Property.
В окне свойств проекта перейдите на закладку Signing и установите флаг в поле Sign the assembly.
После установки флага в поле Sign the assembly станет доступно поле Choose a strong name key file. Выберите в данном поле значение <New>.

Откроется окно Create Strong Name Key. В данном окне введите значение StyleControl в поле Key file name, уберите флаг из поля Protect my key file with a password. Щелкните кнопку OK, чтобы завершить создание нового ключа.

Signing

Пока открыто окно свойств проекта, рекомендуется сделать еще одну настройку, которая здорово облегчает процесс разработки и тестирования. Перейдите на закладку Build Events и в поле Post-build event command line введите следующую строку:

copy StyleControl.dll “C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins”

Данная командная строка говорит Visual Studio, что после осуществления сборки следует скопировать полученный файл в папку Add-ins. Ролеориентированный клиент ищет сборки именно в этом каталоге. Такая организация позволяет просто копировать файлы с подключаемыми компонентами, и освобождает от необходимости их регистрировать (помещать в GAC, например).

Файл сборки можно скопировать и в ручную, в моем случае он находится здесь:

C:\Users\apanko\Documents\Visual Studio 2008\Projects\StyleControl\StyleControl\bin\Debug

(при создании проекта можно указать, где этот проект должен находиться)

Теперь осуществим сборку. Для этого в Visual Studio щелкните Build > Build StyleControl.

Следующим шагом будет регистрация сборки в Microsoft Dynamics NAV 2009. Для этого нам потребуется имя дополнительного элемента управления, а также Public Key Token. Public Key Token – это небольшой хеш открытого ключа, который был создан при подписании сборки (в литературе также используется термин Маркер открытого ключа).

С именем проблем нет – именно его мы указали в атрибуте ControlAddInExport. А чтобы узнать Public Key Token придется прибегнуть к помощи утилиты Strong Name Utility, которая входит в Visual Studio SDK.
Данная утилита работает из командной строки. Поэтому запустите Visual Studio 2008 Command Prompt (Пуск > Microsoft Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 Command Prompt).

Введите в командную строку следующую команду: sn –T StyleControl.dll

Примечание. Visual Studio 2008 Command Prompt знает, где находится файл sn, а для StyleControl.dll нужно ввести полный путь или заранее перейти в требуемый каталог.

 Public key token

В данном случае Public Key Token - 3b6f42137ebdc243, однако для вашей библиотеки он будет другим.
Итак, мы знаем имя подключаемого компонента и его Public Key Token. Зарегистрируем компонент в Microsoft Dynamics NAV 2009. Для этого в классическом клиенте Dynamics NAV 2009 нужно:

  1. Щелкнуть Tools > Object Designer, откроется окно Object Designer.
  2. Нажать кнопку Table, чтобы отобразить список таблиц.
  3. Найти таблицу 2000000069 Client Add-in и щелкнуть кнопку Run
  4. Создать новую запись со следующими полями:
    • Control Add-in Name = NAV4U.StyleControl
    • Public Key Token = 3b6f42137ebdc243

 Client AddIn Table

Теперь встроим компонент в какую-нибудь страницу. Для этого в классическом клиенте Dynamics NAV 2009 нужно:

  1. Щелкнуть Tools > Object Designer, откроется окно Object Designer.
  2. Нажать кнопку Page, чтобы отобразить список страниц.
  3. Найти страницу 21 Customer Card и щелкнуть кнопку Design.
  4. Найти элемент <Credit Limit (LCY)> и щелкнуть View > Properties.
  5. В свойстве ControlAddIn выбрать подключаемый компонент NAV4U.StyleControl

 Add Client AddIn

Запустим ролеориентированный клиент и посмотрим как теперь выглядит страница. Напомню, что для того чтобы запустить страницы в версии NAV 2009 SP1 достаточно щелкнуть кнопку Run.

Попробуйте изменить значение в поле Credit Limit (LCY) и посмотрите, как меняется форматирование в зависимости от введенного значения.

Customer Card

Таким образом, с помощью подключаемого компонента мы добились более широких возможностей по оформлению, чем предоставляет собственная среда разработки Microsoft Dynamics NAV и в частности свойство Style появившееся в NAV 2009 SP1.

Примечание: вставить подключаемый компонент в табличную часть, к сожалению, не удастся. Кроме того нельзя использовать подключаемые компоненты в панели действий, строке команд, панели фильтров.

Благодарности.
Автор выражает признательность своему коллеге, Проценко Сергею, за помощь в написании статьи.

Метки:



Комментариев: 2

  1. Сергей Комков пишет:

    Здравствуйте Андрей,
    Слушал Ваше выступление на семинаре в Томске, произвело большое впечатление.
    Попытался произвести тест-драйв NAV Express но потерпел неудачу, мне дали только стандартную четверку. А диск, записанный вашим коллегой после семинара, у меня к сожалению, не читается.
    Вы не могли бы мне помочь? Демо база данных тоже крайне желательна.
    Благодарю Вас.

  2. apanko пишет:

    Ответил в почту.

Оставьте свой отзыв!