Дизайнер ELMA > Объектная модель > Объект > Карточка объекта > Вкладка «Фильтр» / Пример использования фильтра объекта

Пример использования фильтра объекта

Свойство фильтра позволяет более тонко настроить поиск объектов в системе. С его помощью можно объединить поиск из несколько полей или предустановить значения полей.

Рассмотрим пример с использованием свойства фильтра Только мои для объекта Клиент, в котором есть свойство Ответственный типа Пользователь.

оbject-filter-example-1

Настроим возможность в один клик отфильтровать список клиентов, по которым текущий пользователь является ответственным. Для этого:

  1. В карточке объекта Клиент на вкладке Дополнительные включим опцию Генерировать фильтр.
  2. Затем на вкладке Фильтр создадим свойство фильтра Только мои.

оbject-filter-example-2

  1. После публикации объекта свойство Только мои появится на форме фильтра.

оbject-filter-example-3

  1. Определим логику поиска. Для этого создадим глобальный модуль и добавим в нём новый файл, в котором реализуем системную точку расширения 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()));
          }
      }
  }
}

  1. Опубликуем глобальный модуль и перезапустим сервер.

Теперь, если на форме расширенного поиска включить опцию Только мои, в результатах поиска отобразятся только те клиенты, по которым текущий пользователь является ответственным.

оbject-filter-example-4

 

Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас