Улучшения и Обновления

Новые функции

Arms

ArmController. Добавлено событие ArmItemCreated
Событие ArmItemCreated срабатывает при создании пункта меню (ArmItemBase).

BC (BusinessComponents)

Интерфейс Xafari.BC.DC.State. Изменено название интерфейса.
Интерфейс Xafari.BC.DC.State переименован в Xafari.BC.DC.ObjectState

Data

Выполнение команды import в консоли. Изменена итоговая статистика.
Итоговая информация представлена в более подробном виде. В процессе импорта собирается статистика по всем создаваемым объектам. После завершения импорта эта статистика выводится в консоль, где выполнялась команда import.

Editors

TabbedDetailPropertyEditor. Изменено поведение по умолчанию.
  1. Панель с информационным View по умолчанию не отображается. Раньше информационное View по умолчанию размещалась под списком вкладок.
  2. При проектировании вкладки (Tabs) в Модели Приложения для свойства DetailView доступны значения из выпадающего списка. Раньше в этом списке было доступно View, являющееся контейнером для создаваемой вкладки, что не совсем корректно. Теперь View-контейнер недоступен для вкладок. Аналогично, View-контейнер недоступен при создании информационного View.
  3. Изменения отражены в документации


Reports

Шаблоны. Добавлена возможность задавать шаблон по умолчанию при формировании отчетов.
В параметры отчетов добавлены поля Default template (Шаблон по умолчанию) и Template action (Действие).
Default template определяет шаблон, который будет использован по умолчанию при построении отчета. Если значение не задано (null), то отобразится диалог выбора шаблона отчета. Отчет будет сформирован на основе указанного шаблона.
Template action определяет Action, которое будет выполнено при формировании отчета. Набор доступных Action определяется выбранным шаблоном. Если Action не задано, то отчет не будет сформирован.

Settings

Отображение настроек в UI. Добавлен механизм скрытия настройки, помеченной атрибутом Obsolete.
  1. Если настройка помечена атрибутом Obsolete, то настройка не отображается в UI.
  2. Если тип группы настроек помечен атрибутом Obsolete, то группа не отображается в дереве групп настроек.


Интерфейсы настроек и групп настроек. Добавлен механизм изменения структуры настроек с сохранением их значений.
Обеспечена возможность переименования настройки либо перемещения в другую группу с сохранением значения.

  1. Задача решается с использованием атрибута Obsolete и класса SettingsNodeUpdater.
  2. Документация по настройкам дополнена соответствующим разделом.
  3. Демо-приложение Feature Center дополнено соответствующим примером.


Tools

Visual Studio 2013 toolbox. Реализована регистрация компонентов Xafari.

Xafari

UI construction. Расширены настройки LayoutGroup для DetailView
Добавлена возможность настраивать функциональность сворачивания/разворачивание LayoutGroup для DetailView.

Пространство имен Xafari.XafariConstants. Добавлены новые константы.
Добавлены константы в Xafari.XafariConstants.HierarchyFullName и Xafari.XafariConstants.HierarchyFullPath, константы содержат размеры соответствующих полей.

UI construction. Реализован механизм генерации View по определённым требованиям.

Разработана оригинальная стратегия макета представления — XafariViewLayoutStrategy. Xafari предоставляет возможность настраивать ряд параметров ListView, LookupListView и DetailView в коде, а также создавать дополнительные View.
По умолчанию XAF для каждого персистентного объекта генерирует 3 View: ListView, LookupListView и DetailView. Также для каждого свойства типа список(IList) генерируется списковое представление. По умолчанию, все свойства бизнес-классов автоматически выносятся в Модель Приложения и отображаются в UI.
Основная идея XafariViewLayoutStrategy заключается в том, чтобы в Модели Приложения и UI были представлены только те свойства, которые отметит разработчик.
Правила XafariViewLayoutStrategy.

  1. По умолчанию все поля бизнес-класса исключены из View.
  2. При генерации View приоритетным является свойство Layout атрибутов CreateListView и CreateDetailView, а потом уже наличие атрибутов.
  3. Свойство Layout атрибута CreateListView должно содержать строку, в которой через символ «;» перечислены имена свойств по которым будут сгенерированы колонки для List View в порядке их перечисления.
  4. Свойство Layout атрибута CreateDetailView должно содержать строку, в которой через символ «;» перечислены имена свойств или групп свойств по которым будет сгенерировано расположение полей на Detail View в порядке их перечисления.
  5. Для указания видимости свойств на основании атрибутов предназначены атрибуты VisibleInAllView, VisibleInListView, VisibleInLookupListView, VisibleInDetailView с параметром true
  6. Для указания группировки свойств и порядка расположения предназначены атрибуты ViewLayoutGroupAttribute. Следует указать имя группы, и Index — номер расположения. Порядок расположения групп настраивается в Редакторе Модели.
  7. Если свойство бизнес-класса не помечено соответствующим атрибутом, то по нему не будет сгенерирован узел в узле Columns Модели Приложения, и, следовательно, не будет сгенерирована соответствующая колонка на List View.
  8. Если свойство бизнес-класса не помечено соответствующим атрибутом, то по нему не будет сгенерирован узел в узле Items Модели Приложения, и, следовательно, свойство не будет представлено на Detail View.
  9. Если свойство не привязано к группе, то оно попадет в группу “General”, которая всегда расположена вверху Detail View.

Для XafariViewLayoutStrategy создан соответствующий раздел документации.


Бизнес-операции

Запуск бизнес-операции из UI. Реализован ArmItemBusinessOperation
Реализован новый тип ArmItem — ArmItemBusinessOperation, предназначенный для запуска не контекстных бизнес-операций из главного меню приложения (АРМ).

