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

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

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

Начнем с того, что откроем Visual Studio 2008 и создадим новый C# - проект типа Class Library (File > New > Project). В открывшемся окне New Project введите название проекта. Microsoft рекомендует использовать следующий формат имени: МояКомпания.МойПродукт.RtcAddins.

New Project

Т.е. все подключаемые компоненты, связанные с одним продуктом (например, аддоном), рекомендуется помесщать в одну библиотеку.

И если в прошлой статье мы практически не соблюдали рекомендации, то в этой сделаем шаг навстречу стандартам и назовем проект: NAV4U.WebAddin.

До идеала пока далеко, но однозначно лучше, чем полный хаос.

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

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

  • System.Drawing
  • System.Windows.Forms

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

Итак, сейчас перед нами открыто окна для редактирования кода – Class1.cs. Class1.cs – это один из файлов входящих в проект. В проекте может быть несколько файлов это позволяет лучше управляться со структурой проекта. В данной статье мы используем эту возможность. Понятно, что в многофайловом проекте такое имя файла как class1 просто недопустимо.

Переименуем файл, для этого в окне Solution Explorer щелкните правой клавишей по файлу Class1.cs и выберите пункт Rename. Введите новое имя файла - WebAddin.cs

Rename File

Примечание. Чтобы вывести на экран окно Solution Explorer щелкните View > Solution Explorer (или воспользуйтесь комбинацией клавиш Ctrl + Alt + L).

В этом файле у нас будет находиться класс реализующий элемент управления. Добавьте определение класса в пространство имен NAV4U.WebAddin

 
  [ControlAddInExport("NAV4U.WebAddin")] 
  public class WebAddin : WinFormsControlAddInBase 
  { 
    protected override Control CreateControl() 
    { 
      var control = new apWebBrowser(); 
      control.MaximumSize = new Size(400, 200); 
      control.ScrollBarsEnabled = false; 
      control.ScriptErrorsSuppressed = true; 
      control.WebBrowserShortcutsEnabled = false; 
      return control; 
    } 
  }

Примечание. Не забудьте добавить using директиву для Microsoft.Dynamics.Framework.UI.Extensibility, Microsoft.Dynamics.Framework.UI.Extensibility.WinForms, System.Windows.Forms, System.Drawing.

Перед определением класса обязательно следует использовать атрибут ControlAddInExport с указанием названия подключаемого компонента (если рекомендуемый формат названия библиотеки - МояКомпания.МойПродукт.RtcAddins, то для названия самого компонента рекомендуется применять формат - МояКомпания.МойПродукт.МойКомпонент).

Обратите внимание, что в отличие от предыдущего примера в данном случае класс создается на базе класса WinFormsControlAddInBase, а не StringControlAddInBase.

Класс StringControlAddInBase является более “продвинутым” - он не только поддерживает отображение компонента, но также обеспечивает обмен данными между компонентом и ролеориентированным клиентом, и может вызывать триггер OnControlAddIn. Однако в данном примере эти возможности не нужны, поэтому будет использован более простой класс WinFormsControlAddInBase.

Примечание. Не пытайтесь на данном этапе использовать StringControlAddInBase, единственное чего вы добьетесь – это вылет приложения без объяснения причин. Причины будут объяснены в следующей статье , также будет предложено решение данной проблемы.

В конструкторе класса мы вновь решили использовать свой собственный класс – apWebBrowser.

На данном этапе данный класс еще не существует, поэтому попытка сборки проекта ни к чему не приведет. Далее мы рассмотрим этот класс внимательнее, т.к. именно он будет содержать всю функциональность.

Как уже говорилось выше, проект C# может состоять из нескольких файлов. Это упрощает структуру проекта. Сейчас мы создадим отдельный файл для класса apWebBrowser.

Щелкните Project > Add Class (если такого пункта нет – выберите Project > Add Component), оба открывают одно и тоже окно – Add New Item. Разница лишь в том, что в первом случае уже выбран шаблон Class, а во втором случае шаблон нужно выбрать самостоятельно:

New Item (Class)

В поле Templates выберите шаблон Class, в поле Name введите имя файла – apWebBrowser (имя файла может не совпадать с названием класса, тем более в одном файле может быть несколько классов). Щелкните кнопку Add, чтобы создать новый файл.

