<< Click to Display Table of Contents >> Разработка > Примеры разработки > Папки и списки Как ограничить видимость сотрудников в списках |
Ситуация
Предположим, в Directum RX в справочнике Настройки видимости оргструктуры установили флажок Ограничить видимость оргструктуры:
Поэтому сотрудники видят в справочнике Сотрудники и в выпадающих списках при заполнении полей только коллег из той нашей организации, к которой относятся сами. При этом в карточках документов, а также в задачах и заданиях в полях Подписал и На подпись отображаются сотрудники, для которых настроено подходящее право подписи, т.е. ограничение видимости не работает.
Рассмотрим, как эта функциональность реализована в базовом решении Directum RX.
Решение
1.Чтобы сотрудники видели в справочнике Сотрудники и в выпадающих списках при like-вводе только коллег из своей организации, в справочник Сотрудники (Employee) добавлен обработчик события UI-фильтрация:
public override IQueryable<T> Filtering(IQueryable<T> query, Sungero.Domain.UiFilteringEventArgs e)
{
query = base.Filtering(query, e);
if (Functions.Module.IsRecipientRestrict())
{
var visibleRecipientIds = Functions.Module.GetVisibleRecipientIds(Constants.Module.EmployeeTypeGuid);
return query.Where(c => visibleRecipientIds.Contains(c.Id));
}
return query;
}
Событие UI-фильтрации отрабатывает на веб-сервере после наложения всех остальных фильтров, т.е. после базовой фильтрации base.Filtering(). UI-фильтрация в отличии от обычной не влияет на вычисления в коде, таким образом не искажает данные, например, для отчетов. Служит для повышения удобства пользователей при работе с системой.
GetVisibleRecipientIds() – это функция, которая с помощью хранимой процедуры по настройкам определяет, кого должны видеть сотрудники, и возвращает список ИД сотрудников. На основании ИД формируется запрос query.Where(c => visibleRecipientIds.Contains(c.Id)). После чего событие UI-фильтрации возвращает список сотрудников.
2.Чтобы в карточках документов, а также в задачах и заданиях в полях Подписал и На подпись ограничение видимости не работало, выполнение события UI-фильтрация точечно отключено в карточке:
•Официального документа (OfficialDocument) для свойства OurSignatory;
•Задачи на согласование по регламенту (ApprovalTask) для свойства Signatory;
•Задания на доработку (ApprovalReworkAssignment) для свойства Signatory;
•Задания на согласование с руководителем (ApprovalManagerAssignment) для свойства Signatory.
В обработчик события Фильтрация выбора из списка для перечисленных свойств добавлен код:
e.DisableUiFiltering = true;
Functions.OfficialDocument.GetSignatoriesIds(document).Distinct().ToList();
return query.Where(s => signatories.Contains(s.Id));
© Компания Directum, 2024 |