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

Да, мощные возможности предоставляет Visual Studio для создания своих собственных компонентов подключаемых к ролеориентированному клиенту. Но технология эта новая, а значит самих компонентов на рынке пока крайне мало. Однако на рынке полно компонентов ActiveX (в том числе бесплатных). Можно ли их использовать в качестве подключаемых компонентов?

MSDN говорит, что можно. Попробуем в этом убедиться на примере Microsoft Office Visio 2007 Viewer.

В первую очередь нужно создать новый проект NAV4U.VisioViewer. Как создавать и подписывать проекты было рассказано здесь.

Далее надо преобразовать определения типов из библиотеки COM-типов элементов управления ActiveX в элементы управления Windows Forms. Для этого используется программа импорта элементов ActiveX в Windows Forms (Aximp.exe). Она поставляется вместе с Visual Studio.

Откройте в проводнике папку C:\Program Files\Microsoft Office\Office12 (наверное не нужно говорить, что на компьютере должен быть установлен Microsoft Office 2007?). Найдите в папке файл VVIEWER.DLL и скопируйте его в папку вашего проекта.

У меня проект находится здесь:
C:\Users\apanko\Documents\Visual Studio 2008\Projects\NAV4U.VisioViewer

Далее откройте Visual Studio Command Prompt и выполните команду: AxImp.exe vviewer.dll /keyfile:”C:\…..\….snk”
Где C:\…..\….snk путь к файлу, содержащему строгий ключ (файл генерируется при подписывании сборки, как подписывать сборки было рассказано в первой статье).

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

Visual Studio Command Prompt 

Программа сгенерирует две сборки:

  • VisioViewer.dll - Прокси среды CLR для COM-типов
  • AxVisioViewer.dll - Прокси Windows Forms для элементов управления ActiveX (Ax обозначает ActiveX)

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

 Add Reference

Хочу сразу предупредить, что мне не удалось использовать уже привычную нам конструкцию:

override protected Control CreateControl() 
 { 
    AxVisioViewer.AxViewer VVcontrol = new AxVisioViewer.AxViewer(); 
    VVcontrol.CreateControl(); 
    VVcontrol.Load(@"C:\111\Scheme.vsd"); 
    return VVControl; 
 }

Хотя ролеориентированный клиент запускался, файл в компонент не загружался. Пришлось применить хитрость.
Хитрость заключалась в том, что был использован промежуточный элемент управления типа контейнер. А уже в этот контейнер был добавлен элемент управления AxViewer.

Ниже я приведу весь код подключаемого компонента:

namespace NAV4U.VisioViewer 
{ 
  [ControlAddInExport("NAV4U.VisioViewer")] 
  public class apVisioViewer : WinFormsControlAddInBase 
  { 
    override protected Control CreateControl() 
    { 
      AxVisioViewer.AxViewer VVcontrol = new AxVisioViewer.AxViewer();            
 
      Panel panel1 = new Panel(); 
      panel1.Dock = DockStyle.Fill; 
      panel1.ControlAdded += new ControlEventHandler(panel1_ControlAdded); 
      panel1.Controls.Add(VVcontrol); 
      return panel1; 
    }

В методе CreateControl создается элемент управления Panel. Это элемент управления будет автоматически заполнять все отведенное ему пространство (за это отвечает свойство Dock). Дальше мы подписали наш класс на событие ControlAdded. И в конце добавили элемент управления AxViewer в контейнер Panel.

    public void panel1_ControlAdded(Object sender, ControlEventArgs e) 
    { 
      if (e.Control.GetType() == typeof(AxVisioViewer.AxViewer)) 
      { 
        AxVisioViewer.AxViewer VVcontrol = (AxVisioViewer.AxViewer)e.Control; 
        VVcontrol.CreateControl(); 
        VVcontrol.Load(@"C:\111\Scheme.vsd"); 
        VVcontrol.Dock = DockStyle.Fill; 
      } 
    } 
  } 
}

При добавлении элемента управления в контейнер происходит вызов метода panel1_ControlAdded, в котором и выполняется инициализация компонента AxViewer, а также осуществляется загрузка файла. Как мы помним из предыдущей статьи перед подобными операциями следует выполнить проверку на соответствие типов. За эту проверку отвечает условие if.

Важно! После того как проект собран его нужно поместить в каталог C:\Program Files\Microsoft Dynamics NAV\60\RoleTailored Client\Add-ins. В данном случае кроме главной библиотеки - NAV4U.VisioViewer.dll – также нужно скопировать файлы AxVisioViewer.dll и VisioViewer.dll.

Вот как выглядит компонент AxViewer интегрированный в ролевой центр.

Ролеориентированный клиент

Метки:



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