BOExecViewController. Добавлено событие ContextPropertyInitializing
В функционал бизнес-операций добавлено событие ContextPropertyInitializing (событие доступно на экземпляре контролера BOExecViewController.BOEvents), дающее возможность в прикладном коде управлять инициализацией контекстного свойства.

Контекстное свойство бизнес-операции. Добавлены параметры для управления привязкой бизнес-операции к контекстному бизнес-объекту.

Доработка относится к контекстным бизнес-операциям и позволяет задать стратегию привязки бизнес-операции к контекстному бизнес-объекту.
Для контекстного свойства контекстных бизнес-операций добавлены параметры ContextTypeMatchMode, ContextObjectsCriteria, ContextObjectsCriteriaMode.
ContextTypeMatchMode задает режим проверки соответствия контекстной бизнес-операции типу бизнес-объекта, к которому бизнес-операция может применяться. Возможны 3 варианта:

  • Тип контекстного свойства бизнес-операции должен в точности соответствовать типу бизнес-объекта
  • Тип контекстного свойства бизнес-операции должен соответствовать типу бизнес-объекта и всем наследникам типа контекстного свойства
  • Тип контекстного свойства бизнес-операции должен соответствовать всем наследникам типа контекстного свойства.

ContextObjectsCriteria содержит строку с критерием, который вычисляется на экземпляре выделенного (текущего) бизнес-объекта. Если результат вычисления равен False, то бизнес-операция в списке действий становится не активной.
ContextObjectsCriteriaMode задает режим, который определяет, все ли выделенные объекты должны удовлетворять критерию.
Значение описанных параметров можно указать в либо прикладном коде, с помощью атрибута ContextPropertyAttribute, либо в Модели Приложения.
Доработка отражена в документации по бизнес-операциям.


Общие вопросы

Кастомизация List View. Добавлена возможность управлять TOP N в runtime.
Разработан Action, который обеспечивает управление количеством отображаемых записей. Пользователь может запросить отображение первых N записей (TOP N). При этом сортировки по колонкам выполняются для всего набора данных, а не только в пределах ограничения TOP N. Добавлен пример в Feature Center (раздел Data showing|TOP returned record managing).

CustomAppearanceRule. Кэширование CustomAppearanceRule.
При открытии View происходила генерация большого количества необоснованных запросов к CustomAppearanceRule. Это происходило вследствие частого срабатывания события в AppearanceController. Применение кеширования позволило снизить количество запросов более чем в 20 раз.

Устраненные проблемы

Editors

XafariSpinEditor.Web. (Т102.132077)
В Редакторе Модели отсутствовал доступ к параметрам MaxValue и MinValue. Проблема решена.

AdvancedBandedListEditor.Win. (Т102.131697)

View с Xafari.Editors.Win.AdvancedBandedListEditor открывались с ошибкой. Проблема решена.

  1. Изменены атрибуты в модели приложения для Band’ов
  2. Изменен механизм синхронизации редактора с моделью
  3. Добавлен пример работы AdvancedBandedListEditor в FC


XafariMiltipleLookupEditor. (Т102.131652)

При использовании панели поиска (Ctrl+F) выбирались лишние объекты. Срабатывало преждевременное выделение записи. Проблема решена.
Выделение при установке фокуса на строки отменено.

Security

Безопасность на Domain Components. Web. (Т102.132530)

Возникал exception при открытии закладки ActionPermissionMatrix на IDCSecuritySystemRole_DetailView. Проблема решена. Исправлена ошибка при чтении поля Category у DCActionPermissionMatrixItem:

  1. Если в ActionContainer свойство Category равно null или пустое, то Category присваивается имя Unspecified.
  2. Добавлена проверка ActionContainer на null.


Action access permissions. Web. (Т102.132551)

Выставленные при настройке роли ограничения на доступ к Action не работали, когда Action находился на View на DashboardViewItem. Проблема решена.

  1. Изменена логика активации Action на основании доступности.
  2. Добавлен флаг для управления возможность проверки доступности Action при его активации.


Settings

Отображение настроек в UI. (Т102.132129)
В режиме TabbedMDI каждая активация пункта меню «Настройки пользователя» или «Настройки администратора» влекла открытие новой вкладки вместо перехода к уже открытой вкладке. Проблема решена.

WorkPlaces

Загрузка слоя модели для рабочего места. (Т102.132540)
При автоматическом выборе рабочего места не учитывалось значение свойства модели Application.Options.UIType. Проблема решена.
При любом варианте загрузки слоя модели для рабочего места выполняется инициализация WinApplication.ShowViewStrategy.

Xafari

Повторный вход в Web-приложение. (Т102.131085)
В config-файл web-приложения добавлен атрибута slidingExpiration=»true». Доп. сведения: https://www.devexpress.com/Support/Center/Question/Details/Q586120

Видимость поля HierarchyFullPath на View. (Т102.132213)
Добавлен атрибут [Browsable(false)] для поля HierarchyFullPath объекта HierarchicalClassifierItem

ApplyAppearanceRulesController. (Т102.131372)
В механизме Appearance есть алгоритм вычисления базовых типов, который неправильно обрабатывал DC: не все базовые типы для DC попадали в список базовых. Проблема решена.
Для ITypeInfo у DomainComponent проверяется не BaseType, а ImplementedInterfaces.

ApplyAppearanceRulesController. Активируется для неперсистентных объектов. (Т102.131374)
ApplyAppearanceRulesController не должен активироваться для неперсистентных объектов. Проблема решена.