CallContext – контекст вызова
<< Click to Display Table of Contents >> Объектная модель > Основные механизмы CallContext – контекст вызова |
Контекст вызова позволяет определить из карточки или списка какой сущности вызван текущий код, а также получить идентификатор данной сущности. Для определения контекста вызова используется класс CallContext.
Основные сценарии использования:
•запретить создание сущностей в определенных местах пользовательского интерфейса. Например, запретить создавать карточку справочника Персоны из любых мест, кроме карточки справочника Контакты;
•автоматически заполнять свойства сущности. Например в карточке протокола заполнить поле Совещание, если протокол создается из карточки совещания;
•управлять доступностью свойств. Например, если протокол создается из карточки совещания, то в карточке протокола сделать недоступным для изменения поле Совещание, т.к. оно заполняется автоматически;
•управлять видимостью свойств. Например, если карточка справочника Сотрудники открыта из карточки справочника Подразделения, то в карточке сотрудника скрыть поле Подразделение.
В контексте вызова содержится информация о последовательности открытия карточек и списков сущностей в клиентском приложении. Поэтому с помощью методов класса CallContext можно определять, вызван ли код непосредственно из текущей карточки/списка или из общего контекста сущности (с чего началась последовательность).
Например есть последовательность: открыта карточка совещания -> из нее открыта карточка протокола -> из нее нажата кнопка Создать поручения по протоколу. В этом случае:
•если нужно проверить, вызван ли код непосредственно из карточки протокола, при этом не важно, откуда пришли в карточку протокола, то используется метод CalledDirectlyFrom();
•если нужно проверить, вызван ли код в общем контексте сущности, то есть к данному действию пришли из карточки совещания, то используется метод CalledFrom().
Методы
Имя |
Описание |
---|---|
Проверить, вызван ли выполняемый код непосредственно из списка или из карточки конкретного типа сущности |
|
Проверить, вызван ли выполняемый код непосредственно из списка сущностей |
|
CalledFrom() + 2 перегрузки |
Проверить, вызван ли выполняемый код из списка или из карточки сущности (в общем контексте типа сущности, с чего началась последовательность) |
Получить идентификатор сущности, из списка или из карточки которой вызван выполняемый код |
Пример 1. Запрет создания
public override void Created(Sungero.Domain.CreatedEventArgs e)
{
// Запретить создание карточки справочника "Персоны"
// из любых мест, кроме карточки справочника "Контакты".
if (!CallContext.CalledFrom(Contacts.Info))
throw new InvalidOperationException("Создавать персону можно только из карточки контакта.");
}
Пример 2. Автозаполнение свойств и получение идентификатора сущности
public override void Created(Sungero.Domain.CreatedEventArgs e)
{
// Заполнить поле "Эл.почта" в карточке справочника "Персоны",
// если персона создается из карточки справочника "Контакты".
if (CallContext.CalledFrom(Contacts.Info))
{
// Получение идентификатора сущности, из которой был вызван текущий обработчик.
var contactId = CallContext.GetCallerEntityId(Contacts.Info);
var contact = Contacts.Get(contactId);
_obj.Email = contact.Email;
}
}
Пример 3. Управление видимостью/доступностью
public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
{
// Не показывать свойство Department, если карточка справочника "Сотрудники"
// была открыта из карточки справочника "Подразделения".
base.Showing(e);
if (CallContext.CalledFrom(Departments.Info))
_obj.State.Properties.Department.IsVisible = false;
}
© Компания Directum, 2024 |