Класс Бизнес-операции описывает только ее интерфейс. Непосредственно же бизнес-логика располагается в классах реализации Бизнес-операций. Любая Бизнес-операция может иметь одну или несколько реализаций с возможностью их выбора в качестве реализации по умолчанию.

Класс реализации Бизнес-операции должен реализовать интерфейс IOperationService. Базовая реализация интерфейса выполнена в абстрактном классе OperationServiceBase. Его рекомендуется использовать в качестве базового класса при разработке собственной реализации Бизнес-операции.

Рассмотрим пример разработки класса реализации контекстной списковой Бизнес-операции, рассмотренной в разделе Разработка класса бизнес-операции.

 

  /// <summary>

  /// Реализация бизнес-операции изменения стоимости фрахта.

  /// </summary>

   [BusinessOperation(typeof(ChangeFreightContext))]

   [DisplayName("Реализация по умолчанию")]

   [Description("Выплняет изменение стоимости фрахта на заданную величину в %.")]

  public class ChangeFreightContextDefaultImpl : OperationServiceBase

   {

      public override void Execute(IBusinessOperation businessOperation)

       {

          var bo = (ChangeFreightContext)businessOperation;

 

          var rate = (decimal)(bo.Percent / 100);

 

          using (var objectSpace = BusinessOperationManager.Instance.Application.CreateObjectSpace())

           {

              foreach (var rawOrder in bo.Orders)

               {

                  var order = objectSpace.GetObject(rawOrder); // Документ в текущем ObjectSpace.

                   order.Freight = order.Freight + (order.Freight * rate);

                  var oldFreight = order.Freight;

                  var msg = string.Format("Заказ # {0}. Предыдущая стоимость фрахта {1}, новая {2}",

                       order.Number, oldFreight, order.Freight);

                   bo.ProcessedOrdersLog.Add(msg);

               }

               objectSpace.CommitChanges();

           }

       }

   }

 

Как видно из примера, при использовании OperationServiceBase в качестве базового класса, часто достаточно перекрыть абстрактный метод Execute, который и содержит логику Бизнес-операции.

Также, при необходимости, может быть реализован метод, выполняющий откат Бизнес-операции. Для осуществления такой возможности нужно реализовать интерфейс IOperationServiceReversible. Интерфейс декларирует метод Rollback, который и требуется реализовать.

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

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