<< Click to Display Table of Contents >> Разработка > Элементы разработки > Типы сущностей > Свойства Вычисляемые свойства
|
![]() ![]() |
Значения вычисляемых свойств определяются автоматически на основании других данных. Благодаря использованию таких свойств:
•снижается стоимость разработки, так как уменьшается количество ситуаций, когда разработчику необходимо писать код;
•можно максимально быстро актуализировать необходимые данные. Например, после устранения ошибок соединения абонентского ящика с сервисом обмена значение статуса соединения сразу обновляется. Это происходит даже если карточка ящика заблокирована другим пользователем;
•оптимизируется процесс сохранения сущности, так как при изменении таких свойств сохраняются только они, а не вся сущность. То есть не вызываются обработчики событий, которые затрагивают другие свойства сущности;
•уменьшается нагрузка на систему, поскольку количество выполняемого кода снижается.
В среде разработки можно настроить два типа вычисления:
ПРИМЕЧАНИЕ. Вычисляемые свойства нельзя редактировать в карточке сущности.
Настройка доступна для свойств типа Строка, Ссылка, Целое, Вещественное, Дата, Логическое и Перечисление.
Значение свойства определяется на основе других свойств типа Ссылка. Его нельзя редактировать программно, но к нему можно обращаться в коде.
ПРИМЕЧАНИЕ. Вычисляемое свойство хранит не значение, а ссылку на него в базе данных. Благодаря этому в карточке сущности значение актуализируется автоматически.
Предположим, в карточке созданного типа документа Заявки сотрудников после заполнения поля Сотрудник необходимо чтобы свойство Табельный номер сотрудника автоматически заполнялось информацией из справочника Сотрудники. Для этого:
1.Откройте редактор типа сущности Заявки сотрудников.
2.В узле «Свойства» перейдите к свойству, значение которого нужно вычислять автоматически. В нашем случае Табельный номер сотрудника (EmployeePersonnelNumber):
3.Установите флажок Вычисляемое свойство и заполните поля:
Тип вычисляемого свойства. В выпадающем списке выберите значение Ссылка на свойство.
Свойство-ссылка. В выпадающем списке выберите свойство типа Ссылка, откуда нужно брать данные. В примере это свойство Сотрудник (Employee), которое ссылается на одноименный справочник.
Брать значение из. В выпадающем списке выберите свойство, значение которого нужно брать. В примере это свойство Табельный номер (PersonnelNumber) справочника Сотрудники (Employee).
Далее на схеме показан механизм заполнения полей:
4.Сохраните изменения.
В результате свойству Табельный номер сотрудника (EmployeePersonnelNumber) будет автоматически присваиваться значение после заполнения свойства Сотрудник (Employee).
Внешнее вычисление следует использовать, когда значение свойства вычисляется по сложному алгоритму, при этом оно должно актуализироваться максимально быстро. Такое свойство можно изменять программно, при этом оно остается доступным для редактирования, даже если карточка сущности заблокирована.
Для свойства нельзя создавать собственные обработчики событий, но с ним можно работать в других функциях и обработчиках.
ПРИМЕЧАНИЕ. При сохранении изменений свойств с типом Внешнее вычисление не вызываются обработчики событий, которые затрагивают другие свойства сущности. Таким образом оптимизируется процесс сохранения.
Предположим, в карточке абонентского ящика подразделения необходимо поддерживать в актуальном состоянии статус соединения с сервисом обмена. Для этого:
1.Откройте редактор типа сущности Абонентский ящик (BoxBase).
2.В узле «Свойства» перейдите к свойству ConnectionStatus и установите флажок Вычисляемое свойство:
3.В выпадающем списке Тип вычисляемого свойства выберите пункт Внешнее вычисление.
4.Перейдите в разделяемые функции модуля ExchangeCore и добавьте код, который актуализирует значение свойства ConnectionStatus:
/// <summary>
/// Проставить статус соединения в абонентских ящиках подразделений.
/// </summary>
/// <param name="box">Абонентский ящик нашей организации.</param>
public void SetDepartmentBoxConnectionStatus(IBusinessUnitBox box)
{
var departmentBoxes = Functions.BoxBase.Remote.GetActiveChildBoxes(box);
var closedDepartmentBoxes = Functions.BoxBase.Remote.GetClosedChildBoxes(box);
departmentBoxes.AddRange(closedDepartmentBoxes);
departmentBoxes = departmentBoxes.Where(x => !Equals(x.ConnectionStatus, box.ConnectionStatus)).ToList();
foreach (var departmentBox in departmentBoxes)
{
if (!Equals(departmentBox.ConnectionStatus, box.ConnectionStatus))
{
departmentBox.ConnectionStatus = box.ConnectionStatus;
departmentBox.Save();
}
}
}
5.Добавьте вызов функции в обработчик события фонового процесса SyncBoxes.
6.Сохраните изменения.
В результате состояние соединения абонентского ящика с сервисом обмена в свойстве ConnectionStatus автоматически актуализируется фоновым процессом. Это выполняется, даже если пользователь блокирует карточку абонентского ящика.
В системе Directum RX помимо Соединение абонентского ящика таким способом реализованы свойства Фактическая дата исполнения поручения и Статус поручения.
© Компания Directum, 2025 |