Добавьте новый класс apWebBrowser на базе класса WebBrowser (отображает html-документы и выполняет переход между ними):

 
  public class apWebBrowser : WebBrowser 
  { 
    private Uri ap_uri = new Uri("http://apanko.ru/apanko_last5.php");      
 
    public apWebBrowser() 
    { 
      this.Navigate(ap_uri); 
    } 
  }

Примечание. Не забудьте добавить using директиву для System.Windows.Forms.

В классе содержится закрытое свойство ap_uri типа Uri (Uniform Resource Identifier - унифицированный (единообразный) идентификатор ресурса).

Также в классе переопределен конструктор. В нем вызывается метод Navigate для перехода на страницу, указанную в поле ap_uri.

Теперь подпишем сборку. Для этого нужно открыть свойства проекта (щелкните Project > NAV4U.WebAddin Property).

В окне свойств проекта перейдите на закладку Signing и установите флаг в поле Sign the assembly.
После установки флага в поле Sign the assembly станет доступно поле Chose a strong name key file. Выберите в данном поле значение <New>.

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

Закроем окно свойств и осуществим сборку проекта. Для этого в Visual Studio щелкните Build > Build NAV4U.WebAddin.
Поместите сборку в каталог “C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins” (можно настроить автоматическое копирование см. в статье ССЫЛКА).

Теперь зарегистрируем подключаемый компонент в NAV 2009. Для этого нужно узнать Public Key Token (Маркер открытого ключа).

Запустите Visual Studio 2008 Command Prompt (Пуск > Microsoft Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 Command Prompt).

Введите в командную строку следующую команду:
sn –T “C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins\NAV4U.WebAddin.dll”

Strong Name

В данном случае Public Key Token - cd9aee5d8d268360, однако для вашей библиотеки он будет другим.
Итак, мы знаем имя подключаемого компонента и его 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.WebAddin
    • Public Key Token = cd9aee5d8d268360

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

  1. Щелкнуть Tools > Object Designer, откроется окно Object Designer.
  2. Нажать кнопку Page, чтобы отобразить список страниц.
  3. Щелкнуть кнопку New, чтобы открыть окно New Page. Выберите режим Create blank page.
  4. Откройте окно Properties (View > Properties), в свойстве PageType укажите значение CardPart. Закройте окно Properties.
  5. Щелкните View > C/AL Globals, создайте переменную aplink типа text30.
  6. В окне Page Designer введите элемент с параметрами: Type = Container, SubType = ContentArea.
  7. В окне Page Designer введите второй элемент, подичненный первому, с параметрами: Type = Field, SourceExpr = aplink.
  8. Установите курсор на второй строке и щелкните View > Properties, в свойстве ControlAddIn выберите созданный ранее подключаемый компонент.
  9. Сохраните страницу Id = 50006, Caption = NAV4U.WebAddin.

 Card Part

Теперь подключим созданную страницу как FactBox в ролевой центр. Так как в демонстрационной версии по умолчанию используется ролевой центр менеджера по продажам, то FactBox будем встраивать в него.

  1. В классическом клиенте Dynamics NAV 2009 щелкните Tools > Object Designer, откроется окно Object Designer.
  2. Нажать кнопку Page, чтобы отобразить список страниц.
  3. Найти страницу 9006 Order Processor Role Center и щелкнуть кнопку Edit.
  4. В Page Designer перейти на пустую строку.
  5. Добавить новый элемент с параметром Type = Part. Этот элемент подчинен элементу <Control1900724708> типа Group.
  6. Щелкнуть View > Properties, установите в свойстве PagePartID значение NAV4U.WebAddin.

 Role Center Page Designer

Запустите ролеориентированный клиент Microsoft Dynamics NAV 2009.

Role Center

Вот такой маленький Internet Explorer прямо внутри ролевого центра. Можно даже щелкнуть по ссылке.
В следующей статье мы расширим функциональность подключаемого компонента таким образом, чтобы он еще больше проник в ролеориентированный клиент NAV 2009.

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

Метки:



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

  1. apanko пишет:

    Кстати аналогичную задачу (но через RSS) решали тут: http://techblog.byllemos.com/2009/10/rss-reader-add-in/, http://techblog.byllemos.com/2009/10/using-the-rss-reader-add-in/

    Также в стандартную поставку входит аддин - RSS reader, который читает темы с https://community.dynamics.com/. Для дальнейшей информации см. объект Page 9175. Отдельно я бы обратил внимание на передаваемые этим аддином данные.

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