Содержание:
Бизнес-операции в Бизнес-модели приложения.
- Узел не контекстной Бизнес-операции.
- Узел контекстной Бизнес-операции.
- Подузлы любой Бизнес-операции.
Проекция Модели Приложения на Бизнес-Модель.
Бизнес-операции перечислены в узле Xafari|BusinessOperations Бизнес-модели приложения.
Следует отметить, что данные Бизнес-Модели по умолчанию хранятся не в основной модели приложения, а в отдельных файлах. Доступ к этим данным осуществляется с помощью специального редактора Бизнес-Модели - Project.Xafml.Editor. Для изменения поведения по умолчанию для Бизнес-Модели в прикладном коде можно подписаться на обработку события Xafari.BC.Project.CustomizeProjectInstance, в котором изменить источник данных бизнес-модели. Пример такого обработчика приведен ниже (см. Проекция модели приложения на Бизнес-Модель).
Узел не контекстной Бизнес-операции
Узел не контекстной Бизнес-операции предоставляет следующие свойства:
- ImageName - определяет строковое имя пиктограммы, используемое при отображении айтема, запускающего Бизнес-операцию в пользовательском интерфейсе.
- DefaultImplementation - определяет реализацию по умолчанию.
- ExecutionWay - определяет способ выполнения Бизнес-операции в рамках управляемой операции при запуске из пользовательского интерфейса:
- Asyncronous – асинхронное выполнение. Бизнес-операция выполняется в фоне. Приложение не ожидает результатов выполнения.
- Synchronous – синхронное выполнение. Отображается интерфейс с ходом выполнения. Приложение ожидает окончания выполнения.
- Caption - определяет наименование Бизнес-операции в айтемах пользовательского интерфейса
- Description - определяет краткое описание Бизнес-операции.
- Id - определяет уникальный строковый идентификатор Бизнес-операции. Только для чтения. По умолчанию используется наименование типа (класса) Бизнес-операции.
- Type - определяет класс Бизнес-операции. Только для чтения.
- ParametersDialogSizeable - флаг, который указывает, будет ли диалог ввода параметров бизнес-операции изменяемого размера или фиксированного. Значение по умолчанию - false (т.е. размер диалогов фиксирован).
Большинство описанных свойств при разработке Бизнес-операции могут быть заданы при помощи соответствующего атрибута.
Узел контекстной Бизнес-операции
Узлы, представляющие контекстные Бизнес-операции, содержат дополнительные свойства:
- AutoRefreshView - определяет режим обновления данных на View после выполнения контекстной бизнес-операции. По умолчанию обновление данных не выполняется. Эта функциональность реализована в Xafari.BC.BusinessOperations.Controllers.BORefreshController. Доступны следующие значения:
- Any - выполняется обновление данных на всех типах контекстных View: Detail View и List View;
- DetailView - выполняется обновление данных только на контекстном Detail View;
- ListView - выполняется обновление данных только на контекстном List View;
- None - Значение по умолчанию. Обновление данных не выполняется.
Значение данного свойства можно также указать в прикладном коде, с помощью атрибута ModelDefaultAttribute:
[ModelDefault("AutoRefreshView", "DetailView")]
public class MyBusinessOperation : BusinessOperationBase {...}
Контроллер предоставляет точки расширения в виде событий CustomRefreshBeforeExecute, CustomRefreshAfterExecute, CustomMatch.
События позволяют дополнить или заменить полностью логику обновления данных после выполнения бизнес операции.
Для получения дополнительной информации см. справку по классам:
Xafari.BC.BusinessOperations.Controllers.BOExecViewController
Xafari.BC.BusinessOperations.Controllers.BORefreshController
Xafari.BC.BusinessOperations.Model.IModelBusinessOperationContext
Xafari.BC.BusinessOperations.ContextViewType
- ContextDataType - определяет тип данных, представляющих контекст (например, тип бизнес-объекта, для которого предназначена данная Бизнес-операция). Только для чтения.
- ContextProperty - определяет ссылку на свойство Бизнес-операции, являющееся контекстным.
- ContextViewType - определяет тип View, с которым может быть использована Бизнес-операция: DetailView, ListView, Any.
- ContextTypeMatchMode - определяет режим проверки соответствия контекстной Бизнес-операции типу бизнес-объекта, к которому бизнес-операция может применяться:
- ObjectTypeOrSuccessors - тип контекстного свойства Бизнес-операции должен соответствовать типу бизнес-объекта и всем наследникам типа контекстного свойства. Это значение по умолчанию.
- ExactObjectType - тип контекстного свойства Бизнес-операции должен в точности соответствовать типу бизнес-объекта.
- SuccessorsOnly - тип контекстного свойства Бизнес-операции должен соответствовать всем наследникам типа контекстного свойства.
Значение данного свойства можно указать в прикладном коде, с помощью атрибута ContextPropertyAttribute, задав его свойство TypeMatchMode.
- ContextObjectsCriteria - определяет строку с критерием, который вычисляется на экземпляре выделенного (текущего) бизнес-объекта. Если результат вычисления равен False, то Бизнес-операция в списке действий становится не активной.
Значение данного свойства можно указать в прикладном коде с помощью атрибута ContextPropertyAttribute, задав его свойство ObjectsCriteria.
- ContextObjectsCriteriaMode - определяет режим проверки критерия для нескольких выделенных объектов:
- TrueAtLeastForOne - критерию должен удовлетворять хотя бы один выделенный объект.
- TrueForAll - критерию должны удовлетворять все выделенные объекты.
Значение данного свойства можно указать в прикладном коде с помощью атрибута ContextPropertyAttribute, задав его свойство ObjectsCriteriaMode.
Подузлы любой Бизнес-операции.
Узел каждой Бизнес-операции состоит из следующих подузлов:
- Categories
- Implementations
- Parameters
Рассмотрим их подробнее.
Categories.
Перечень категорий, к которым относится Бизнес-операция. Применяется одноуровневая группировка Бизнес-операций по категориям при отображении Бизнес-операций в пользовательском интерфейсе (меню Actions и иерархический список Бизнес-операции). Одна Бизнес-операция может принадлежать нескольким категориям. Категория «по умолчанию» должна называться Default. Бизнес-операции этой категории отображаются в корне списка. Категории можно добавлять, удалять, редактировать.
Implementations.
Узел содержит перечень доступных реализаций. Для реализации можно менять заголовок и описание. Поле Id аналогично такому же полю Бизнес-операции и представляет уникальный идентификатор класса-реализации. Поле Type – класс реализации.
Parameters.
Содержит список параметров Бизнес-операции. Как упоминалось ранее, параметром Бизнес-операции является любое public-свойство класса Бизнес-операции.
Каждый параметр в Модели описывается следующими свойствами:
- CanWrite - булевское значение, true означает, что параметр доступен для записи. Если соответствующее свойство класса БО имеет public-сеттер, то CanWrite будет равно true.
- CanRead - булевское значение, true означает, что параметр доступен для чтения. Если соответствующее свойство класса БО имеет public-сеттер, то CanRead будет равно true.
- Caption - определяет наименование параметра, используется в интерфейсе ввода параметров Бизнес-операции.
- Id - определяет идентификатор параметра, в качестве идентификатора используется имя соответствующего свойства класса Бизнес-операции.
- Index - определяет порядок отображения параметра в интерфейсе ввода параметров Бизнес-операции.
- ToolTip - определяет всплывающую подсказку для параметра в интерфейсе ввода параметров.
- Type - определяет тип соответствующего свойства.
Для отображения контекстных бизнес-операций в списке действий используется специальный SingleChoiceAction. Он называется BOExecuteAction и доступен для настройки в Модели Приложения в списке Actions.
Перечень простых (не контекстных) Бизнес-операций отображается с помощью TreeListBusinessOperations_ListView и представлен узлом модели приложения Views|Xafari.BC.BusinessOperations.TreeList (а также соответствующим элементом NavigationItem).
Проекция модели приложения на Бизнес-Модель
Как упоминалось ранее, бизнес-операции перечислены в виде дочерних узлов узла «Xafari/BusinessOperations» Бизнес-Модели приложения. Данные Бизнес-Модели по умолчанию хранятся не в основной модели приложения, а в отдельных файлах. Модификация этих данных осуществляется с помощью специального редактора Бизнес-Модели - Project.Xafml.Editor, а доступ к ним выполняется посредством специального класса – BusinessModel. Если в приложении не используется Бизнес-Модель, то в прикладном коде (например, в подходящем XAF модуле), необходимо создать обработчик события SafeThreadBusinessModelLoader.Instance.CustomizeBusinessModelInstance, в котором будет выполнена проекция Модели Приложения на Бизнес-Модель. Ниже приведен пример такого обработчика.
public override void Setup(XafApplication application)
{
base.Setup(application);
SafeThreadBusinessModelLoader.Instance.CustomizeBusinessModelInstance += Project_CustomizeProjectInstance;
}
private void Project_CustomizeProjectInstance(object sender, EventArgs e)
{
e.BusinessModel.ApplicationModel = (ModelApplicationBase)e.BusinessModel.XafApplication.Model;
e.BusinessModel.XafApplication.ModelChanged += application_ModelChanged;
}
private void application_ModelChanged(object sender, EventArgs e)
{
BusinessModel.Instance.ApplicationModel = (ModelApplicationBase)BusinessModel.Instance.XafApplication.Model;
}