Запуск и выполнение Бизнес-операции может происходить в рамках Управляемой (длительной) Операции. Для этого в классе Бизнес-операции должен быть реализован интерфейс IBusinessOperationManaged.
Интерфейс декларирует свойство Process – объект Управляемой Операции, в рамках которой выполняется Бизнес-операция и два метода - ExecuteManaged(), и RollbackManaged(), запускающих Бизнес-операцию в управляемом контексте. При вызове данные методы инициализируют свойство Process экземпляром создаваемой Управляемой (длительной) Операции.
При разработке класса управляемой бизнес-операции вместо непосредственной реализации интерфейса IBusinessOperationManaged целесообразно воспользоваться готовым базовым классом BusinessOperationManagedBase. Класс реализует методы ExecuteManaged() и RollbackManaged(), а также предоставляет два защищенных виртуальных метода - CreateManagedOperation() и CreateManagedOperationStub().
Первый метод, CreateManagedOperation(), создает экземпляр класса ManagedOperation, в контексте которой выполняется Бизнес-операция. При необходимости кастомизации Управляемой Операции, метод можно перекрыть в классе разрабатываемой Бизнес-операции.
Второй метод, CreateManagedOperationStub(), служит для создания экземпляра класса ManagedOperationStub. ManagedOperationStub - это класс-заглушка Управляемой Операции. Он используется, если происходит обращение к свойству Process без его предварительной инициализации. Управляемую Бизнес-операцию допускается вызывать асинхронно, для чего вместо вызова ExecuteManaged(), вызывается метод Execute(). В коде класса-реализации управляемой Бизнес-операции может выполняться доступ к свойству Process. Класс ManagedOperationStub позволяет избежать повсеместных проверок следующего вида:
public void Execute()
{
…
If (Process != null)
Process.NextStep(…
…
Свойство Process реализовано в базовом классе так, что оно всегда будет проинициализировано.
Если описанное поведение по каким-либо причинам не устраивает разработчика – можно в своем коде перекрыть метод CreateManagedOperationStub() (например, заставив возвращать null).
В остальном разработка управляемой бизнес-операции не отличается от разработки, описанной в разделе Разработка класса бизнес-операции.