<< Click to Display Table of Contents >> Разработка > Примеры разработки > Обработчики событий Передача данных между событиями одной сущности |
Ситуация
Необходимо передать данные между событиями одной сущности.
Рассмотрим на примере базового решения Directum RX. При открытии карточки задачи на исполнение поручения (ActionItemExecutionTask) в событии Показ формы проверяется, разрешены ли в системе поручения без срока. Если разрешены, то в карточке задачи появится возможность установить флажок Без срока. Иначе флажок будет скрыт из карточки.
Чтобы при выполнении обработчика события Обновление формы проверка повторно уже не выполнялась, необходимо результат проверки в одном событии передавать в другое.
Решение
Для передачи данных между обработчиками событий используется параметр Params, поэтому необходимо:
1.В редакторе типа сущности добавить константу с названием параметра для обозначения того, что поручение без срока:
public const string HasIndefiniteDeadline = "HasIndefiniteDeadline";
2.В событии Показ формы результат проверки (разрешены или нет поручения без срока) записать в параметр с помощью e.Params. В зависимости от значения параметра, в карточке поручения появится или скроется флажок Без срока:
// Если параметра нет в карточке задачи, то проверяется,
// разрешены ли поручения без срока.
// Результат проверки записывается в параметр HasIndefiniteDeadline.
public override void Showing(Sungero.Presentation.FormShowingEventArgs e)
{
if (!e.Params.Contains(RecordManagement.Constants.ActionItemExecutionTask.HasIndefiniteDeadline))
e.Params.AddOrUpdate(RecordManagement.Constants.ActionItemExecutionTask.HasIndefiniteDeadline, Functions.Module.AllowActionItemsWithIndefiniteDeadline() || _obj.HasIndefiniteDeadline == true);
}
3.В событии Обновление формы повторно проверку уже не нужно выполнять. Необходимо использовать ранее вычисленное значение параметра HasIndefiniteDeadline:
// Проверяется существование параметра с именем HasTasksInProcess
// и проверяется его значение.
// TryGetValue() – проверка наличия параметра и получение значения.
public override void Refresh(Sungero.Presentation.FormRefreshEventArgs e)
{
var hasIndefiniteDeadline = false;
var indefiniteDeadlineParamExists = e.Params.Contains(RecordManagement.Constants.ActionItemExecutionTask.HasIndefiniteDeadline);
e.Params.TryGetValue(RecordManagement.Constants.ActionItemExecutionTask.HasIndefiniteDeadline, out hasIndefiniteDeadline);
properties.HasIndefiniteDeadline.IsVisible = indefiniteDeadlineParamExists
? hasIndefiniteDeadline
: Functions.Module.AllowActionItemsWithIndefiniteDeadline() || _obj.HasIndefiniteDeadline == true;
}
В результате при открытии и обновлении карточки задачи на исполнение поручения флажок Без срока будет скрыт или показан. При этом на веб-сервер не будут постоянно отправляться лишние запросы на проверку разрешения поручений без срока.
© Компания Directum, 2024 |