Содержание:

Бизнес-операции в Бизнес-модели приложения.

- Узел не контекстной Бизнес-операции.

- Узел контекстной Бизнес-операции.

- Подузлы любой Бизнес-операции.

Проекция Модели Приложения на Бизнес-Модель.

Бизнес-операции перечислены в узле Xafari|BusinessOperations Бизнес-модели приложения.

Следует отметить, что данные Бизнес-Модели по умолчанию хранятся не в основной модели приложения, а в отдельных файлах. Доступ к этим данным осуществляется с помощью специального редактора Бизнес-Модели - Project.Xafml.Editor. Для изменения поведения по умолчанию для Бизнес-Модели в прикладном коде можно подписаться на обработку события Xafari.BC.Project.CustomizeProjectInstance, в котором изменить источник данных бизнес-модели. Пример такого обработчика приведен ниже (см. Проекция модели приложения на Бизнес-Модель).

Узел не контекстной Бизнес-операции

Узел не контекстной Бизнес-операции предоставляет следующие свойства:

- Asyncronous – асинхронное выполнение. Бизнес-операция выполняется в фоне. Приложение не ожидает результатов выполнения.

- Synchronous – синхронное выполнение. Отображается интерфейс с ходом выполнения. Приложение ожидает окончания выполнения.

Большинство описанных свойств при разработке Бизнес-операции могут быть заданы при помощи соответствующего атрибута.

Узел контекстной Бизнес-операции

Узлы, представляющие контекстные Бизнес-операции, содержат дополнительные свойства:

- 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

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

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

-        SuccessorsOnly - тип контекстного свойства Бизнес-операции должен соответствовать всем наследникам типа контекстного свойства.

Значение данного свойства можно указать в прикладном коде, с помощью атрибута ContextPropertyAttribute, задав его свойство TypeMatchMode.

Значение данного свойства можно указать в прикладном коде с помощью атрибута ContextPropertyAttribute, задав его свойство ObjectsCriteria.

- TrueAtLeastForOne - критерию должен удовлетворять хотя бы один выделенный объект.

- TrueForAll - критерию должны удовлетворять все выделенные объекты.

Значение данного свойства можно указать в прикладном коде с помощью атрибута ContextPropertyAttribute, задав его свойство ObjectsCriteriaMode.

Подузлы любой Бизнес-операции.

Узел каждой Бизнес-операции состоит из следующих подузлов:

Рассмотрим их подробнее.

Categories.

Перечень категорий, к которым относится Бизнес-операция. Применяется одноуровневая группировка Бизнес-операций по категориям при отображении Бизнес-операций в пользовательском интерфейсе (меню Actions и иерархический список Бизнес-операции). Одна Бизнес-операция может принадлежать нескольким категориям. Категория «по умолчанию»  должна называться Default. Бизнес-операции этой категории отображаются в корне списка. Категории можно добавлять, удалять, редактировать.

Implementations.

Узел содержит перечень доступных реализаций. Для реализации можно менять заголовок и описание. Поле Id аналогично такому же полю Бизнес-операции и представляет уникальный идентификатор класса-реализации. Поле Type – класс реализации.

Parameters.

Содержит список параметров Бизнес-операции. Как упоминалось ранее, параметром Бизнес-операции является любое public-свойство класса Бизнес-операции.

Каждый параметр в Модели описывается следующими свойствами:

Для отображения контекстных бизнес-операций в списке действий используется специальный 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;

       }