Запуск бизнес-операции

StatusIDPriorityType
Closed4771ОбычныйВопрос
ProfileReply
AlexClient

Как правильно запустить бизнес-операцию на выполнение из произвольного Action, чтобы отображался процесс выполнения этой операции в отдельном окне?
В проекте HCM была создана бизнес-операция ImportTxtService, но не удалось добиться отображения процесса выполнения операции:

public class MyController : WindowController
{
  public MyController()
  {
    …      
    new SimpleAction(this, "Import", PredefinedCategory.Unspecified) { Caption = "Import" }.Execute += OnExecute;
  }

  …
  private void OnExecute(object sender, SimpleActionExecuteEventArgs e) 
  {
    IObjectSpace os = View.ObjectSpace;
    var importTxtService = new ImportTxtService { ObjectSpace = os };
    importTxtService.ExecuteManaged();
  }
}

Сама бизнес-операция:

public class ImportTxtService : BusinessOperationManagedBase
{
  public IObjectSpace ObjectSpace { get; set; }
}

Replies

UserDescriptionPosted On
Oleg KrupenkinSupport Manager

Если не используется стандартное меню запуска бизнес-операций, вся забота о UI ложится на прикладного разработчика, принявшего такое проектное решение. Если необходимо запускать БО из собственного Action, то можно воспользоваться механизмами, предоставленными Xafari. Для запуска бизнес-операции нужно воспользоваться методом public void RunBusinessOperation(string businessOperationId, BusinessOperationMethod method, ShowViewParameters showViewParameters) контроллера Xafari.BC.BusinessOperations.Controllers.BOExecViewController. Инициализация свойства ObjectSpace бизнес-операции и отображение сообщения по ее завершению в этом случае выполняется путем обработки стандартных событий контроллера BOExecViewController. Ниже приведен пример кода, который выполняет описанную задачу:

public class MyController : WindowController
{
    private BOExecViewController _boExecViewController;

    public MyController()
    {
        ...
        new SimpleAction(this, "Import", PredefinedCategory.Unspecified) { Caption = "Import" }.Execute += OnExecute;
    }

    protected override void OnActivated()
    {
        base.OnActivated();
        _boExecViewController = Frame.GetController<BOExecViewController>();
        _boExecViewController.BOEvents[typeof(ImportTxtService)].BusinessOperationExecuting += OnBusinessOperationExecuting;
        _boExecViewController.BOEvents[typeof(ImportTxtService)].CustomizeResultViewParameters += OnCustomizeResultViewParameters;
    }

    private void OnExecute(object sender, SimpleActionExecuteEventArgs e)
    {
        _boExecViewController.RunBusinessOperation(BusinessOperationBase.GetId(typeof(ImportTxtService)), BusinessOperationMethod.Execute, e.ShowViewParameters);
    }

    private void OnBusinessOperationExecuting(object sender, BusinessOperationExecutingEventArgs e)
    {
        ((ImportTxtService) e.BusinessOperation).ObjectSpace = View.ObjectSpace;
    }

    private void OnCustomizeResultViewParameters(object sender, CustomizeResultViewParametersEventArgs e)
    {
        if (e.Method == BusinessOperationMethod.Execute)
            MessageObject.CreateMessage(e.ShowViewParameters, Application, MessageType.Info, "Сообщение", "Импорт выполнен успешно!");
    }
}

× This ticket is closed.