Обновление данных после выполнения бизнес-операции

StatusIDPriorityType
Closed4763ОбычныйВопрос
ProfileReply
AleksejLClient

Добрый день.
После выполнения контекстной бизнес-операции не происходит обновление данных на форме  - приходится вручную обновлять по кнопке [Обновить(F5)]
Можно ли сделать обновление данных автоматически по завершении бизнес-операции?

Replies

UserDescriptionPosted On
Oleg KrupenkinSupport Manager

Архитектура существующего функционала бизнес-операций позволяет легко это выполнить. Ниже приведен пример кода, который решает поставленную задачу. Здесь контроллер активируется для документа "Заказ" (Order). Бизнес-операция ChangeFreightContext изменяет стоимость заказа. После ее выполнения на форме сразу видна измененная стоимость.

public class RefreshOrdersAfterBOExecViewController : ViewController
{
    public RefreshOrdersAfterBOExecViewController()
    {
        TargetObjectType = typeof (Order);
    }

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

    protected override void OnDeactivated()
    {
        Frame.GetController<BOExecViewController>().BOEvents[typeof(ChangeFreightContext)].BusinessOperationExecuting -= OnBusinessOperationExecuting;
        base.OnDeactivated();
    }

    private void OnBusinessOperationExecuting(object sender, BusinessOperationExecutingEventArgs e)
    {
        e.BusinessOperation.Executed += BusinessOperationOnExecuted;
        e.BusinessOperation.HandleException += BusinessOperationOnHandleException;
    }

    private void BusinessOperationOnHandleException(object sender, HandleExceptionEventArgs e)
    {
        ((IBusinessOperation)sender).Executed -= BusinessOperationOnExecuted;
    }

    private void BusinessOperationOnExecuted(object sender, EventArgs e)
    {
        ((IBusinessOperation) sender).Executed -= BusinessOperationOnExecuted;

        // Обновляем представление после выполнения БО.
        View.ObjectSpace.Refresh();
    }
}

× This ticket is closed.