Татьяна Кочергина

Сегодня независимость от одной среды разработки и возможности для интеграции продукта с другими – свидетельство его высокого уровня. Развитие Prognoz Platform также идет в ногу со временем.

Для создания пользовательских приложений Prognoz Platform содержит широкий набор компонентов, позволяющих работать с источниками данных и визуализировать информацию любого уровня сложности. Они могут использоваться для создания приложений любого уровня в других средах разработки. Это значит, что с их помощью разрабатывать можно в привычной для себя среде (это может быть любая среда, поддерживающая работу с Windows Forms), не завязываясь на среды и языки Prognoz Platform.

В этот раз мы рассмотрим вполне конкретный пример: как компоненты Prognoz Platform могут быть использованы в одной из самых популярных сред разработки – Microsoft Visual Studio.

Мы пошагово разберем, как легко и просто создать приложение Windows Forms для универсального просмотра любого вида отчетов или источников данных, в нашем случае это будут так любимые пользователями экспресс-отчеты. Сделаем дерево для отображения всех экспресс-отчетов репозитория, чтобы при выборе любого из них отображалось его содержимое.

Подготовительный этап

Первым делом устанавливаем настольное приложение Prognoz Platform разрядности x86 (это нужно для получения доступа к библиотекам платформы). Выберем инсталлятор Full версии, не использующий технологию Reg-free COM registration. Еще нам понадобится установить утилиту DevTools, входящую в комплект инсталляторов Prognoz Platform, которая, в частности, и предназначена для разработки в сторонних средах. Утилита поместит библиотеки Prognoz Platform в GAC на локальном компьютере, что сделает их доступными для использования в любом приложении.

Теперь запускаем среду Visual studio и создадим новый проект Windows Forms Application.

Как при работе с любой внешней библиотекой компонентов, наши компоненты могут быть добавлены на Toolbox Visual Studio для дальнейшего размещения их на формах Windows Forms в режиме дизайна. Все компоненты лежат в одной библиотеке Prognoz.Platform.Forms.Net.dll, расположенной в директории установки настольного приложения.

Для добавления компонентов воспользуемся диалогом Choose Items на Toolbox Visual Studio.

На Toolbox создадим новую вкладку для наших компонентов. Вызовем диалог, там найдем нужную нам библиотеку с компонентами Prognoz.Platform.Forms.Net.dll.

Автоматически будут выделены все доступные компоненты. Нажмем «OK» и компоненты появятся на Toolbox.

Настройка

Перед использованием компонентов, класс формы, на которой они будут расположены, необходимо унаследовать от класса, специально созданного для корректной работы данных компонентов. Этот класс расширяет класс Windows Forms и обеспечивает поддержку работы компонентов.

Для этого в Solution Explorer добавим в ссылки уже известную нам библиотеку Prognoz.Platform.Forms.Net.dll из директории установки настольного приложения.

В коде формы в блоке using пропишем нужное нам пространство имен Prognoz.Platform.Forms.Net и заменим базовый класс формы Form на класс ForeNetFormVS.

Для поддержки работы компонентов и использования их базовых свойств также необходимо будет подключить другие Interop сборки Prognoz Platform. При компиляции Visual Studio сама подскажет, каких библиотек не хватает. Все они также будут располагаться по пути установки настольного приложения.

Добавим в ссылки сборки Prognoz.Fore.dll, Prognoz.Platform.WinForms.Utils.dll, а также основные Interop сборки, которые понадобятся в дальнейшем для работы с объектами Prognoz Platform.

Перед запуском форм для корректного отображения компонентов в коде необходимо выполнить следующие методы (это делается 1 раз перед первым запуском формы):

  • Platform.Interop.Ui.IUiWinApplication.CheckAfxState- метод инициализирует системные переменные платформы, которые необходимы для корректной работы объектов;
  • Platform.Forms.Net.ForeNetFormVS.SetActiveMetabase- метод устанавливает репозиторий, в рамках которого осуществляется запуск объектов.

Нужные сборки в ссылки у нас уже добавлены.

1. Перейдем в стартовый метод проекта. По умолчанию это Main в модуле Program.cs и перед запуском формы пропишем:

using Prognoz.Platform.Interop.Ui; … IUiWinApplication WinAppCls = new UiWinApplicationClass(); WinAppCls.CheckAfxState(); … Application.Run(new Form1());

2. Отдельным методом пропишем подключение к одному из репозиториев Prognoz.Platform и вызовем описанный выше метод SetActiveMetabase также в стартовом методе проекта:

