English version

Обработка чисел с плавающей точкой

  • Добавлена возможность настройки разделителя целой и дробной части:
    Добавлена обработка возможных параметров "разделитель между целой и дробной частью числа", "шаблон вида дат". Для задания этих параметров необходимо в файле настроек маппинга импорта задать значения в разделе Parameters. Пример раздела:
    <Parameters>
    <Item>
    <Key>SkipEmptyReferences</Key>
    <Value type="System.Boolean">
    <boolean>true</boolean>
    </Value>
    </Item>
    <Item>
    <Key>DecimalSeparator</Key>
    <Value type="System.String">
    <string>.</string>
    </Value>
    </Item>
    <Item>>
    <Key>DatePattern</Key>
    <Value type="System.String">
    <string>dd/MM/yyyy</string>
    </Value>
    </Item>
    </Parameters>

DatabaseUserSettingsStore

  • Добавлен статический метод по удалению пользовательских настроек по UserName в DatabaseUserSettingsStore;
  • Добавлена возможность удаления пользовательских настроек из БД.

События кастомизации бизнес-операций разделены по типам БО:

  • События кастомизации бизнес-операций контроллера BOExecViewController теперь доступны через индексируемое поле BOExecViewController.BOEvents. Индексом может служить либо тип бизнес-операции, либо ее ld. Если подписка на обработку событий выполняется без указания конкретной бизнес-операции, то подписчик получает сообщения от всех бизнес-операций. Пример выполнения подписки на обработку событий в коде контроллера:
    protected override void OnActivated()
    {
    base.OnActivated();
    _boExecViewController = Frame.GetController<BOExecViewController>();
    if (_boExecViewController != null)
    {
    // Подписка на обработку событий контроллера для конкретных бизнес-операций.
    _boExecViewController.BOEvents[typeof(CalcOrderTotalList)].BusinessOperationExecuting += CalcOrderTotalListExecuting;
    _boExecViewController.BOEvents[typeof(ReversibleOperation)].BusinessOperationCustomExecute += ReversibleOperationCustomExecute;
    _boExecViewController.BOEvents[typeof(ChangeFreightContext)].CreateCustomBusinessOperationInstance += CreateCustomChangeFreightContextInstance;// Подписка на обработку событий контроллера для всех бизнес-операций.
    _boExecViewController.BOEvents.CustomizeResultViewParameters += CustomizeResultViewParameters;
    }
    }

Добавлены функции генерации гиперссылок для использования в Drill-Down отчетах

  • В состав платформы (модуль Xafari) добавлены функции генерации гиперссылок на базе ViewShortcut, которые можно использовать в Drill-Down отчетах. Функция доступна через глобальный экземпляр менеджера гиперссылок: Xafari.XafariUrlManager.Intsance.BuildUrl(ViewShortcut shortcut)
    В настоящее время гиперссылки генерируются только в Web-версии приложения. Для корректной генерации гиперссылок в web-приложениях в конфигурационный файл приложения, в секцию appSettings необходимо добавить ключ:

<!-- Базовый URL текущего приложения. Устанавливается при развертывании приложения. --> <add key="ApplicationUrl" value="http://localhost:7500/"/>

Ключ должен содержать базовый URL развернутого приложения. В этом случае гиперссылки будут работать вне контекста текущего запущенного приложения. Если ключ не указан - будут генерироваться относительные гиперссылки, которые работоспособны только в текущем контексте приложения. Шорткат для списковых представлений (ListView) может содержать критерий для выборки данных представления. Для удобного формирование гиперссылки и критерия разработаны методы расширения класса ViewShorcut:

  • BuildUrl() - формирует URL на базе экземпляра ViewShortcut
  • SetCollectionSourceCriteria(CriteriaOperator criteria) - задает критерий источника данных спискового представления.

Также для работы с описанными функциями разработан класс XafariViewShortcut (наследник ViewShortcut), имеющий, в дополнение к конструкторам ViewShortcut, дополнительные конструкторы, в которых можно указать критерий:

  • public XafariViewShortcut(String viewId, CriteriaOperator collectionSourceCriteria)
  • public XafariViewShortcut(Type objectClass, CriteriaOperator collectionSourceCriteria, String viewId) Пример генерации гиперссылки в скрипте отчета:

