Перейти к содержанию

Фильтр записей в коллекции по заданному параметру

  • Область применения: Форма: Фильтр на ссылку

В этой статье будет описано как с помощью языка запросов N3 можно фильтровать данные в коллекции по какому-либо параметру, определённому в текущей записи.

Для начала рассмотрим модель данных:

  • Шаблон записи (в нашем примере «Organizatsii»), хранящий мастер-данные, со следующими атрибутами:
    1. Атрибут (в нашем примере «Filtrpooblasti» с типом данных «Текст»), в котором будет определен параметр для поиска записей в коллекции;
    2. Атрибут с типом данных «Коллекция» (в нашем примере «Adresaofisov_col»), коллекция, записи в которой будут фильтроваться.
  • Шаблон записи (в нашем примере «Adresa»), хранящий записи в коллекции, со следующими атрибутами:
    1. Атрибут (в нашем примере «Oblast» с типом данных «Текст»), по которому будет осуществляться фильтрация.

Далее, на конструкторе формы кликните на коллекцию и вставьте следующее выражение в «Фильтры записей: Для отображения»:

@prefix object: <http://comindware.com/ontology/object#>.

{

   ("Adresa" "Oblast") object:findProperty ?PropertyOblast.

   ("Organizatsii" "Adresaofisov_col") object:findProperty ?PropertyAdresaofisov_col.

   ("Organizatsii" "Filtrpooblasti") object:findProperty ?PropertyOblastFilter.

 

   ?item ?PropertyOblastFilter ?filter.

   ?item ?PropertyAdresaofisov_col ?result_A.

   ?result_A ?PropertyOblast ?filter.

   ?result_A -> ?value.

}

Теперь разберём выражение на N3 построчно:

  • @prefix object: <http://comindware.com/ontology/object#> — в первой строке подключаем библиотеку «object» для того, чтобы в последующем можно было использовать её свойство «findProperty».
  • ("Adresa" "Oblast") object:findProperty ?PropertyOblast. — в строках 3-5 определяем переменные-предикаты, через которые будем получать значения атрибутов. Сначала указываем системное имя шаблона записи, затем системное имя атрибута, значение которого хотим получить: ("Adresa" "Oblast"). Затем используем свойство библиотеки «object:findProperty», чтобы получить ID атрибута в какую-либо переменную, например, «PropertyOblast» (названия переменных задаются произвольно).
  • ?item ?PropertyOblastFilter ?filter. — в 7-ой строке происходит следующее: из текущей записи («item») по свойству «PropertyOblastFilter» получаем значение в переменную «filter» (название переменной также задаём произвольно).

Примечание : в языке запросов N3 присутствуют зарезервированные переменные: «item» и «value». «item» — содержит в себе ID записи, в рамках которой отрабатывает выражение (изначальный контекст). «value» — используется для вывода результата тройки.

  • ?item ?PropertyAdresaofisov_col ?result_A. — аналогичное действие происходит и в 8-ой строке: из текущей записи получаем значение атрибута «Adresaofisov_col» в переменную «result_A». Так как этот атрибут является коллекцией, то в «result_A» у нас будет содержаться список записей в коллекции.
  • ?result_A ?PropertyOblast ?filter. — в 9-ой строке для всего списка записей «result_A» мы получаем значения по свойству «PropertyOblast». Справа у нас уже определено значение («filter»), поэтому в списке останутся только те записи, у которых значение атрибута «Oblast» совпадает со значением в атрибуте «Filtrpooblasti».
  • ?result_A -> ?value. — в 10-ой строке выводим результат в «value», после чего можем наблюдать отфильтрованную коллекцию.

Пример фильтрации записей в коллекции

Пример фильтрации записей в коллекции