using Prognoz.Platform.Interop.Metabase; … static void Main() { … IMetabase Mb = connect("PROGNOZPLATFORM8_REPO", "user", "psw"); Prognoz.Platform.Forms.Net.ForeNetFormVS.SetActiveMetabase(Mb); … Application.Run(new StartForm()); } static IMetabase connect(string MbName, string user, string password) { IMetabaseManager manager = (new MetabaseManagerFactoryClass()).Active; IMetabaseDefinitions defs = manager.Definitions; defs.ReadFromRegistry(); IMetabaseDefinition MbDef = defs.FindById(MbName); ISecurityPackage Package = manager.Packs.FindById(MbDef.SecurityPackage).Package; IPasswordCredentials Credentials = (IPasswordCredentials)Package.CreateCredentials(AuthenticationMode.amPassword); Credentials.UserName = user; Credentials.Password = password; IMetabase mb = MbDef.OpenDefault(Credentials); return mb; }

Теперь полученное подключение к репозиторию надо передать в класс формы, чтобы там уже можно было работать с объектами. Сделать это можно любым удобным способом. В нашем примере переопределим конструктор базовой формы, передав в него подключение и вызвав конструктор базового класса ForeNetFormVS.

static void Main() { … Application.Run(new StartForm(Mb)); } … public StartForm(IMetabase Mb): base(Mb) { InitializeComponent(); }

Дизайн

Теперь всё готово для настройки дизайнера формы.

Перейдем в режим дизайнера нашей стартовой формы StartForm. Так как мы хотим создать приложение, которое будет отображать экспресс–отчеты, добавим на форму компоненты MetabaseTreeListNet, UiErAnalyzerNet, EaxDocumentViewerBoxNet, переименуем их и разместим на форме так, как нам больше нравится.

Сразу в режиме дизайна мы можем настроить компоненты на любые источники данных. Тут важно запомнить, что это лишь помощь в настройке отображения компонентов и подключение к репозиторию всё равно надо прописывать в коде проекта, что мы уже сделали ранее.

Для того чтобы подключиться к схеме в режиме дизайна, выберем форму, перейдем в панель её свойств, найдем там свойство MetabaseDefinition и вызовем там диалог подключения. В списке будут все имеющиеся на данном компьютере схемы, которые вы добавляли ранее в настольном приложении Prognoz Platform.

Теперь отображение и поведение компонентов можно настроить в дизайнере.

1. для MetabaseTreeListNet:

- в свойстве Root выберем корневую папку репозитория, к которому подключились;

- свойство ShowEmptyFolders выставим в false, чтобы не отображались папки, в которых нет нужных нам источников;

2. для UiErAnalyzerNet выставим Active = true;

3. для EaxDocumentViewerBoxNet в свойстве Analyzer установим UiErAnalyzerNet.

Функциональность

Так как мы хотим создать приложение только для отображения экспресс-отчетов, можем наложить на наше дерево с объектами фильтр на нужный тип объектов:

1. Перейдем в событие Shown формы.

2. Пропишем там наложение фильтра:

private void StartForm_Shown(object sender, EventArgs e) { //ObjectsList - имя компонента MetabaseTreeListNet MetabaseDialogClassFilterClass EaxReportsfilter = new MetabaseDialogClassFilterClass(); EaxReportsfilter.ObjectClass = MetabaseObjectClass.KE_CLASS_EXPRESSREPORT; ObjectsList.Filters.AddFilter(EaxReportsfilter); }

3. И остаётся только настроить отображение источника. Суть приложения в том, что при выборе экспресс-отчета в дереве, его содержимое будет отображаться в компонентах. Для реализации данного процесса добавим в код событие OnSelectionChanged для компонента MetabaseTreeListNet. В нем пропишем смену источника в UiErAnalyzerNet при выборе отчета в дереве:

private void ObjectsList_OnSelectionChanged(object pSender, Prognoz.Platform.Interop.Forms.TreeControlEventArgs pArgs) { //erAnalyzer - имя компонента UiErAnalyzerNet this.Cursor = Cursors.WaitCursor; IMetabaseObjectDescriptor descriptor; descriptor = ObjectsList.SelectedObjects[0]; erAnalyzer.Object = descriptor; this.Cursor = Cursors.Default; }

Так мы получили полноценное Windows Forms приложение, которое дает возможность просматривать все экспресс–отчеты репозитория Prognoz Platform. Это достаточно универсальный пример приложения. Вы можете усложнить его отображением любого вида отчетов, например, аналитических панелей, регламентных отчетов, книг с временными рядами и т.д., также можете настроить полноценную работу с отметкой, с настройкой блоков и т.п. Во всём этом помогут компоненты платформы вместе со всем доступным функционалом библиотек настольного приложения.

В итоге, как мы и говорили в начале, прилагая минимум усилий, мы можем разрабатывать в привычной для себя обстановке, не завязываясь на среды и языки, предоставляемые Prognoz Platform, не теряя при этом в функциональности. Мы можем использовать любые функции других продуктов, работая и визуализируя кубы, отчеты, аналитические панели, временные ряды, модели, созданные в Prognoz Platform, а также получить доступ и работать с данными из нужной БД за счет интеграции с внешними средами.

Комментарии

Email не будет опубликован.
Подробнее о политике использования персональных данных