using Xafari;
// Отображение списковой формы спецификации текущего заказа.
private void OrderDetailsUrl_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e)
{
e.Value = string.Empty;
var dataObject = e.Row;
if (dataObject == null) return;
var objectSpace = XPObjectSpace.FindObjectSpaceByObject(dataObject);
if (objectSpace == null) return;
var objectType = typeof(OrderDetails);
var viewId = XafariModule.Application.GetListViewId(objectType);
if (string.IsNullOrEmpty(viewId)) return;
var criteria = CriteriaOperator.Parse("Order.Oid = ?", objectSpace.GetKeyValue(dataObject));// Создание шортката для отображения View
var shortcut = new XafariViewShortcut(viewId, criteria); // Получение гиперссылки
e.Value = shortcut.BuildUrl();
}
// Отображение детальной формы текущего заказа.
private void OrderUrl_GetValue(object sender, DevExpress.XtraReports.UI.GetValueEventArgs e) {
e.Value = string.Empty;
var dataObject = e.Row;
if (dataObject == null) return;
var objectSpace = XPObjectSpace.FindObjectSpaceByObject(dataObject);
if (objectSpace == null) return;
var objectType = dataObject.GetType();
var objectKey = objectSpace.GetKeyValueAsString(dataObject);
if (String.IsNullOrEmpty(objectKey)) return;
var viewId = XafariModule.Application.GetDetailViewId(objectType);
if (string.IsNullOrEmpty(viewId)) return;// Создание шортката для отображения View
var shortcut = new XafariViewShortcut(objectType, objectKey, viewId); // Получение гиперссылки
e.Value = shortcut.BuildUrl();
};

Реализован новый тип Xafari отчетов - Электронные отчеты

  • Назначение электронных отчетов - получение отчетов в виде файлов требуемого формата (текстовые, xml, csv и т.п.) для предоставления разного рода отчетности в другие учреждения в электронном виде (например, по e-mail). Функционал выполнен в виде модулей:

Xafari.Reports.File
Xafari.Reports.File.Win
Xafari.Reports.File.Web

Для создания отчета в виде файла прикладной разработчик, в дополнения к базовой инфраструктуре отчетов Xafari должен описать класс (генератор), унаследованный от XafariFileReportGenerator<TDataSource, TParameters>. Generic параметрами здесь выступает класс источника данных и класс параметров отчета. В коде класса генератора требуется реализовать абстрактный метод GenerateCore(). Данный метод может создать произвольное количество потоков данных (метод GetStream), в которые посылаются требуемые данные отчетов. Разработанный класс генератора необходимо зарегистрировать в системе отчетности с помощью вызова ObjectSpace.RegisterFileReportTemplate<TReport, TFileReportGenerator>();
Регистрация выполняется в методе UpdateDatabaseAfterUpdateSchema() класса - апдейтера модуля, в котором реализован генератор. После регистрации разработанный электронный отчет появляется в списке шаблонов указанного в метод регистрации Xafari отчета. При выполнении электронного отчета на локальную машину клиента загружается zip-архив, содержащий все потоки данных в виде файлов, имена которых совпадают с именами потоков, переданных в метод GetStream.
Имя zip-архива задается в поле TemplateFileName шаблона электронного отчета ITemplateFileReport. При формировании имени архива используется ObjectFormatter. В форматтере доступны поля Parameters и DataSource - параметры и источник данных отчета соответственно.

Доработаны Excel - отчеты системы отчетности Xafari

  • Отчеты Excel реализованы в виде модулей:

Xafari.Reports.Excel
Xafari.Reports.Excel.Web
Xafari.Reports.Excel.Win
Xafari.Excel.Template
Xafari.Excel.Template.Win

  • Для использования Excel отчетности в приложение необходимо добавить модули:
    • платформенно-независимые: Xafari.Reports.Excel, Xafari.Excel.Template;
    • для Windows версии: Xafari.Reports.Excel.Win, Xafari.Excel.Template.Win;
    • для Web версии: Xafari.Reports.Excel.WebВ Windows версии приложения доступны функции;
    • редактирование шаблона Excel отчета с использованием Microsoft Office Excel;
    • предварительный просмотр Excel отчета с использованием Microsoft Office ExcelВ Web версии приложения доступны функции;
    • предварительный просмотр Excel отчета посредством компонента ASPxSpreadSheet;
    • скачивание файла Excel отчета на локальную машину клиента с использованием стандартной функции браузера.

    В Web версии приложения по умолчанию шаблоны отчетов должны храниться в папке Web-сервера ~\App_Data\ExcelTemplates, также на Web-сервере должна присутствовать доступная для записи папка ~\App_Data\ExcelReports.
    При необходимости изменить путь к папкам по умолчанию в прикладном приложении нужно переопределить контроллер WebExcelReportExecuterController, в котором переопределить методы CreateReport и PreviewReport, где нужным образом настроить поля ExcelReportsPath и ExcelTemplatesPath экземпляра класса WebExcelReportExecuter.

Действия (Actions) "Виды отчетов" и "Список отчетов" переведены в категорию "Hidden".

  • Действия (Actions) "Виды отчетов" (SimpleAction saListReport) и "Список отчетов" (SimpleAction saListParameters) переведены в категорию "Hidden". Т.е. теперь по умолчанию они не отображаются в панели инструментов приложения. При необходимость отображения этих действий в приложении их нужно добавить либо в виде элемента АРМ - Action, либо перевести в требуемую категорию посредством настройки модели. Указанные действия находятся в модуле Xafari.Reports.

