Свойство фильтра позволяет более тонко настроить поиск объектов в системе. С его помощью можно объединить поиск из несколько полей или предустановить значения полей.
Рассмотрим пример с использованием свойства фильтра Только мои для объекта Клиент, в котором есть свойство Ответственный типа Пользователь.
Настроим возможность в один клик отфильтровать список клиентов, по которым текущий пользователь является ответственным. Для этого:
- В карточке объекта Клиент на вкладке Дополнительные включим опцию Генерировать фильтр.
- Затем на вкладке Фильтр создадим свойство фильтра Только мои.
- После публикации объекта свойство Только мои появится на форме фильтра.
- Определим логику поиска. Для этого создадим глобальный модуль и добавим в нём новый файл, в котором реализуем системную точку расширения EntityManagerBehavior для работы с фильтром. Пропишем в файле следующий код:
using System;
using System.Collections.Generic;
using System.Linq;
using EleWise.ELMA.API;
using EleWise.ELMA.ComponentModel;
using EleWise.ELMA.ConfigurationModel;
using EleWise.ELMA.Model.Common;
using EleWise.ELMA.Model.Managers;
using EleWise.ELMA.Security.Services;
using NHibernate;
using NHibernate.Criterion;
using System.Text;
namespace ClientManagerBehavior
{
[Component]
public class ClientManagerBehavior : EntityManagerBehavior
{
/// <summary>
/// Менеджер хранения объектов в контексте
/// </summary>
public IAuthenticationService AuthenticationService { get; set; }
/// <inheritdoc />
public override void OnCreateCriteria(ICriteria criteria, IEntityFilter filter)
{
var clientFilter = filter as IClientFilter;//Фильтр нашего объекта
if (clientFilter == null)
{
return; //Если пришел другой фильтр, поиск прозводится по другому объекту, ничего не делаем
}
if (clientFilter.ShowOnlyMy == true)
{
//Если нажат флаг "Только мои" ставим условие выборки
//В свойство "Responsible" подставляется текущий авторизованный пользователь системы
criteria.Add(Restrictions.Eq("Responsible", AuthenticationService.GetCurrentUser()));
}
}
}
}
- Опубликуем глобальный модуль и перезапустим сервер.
Теперь, если на форме расширенного поиска включить опцию Только мои, в результатах поиска отобразятся только те клиенты, по которым текущий пользователь является ответственным.
Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас