Компоненты общего назначения

Дополнительные виды действий

Как известно, DevExpress Xaf поддерживает действия (action) Simple Action, Popup Window Show Action, Single Choice Action и Parametrized Action. В дополнение к ним в Xafari реализованы дополнительные виды действий:

  • CheckAction – позволяет переключать состояние действия и подписываться на событие смены состояния. Является наследником SimpleAction.1-1
  • AggregatedAction – является динамическим контейнером для других действий и может быть настроен в модели приложения. Является наследником SingleChoiceAction.1-2
  • PopupContainerShowAction — используется для отображения PopupContainer вместо PopupWindow. Является наследником PopupWindowShowAction. Пример использования можно найти в Extra Filters.1-3
  • WizardAction – специальный SimpleAction, который используется для реализации Wizards.1-4

Работа с иерархическими данными

IHierarchyNode является альтернативой ITreeNode. Поскольку ITreeNode представляет собой абстрактное описание данных и не учитывает особенности реализации конкретной иерархии, TreeListEditor может эффективно работать только с небольшим объемом иерархических данных (до 1000 объектов). Поэтому в IHierarchyNode специально реализован дополнительный функционал:

  • максимально эффективная обработка отношения Parent-Children,
  • возможность организовать несколько независимых иерархий,
  • возможность представить иерархические данные на ListView.

Также можно управлять стратегией удаления подчиненных узлов (children) и определять автоматические действия системы (т.е. при удалении узла подчиненные узлы могут быть как удалены, так и перенесены на уровень удаляемого узла или в корень иерархии).

Для работы с IHierarchyNode разработаны специальные редакторы (ListEditors): ASPxXafariTreeListEditor, ASPxHierarchyNodeListEditor, ASPxExplorerListEditor, XafariTreeListEditor и WinHierarchyNodeListEditor.1-5

Плавающие панели

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

Панели могут быть использованы для усложнения любого View без изменения его настроек. Такая задача часто возникает при реализации новых возможностей (features) в дополнительном модуле.

Для работы с панелями требуется добавить компонент DockManager в FrameTemplate. Свойства панелей и правила их отображения описываются в модели приложения (ApplicationModel).
Для панели назначается View, который в дальнейшем используется для отображения данных. Для View в панели и основного View можно задать отношение Master-Detail с помощью какого-либо критерия. В этом случае данные обоих View будут синхронизироваться, в зависимости от параметров отношения Master-Detail. По умолчанию, синхронизация производится через 0.5 секунды после изменения текущего объекта (CurrentObject) или выбранных объектов (SelectedObjects) на MasterView.
Панели использованы при реализации Категорий.1-6-1024x512

Множество выбранных объектов

В Xafari реализовано решение по работе с множеством выбранных объектов. Стандартное решение XAF предполагает создание отдельных персистентных коллекций со специальными персистентными объектами. Это приводит к неоправданному усложнению модели данных приложения.
В Xafari использовано универсальное решение с фиксированной структурой БД, не требующее добавления новых персистентных объектов. Также это решение позволяет формировать эффективные запросы к БД без дополнительного кодирования.

Данное решение содержит:

  • Персистентные объекты для хранения ссылок на выбранные объекты,
  • Особый объект ObjectSet для реализации множества выбранных объектов,
  • Специальный редактор по работе со множеством объектов ObjectSet для нескольких объектов и указания критерия отбора,
  • CustomFunction для построения эффективных запросов к БД, содержащих один или несколько фильтров вхождения во множество.

Поддерживаются БД MSSQL и Oracle.

АРМы

В состав Xafari включен альтернативный способ реализации панели навигации (ARMs). В отличие от Xaf NavigationItems, механизм ARMs обладает дополнительными возможностями:

  • Описание шаблонов для групп элементов навигации.
  • Выполнение действий (Action) сразу из панели навигации.
  • Наличие специализированных элементов навигации для работы с Xafari Reports
  • Добавление собственных типов элементов навигации.
  • Управление доступностью к элементам навигации через роли пользователей.

АРМы реализованы для обеих платформ: Win и Web. Также поддерживается MVС.1-7

Дополнительные PropertyEditors

НазваниеОписаниеWinWebMvc
Tabbed Detail Property EditorTabbedDetailPropertyEditor предлагает альтернативный способ проектирования для Detail View и представляет собой группу иерархических вкладок для переключения между ними и NestedFrame для отображения View, связанных с этими вкладками. Этот редактор может быть использован для сложных DetailView с большим количеством ViewItem, вкладок и коллекций. В отличие от стандартного способа на TabbedLayoutGroup, редактор работает по-другому. В каждый момент времени пользователь работает с текущей вкладкой и простой View вместо одной большой и сложной. Это позволяет решить некоторые проблемы производительности, которые возникают на DetailView с большим (30+) количеством элементов.Вся настройка для TabbedDetailPropertyEditor производится в модели приложения (ApplicationModel). Настройка заключается в том, чтобы для выбранного DetailViewItem создать иерархию вкладок и настроить простые View для каждой вкладки.+++
Enum Property EditorEnumPropertyEditor является альтернативным редактором для редактирования свойств типа Enum. В дополнение к стандартному редактору этот редактор позволяет:

  • Поддерживает работу с флагами
  • Различные способы представления: Standard, CheckedComboBox, CheckedListBox
  • Отображение в несколько колонок.
+++
Expression Property EditorРедактор используется для редактирования свойств типа string, содержащих выражение в формате DevExpress Expression.Для редактирования выражения используется стандартный контрол++
Folder Browser Property EditorРедактор используется для редактирования свойств типа string, содержащих путь к папке.Для выбора пути используется контрол FolderBrowserDialog.+
Full Expression Property Editor
Hyper Link Property EditorРедактор используется для отображения и редактирования свойств типа string, содержащих гиперссылку в формате URI.+++
Label Property EditorВизуально редактор выглядит как StaticText, но позволяет отображать значения свойств. В отличие от DefaultPropertyEditor в редакторе использован LabelControl.+
Object Set Property EditorСпециализированный редактор, который используется для реализации Множественный выбор+
Type Image Property EditorРедактор является наследником стандартного редактора TypePropertyEditor и дополнительно отображает пиктограмму для типа, которая определена в модели приложения (ApplicationModel).+
Vertical Grid Property EditorРедактор является аналогом стандартного DetailPropertyEditor и используется для редактирования ссылочного свойства. Для реализации редактора используется контролы VGridControl и другие.Благодаря тому, что свойства представлены в виде списка, то добавление новых свойств или исчезновение существующих происходит естественным способом без нарушения общей композиции дизайна формы. Поэтому VerticalGridPropertyEditor использован в Dynamic properties, Групповое редактирование (Bulk Edit), Application Settings.Настройка редактора производится в модели приложения. Для этого необходимо назначить некоторый DetailView. В дальнейшем список ViewItem и их параметры берутся именно из этого DetailView.+++
View Id Property EditorРедактор используется редактирования свойств типа string, в которых содержаться идентификаторы View из модели приложения (ApplicationModel).Редактор позволяет выбирать View отдельного вида (ListView, DetailView, DashboardView).++
Google Maps Property EditorРедактор позволяет редактировать глобальные координаты при помощи позиционировании на карте Google.+
Group Property EditorРедактор позволяет редактировать группу полей на карточной форме в то время как весь DetailView работает в режиме ViewMode. Для настройки поведения редактора используется дополнительный DetailView.+
Progress Bar Property EditorРедактор используется для отображения хода исполнения какого-либо процесса и отображает текущее заданное в процентах значение.++
Quick Choice Property EditorРедактор является альтернативой для стандартного LookupPropertyEditor и используется для быстрого поиска по ключевым полям без отображения дополнительных popup окон. Для реализации редактора использован стандартный контрол ASPxComboBox.+
Xafari Multiple Lookup EditorРедактор используется для редактирования свойств типа IEnumerable и является альтернативой для стандартного редактора ListPropertyEditor в тех случаях, когда список является хранилищем для множества выбранных объектов.+

Дополнительные ListEditors

НазваниеОписаниеWinWebMvc
Explorer Lis EditorСпециальный ListEditor для отображения иерархических данных ITreeNode и IHierarchyNode. В отличии от стандартного TreeListEditor этот редактор является наследником от стандартного GridListEditor. При этом в работе редактора используется дополнительная информация о том, как реализовано отношение Parent-Child на уровне БД. На основании этих данных в CollectionSource добавляется дополнительный критерий. Такой подход позволяет выполнять эффективные запросы для получения данных, в то время как стандартный TreeLisEditor всегда загружает абсолютно все данные.Работа с иерархией организована через дополнительную панель навигации выше списка и дополнительную колонку для идентификации наличия вложенных узлов.Внешне этот редактор напоминает проводник в ОС Windows (поэтому такое название).++
Xafari Grid List EditorЭтот редактор дополняет возможности стандартного TreeListEditor.Для платформы Win добавлена поддержка Множественный выбор.Для платформы Web добавлена поддержка Templated Web Editors.++
Xafari Tree List EditorЭтот редактор дополняет возможности стандартного TreeListEditor.Для платформы Win добавлена поддержка Множественный выбор.Для платформы Web добавлена поддержка Templated Web Editors.++
Card List EditorЭто специальный ListEditor, который отображает данные списка в виде матрицы. При этом способ отображения объекта определяется специальным дополнительным DetailView, который может быть настроен стандартным способом в ModelEditor.+
Hierarchy Node List EditorЭтот ListEditor является аналогом стандартного TreeListEditor и служит для отображения иерархических данных ITreeNode и IHierarchyNode. Внешне редактор выглядит также, как и стандартный. При этом в работе редактора используется дополнительная информация о том, как реализовано отношение Parent-Child на уровне БД. На основании этих данных в CollectionSource добавляется дополнительный критерий. Такой подход позволяет выполнять эффективные запросы для получения данных, в то время как стандартный TreeLisEditor всегда загружает абсолютно все данные.В дополнение к стандартным возможностям этот редактор допускает редактирование структуры иерархических данных при помощи drag’n’drop.++

Шаблоны редакторов для Web

Все стандартные редакторы XAF для платформы Web расширены дополнительными возможностями по изменению их оформления. По умолчанию редактор выглядит как стандартный и, чтобы изменить внешний вид редактора необходимо создать шаблон в виде UserControl и указать ссылку на этот шаблон в модели приложения (ApplicationModel).
1-8
Ниже список редакторов, которые поддерживают шаблоны:

  • ASPxXafariBooleanPropertyEditor
  • ASPxXafariByteArrayPropertyEditor
  • ASPxXafariBytePropertyEditor
  • ASPxXafariColorPropertyEditor
  • ASPxXafariCriteriaPropertyEditor
  • ASPxXafariDateTimePropertyEditor
  • ASPxXafariDecimalPropertyEditor
  • ASPxXafariDefaultPropertyEditor
  • ASPxXafariDoublePropertyEditor
  • ASPxXafariEnumPropertyEditor
  • ASPxXafariFloatPropertyEditor
  • ASPxXafariHtmlPropertyEditor
  • ASPxXafariImagePropertyEditor
  • ASPxXafariInt64PropertyEditor
  • ASPxXafariIntPropertyEditor
  • ASPxXafariListPropertyEditor
  • ASPxXafariLookupPropertyEditor
  • ASPxXafariObjectPropertyEditor
  • ASPxXafariPopupCriteriaPropertyEditor
  • ASPxXafariProtectedContentPropertyEditor
  • ASPxXafariStringPropertyEditor
  • ASPxXafariTimeSpanPropertyEditor
  • ASPxXafariTreeListEditor
  • ASPxXafariTypePropertyEditor

Безопасность Xafari