Реализован новый элемент АРМ (ArmItemReport)

  • В систему отчетности Xafari введена возможность добавлять конкретный отчет в АРМы. Для этого разработан новый тип элемента АРМ - ArmItemReport (Xafari Report). Функционал реализован в виде отдельного модуля Xafari.Reports.Arm.
    Отчет представляется в иерархическом виде:

[Отчет]
+- Редактировать...
+- Набор параметров 1
+- Набор параметров 2
...

где корневым узлом является отчет, а дочерние узлы представляют имеющиеся наборы параметров данного отчета. Для получения отчета необходимо выбрать требуемый дочерний узел.
При выборе узла "Редактировать..." открывается представление настройки отчета.
Если для отчета не задан ни один набор параметров, то отчет в АРМах представляется только корневым узлом. При выборе этого узла открывается представление настройки отчета.

Переделан механизм логирования длительных операций

  • Логирование длительных операций происходит в отдельном потоке.

Добавлен AdvancedBandedListEditor для Win платформы

  • AdvancedBandedListEditor был перенесен из Ranet.XF, где носил название AdvBandedListEditor.
  • Так же был добавлен пример в FeatureCenter. Данный редактор предоставляет возможность группировки колонок для списковых форм. Группировку колонок можно настроить как непосредственно в коде, так и в дизайнере модели. Для настройки в коде необходимо , чтобы класс наследовал интерфейс Xafari.IAdvBanded. Для каждого свойства, которое должно должно попасть в группу нужно задать атрибут "Band". Значение этого атрибута у объекта может быть определено в коде при помощи CustomAttribute: [CustomAttribute("Band", "BandId")]. Значение "BandId" указывает Id группы, в которую должно попасть свойство, обозначенное данным атрибутом. Если для узла Bands выполнить команду контекстного меню Add Band, то произойдет добавление в модель группы. Для каждой группы с помощью команды контекстного меню Add Row можно добавить любое количество строк. Для каждой строки с помощью команды контекстного меню Add Column можно добавить любое количество колонок.

Общие данные

  • В новые общие данные для совместимости добавлен Subdivision и у Employee добавлены поля из Person

Протоколирование

  • Добавлены методы по работе с терминами;
  • Изменен класс DomainLogicBase;

Экспорт в xml файл в формате Атлантис приложения

  • Реализован экспорт в xml в формате Атлантис приложения. Все настройки маппирования и команды экспорта прежние. При экспорте создаются xml файлы в соответствии с названием параметра TableName.

Ограничение значений в списковой форме

  • Добавлена возможность ограничивать значения в списковой форме в режиме редактирования;
  • Редакторы WinLongPropertyEditor, WinIntegerPropertyEditor, WinFloatPropertyEditor, WinDoublePropertyEditor, WinDecimalPropertyEditor, WinBytePropertyEditor переименованы соответственно XafariLongPropertyEditor, XafariIntegerPropertyEditor, XafariFloatPropertyEditor, XafariDoublePropertyEditor, XafariDecimalPropertyEditor, XafariBytePropertyEditor.

Подключения внешнего модуля с подпиской на события

  • Реализован механизм подключения из внешнего модуля обработчиков событий, которые срабатывают в процессе импорта.

Десериализация настройки маппинга

  • Можно в схеме маппирования не указывать тег TableName в этом случае для этого типа не будут пытаться загружаться входящие данные из источника данных. При этом структура маппинга для типа будет загружена в схему.

Устранена ошибка с доступом к правам на действие

  • Метод XafariSecuritySystem.Setup стал устаревший
  • Для получения списка действий используется XafariModule.Application.Mode

Дополнительные доработки

  • При смене текущего View вызывается метод BreakLinksToControl
  • Добавлена функциональность поддержки шаблонов
  • Исправлен механизм получения пользовательских настроек для DatabaseUserSettingsStore
  • Исправлена работа CustomNumerator'ов
  • Добавлен AdvancedBandedListEditor для Win платформы
  • Добавлены редакторы Xafari.Editors.Win.XafariDatePropertyEditor и ASPxXafariDateTimePropertyEditor с возможностью ввода значения без ввода разделителя;
  • При обновлении View обновляется текст контрола MultipleLookup
  • Обновление формы длительной операции при быстором выполнении
  • Исправлена работа XafariLookupEditor'a при пустом значении поля
  • При старте Web версии приложения после выбора рабочего места (после логина) отображается главная страница приложения;
  • Assembly EntityAssembly сохраняется на диск и обновляется только по мере необходимости;
  • Исправлена ошибка в нумераторах, когда подставлялся шаблон вместо номера
  • Для контрола убраны конкретные значения размера
  • Добавлен пример (в приложения FeatureCenter и Northwind.DC) реагирования на изменение ссылки на модель.