В состав Xafari входит расширение модуля Security. В дополнение к стандартным возможностям реализовано следующее:

  • XafariAutentication позволяет использовать новую форму аутентификации пользователя. При ее использовании пользователь сам выбирает каким способом он хочет пройти аутентификацию: Windows или стандартный.
  • Модель данных по технологии Domain Components (DC) полностью повторяет стандартную модель данных от XAF, а также интегрирована с технологией EntityFactory.
    Позволяет естественным образом эксплуатироваться в системах построенных по технологии Domain Components.
  • Дополнительные permission
    • ActionPermission позволяет управлять доступностью к Action.
    • NavigationPermission позволяет управлять доступностью к элементам NavigationItems.

1-9

Мастера

Мастера (Wizards) предназначены для последовательного выполнения сложных операций. Наиболее ярким примером использования мастеров является процедура инсталяции. Мастера реализуют аналогичный функционал с учетом некоторых особенностей платформы XAF.

Ключевые особенности:

  • Мастер - это аналог PopupWindowShowAction, которые перед выполнением действия предлагает пользователю настроить параметры этого действия в виде редактирования свойств некоторого объекта.
    Мастер выполняет аналогичную роль, за исключением того, что для редактирования объекта с параметрами действия можно сделать несколько последовательных шагов с возможностью пропустить некоторые шаги в зависимости от выполнения условий.
  • Любой мастер работает в popup окне
  • Шаги мастера оформляются в виде DetailView для одного и того же типа объекта.
  • Работа мастера завершается выполнением какого действия или отказом от его выполнения.

Механизм мастеров обладает следующими возможностями:

  • Поддержка на обеих платформах Win и Web
  • Реализовано 3 вида шаблона представления
  • Используется новый вид действий WizardAction, наследник от ShowPopupWindowAction
  • Поддерживается управление свойствами мастера в дизайнере VS, а также в модели приложения
  • Автоматическая генерация View в модели приложения для каждого этапа мастера
  • Реализована возможность условного перехода между этапами мастера

Поддержана возможность управления этапами мастера из кода через специальные события.1-10-1024x629

Модуль приложения

1
В случае разработки приложения для различных платформ (Web, Win, Console и пр.), технология XAF создает некоторые неудобства при проектировании модулей. Обычно основу приложения составляет определенный набор платформенно-независимых модулей. Этот набор модулей будет одинаковым для всех платформ и будет дополняться в каждом модуле определенными платформенно-зависимыми библиотеками и настройками. В случае стандартного XAF приложения, все основные модули и настройки нужно добавлять и инициализировать в каждом платформенно-зависимом модуле.

AppModule выделяет платформенно-независимые библиотеки и настройки в отдельный модуль. При проектировании платформенно-зависимого модуля теперь достаточно будет добавить настроенный AppModule, а не дублировать весь набор основных библиотек и настроек.

Расширение бизнес-объектов

Под EntityFactory понимается некоторая модель проектирования и разработки сложных приложений. Она включает правила, соглашения и рекомендации по проектированию, а также библиотеку базовых классов и методов расширения компонентов XAF.0-0

Преимущества EntityFactory:

  • Простая и понятная бизнес-модель данных.
  • Нет лишних «технологических» бизнес-объектов.
  • Модульная стратегия расширения модели данных.

Простая и понятная бизнес-модель данных

Базовыми являются понятия Сущность (Entity) и расширение сущности (Entity Extension). Главной идеей EntityFactory является способ добавления новых полей в сущности приложений. Если ООП предлагает решать эту задачу через наследование расширений от сущности, то EntityFactory решает эту задачу через добавление в сущность ассоциаций на расширения.

А использование Domain Components позволяет включать расширение целиком в объект сущности без каких-либо дополнительных конструкций.

Нет лишних «технологических» бизнес-объектов

Использование EntityFactory позволяет избавиться от такого «неприятного» следствия от использования наследование, как появление новых типов бизнес-объектов в приложении.

В случае ООП первоначальная цель «расширение» решается через создание «новой сущности». В этом смысле новый класс является следствием применения выбранной технологии, поэтому его можно назвать «технологическим».

EntityFactory четко различает бизнес-сущности и их расширения. Расширение является только расширением и не является сущностью, которую расширило. Поэтому и «технологические» бизнес-объекты отсутствуют в приложении.

Модульная стратегия расширения модели данных

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

Консоль приложения

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

Для решения подобного класса задач разработано легковесное консольное приложение - RunCmd.exe, к которому может подключаться только требуемый для решения данной задачи набор модулей. Необходимые для решения конкретной задачи команды и их параметры передаются в командной строке.

Разработчики реализуют команды, заключая их в состав модуля XAF. Необходимые для разработки новых команд классы и интерфейсы находятся в сборке Xafari.dll (в пространстве имен Xafari.Commands).

В составе платформы Xafari реализованы команды запуска произвольной бизнес-операции, команда очистки БД от удаленных объектов.1-111

Logic Controller

В Xaf есть известная проблема, связанная с падением быстродействия приложения при использовании большого количества контроллеров (Controller).

LogicController – это методика реализации бизнес-логики приложения, которая позволяет существенно сократить число контроллеров в приложении без потери функциональных возможностей.

В основе этой методики лежит класс LogicController. Он является аналогом для ViewController и может быть использован вместо ViewController.

LogicController привязывается к определенному типу бизнес-объекта и активируется только на View для этого бизнес-объекта. LogicController не является наследником от Controller, поэтому для View будут доступны только LogicController привязанные к данному типу.

Дополнительные фильтры

В Xafari реализовано общее решение для фильтрации данных по периоду. Для выбора периода используется удобная форма, позволяющая быстро сформировать период по месяцу, кварталу, году, а также произвольный период.1-13

Smart Design

XafariViewLayoutStrategy – это реализация альтернативного способа генерации размещения (Layout) для ListView и DetailView. Стандартный способ неудобен и является избыточным в ряде случаев. Особенно это проявляется при работе с объектам с большим количеством свойств.

XafariViewLayoutStrategy позволяет следующее:

  • Описывать View и его размещение (Layout) в коде.
  • Генерировать View в дополнение к стандартным.
  • Задавать стратегию по умолчанию на различных уровнях.
  • Реализовать и использовать собственную стратегию.

XafariViewLayoutStrategy может использоваться на платформах Win, Web, Mvc.1-14

ASP.NET MVC платформа

XAF поддерживает создание приложений на платформах Win и Web. В дополнение к ним в Xafari реализована возможность создавать XAF приложения на платформе ASP.NET MVC. В версии x06 включена Code Preview версия с ограничениями по возможностям в сравнении с Web-платформой.

В целом концепция построения приложения сохранена и построена на подобии Web-платформы. Принципы реализация XAF приложения не изменились. При этом разработан абсолютно новый механизм генерации html-кода, основанный на принципах ASP.NET MVC.

Первые сравнительные тесты производительности MVC-приложения показали на 30% лучший результат в сравнении с аналогичным Web-приложением.

Познакомится с примерами приложений можно на странице Demos

Шаблоны Visual Studio

Шаблоны Xafari для Visual Studio предназначены для быстрой и более удобной разработки пользовательских приложений.

Контекстная справка

В состав Xafari входит механизм вызова контекстной справки, размещенной на сайте, из View. Все настройки делаются в модели приложения (ApplicationModel).

Реализованы несколько уровней настроек для указания ссылки на страницу:

  • необходимо указать сайт с документацией
  • страница по умолчанию для всех View
  • шаблон в формате ObjectFormatter для автоматической генерации относительной ссылки на страницу справки
  • можно явно задать страницу для View

Контекстная справка может использоваться на платформах Win, Web, Mvc.

Авто обновление данных

Активация для View функциональности AutoRefresh позволяет автоматически обновлять отображаемые данные через определенный интервал времени. Эта возможность доступна для любого View в в XAF-приложении.
Конечный пользователь может настроить параметры автоматического обновления в режиме runtime помощью специального Single Choice Action.

Действие по таймеру

В ряде приложений бизнес-логика может требовать, чтобы Action выполнялся автоматически, по таймеру. WinAutoExecuteController платформы Xafari реализует такую функцию. Этот контроллер позволяет настроить таймер, установить обратный отсчет времени, задать Action для запуска и т.д.