logo

Использование фильтров по экземплярам объекта в сценариях

Часто в сценариях требуется произвести выборку экземпляров объекта, которые удовлетворяют некоторым заранее заданным условиям. Наиболее оптимальным методом решения такой задачи является использование фильтров.

Пусть необходимо найти среди пользователей всех однофамильцев, т.е. всех пользователей с фамилией "Иванов". В таком случае сценарий будет иметь следующий вид.

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.12.1 включительно.

Пространство имен:

using EleWise.ELMA.API;

Текст сценария:

//Создание фильтра по экземплярам объекта "Пользователь", по фамилии и запись результатов в переменную Poljzovateli, которая имеет тип "Пользователь" с типом связи "Список"
context.Poljzovateli.AddAll(PublicAPI.Portal.Security.User.Filter().LastName("Иванов").Find());

Пример сценария без использования PublicAPI

Пространства имен:

using EleWise.ELMA.Services;
using EleWise.ELMA.Security.Models;

Текст сценария:

var a = new InstanceOf<IUserFilter> { //создание фильтра
    New = {
     LastName = "Иванов",   //критерий отбора
     }
    }.New;
    // запись результатов в переменную Poljzovateli, которая имеет тип Пользователь с типом связи Список
    context.Poljzovatelj.AddAll(EntityManager<User>.Instance.Find(a, null)); 

Для пользовательских объектов также можно использовать фильтры в сценариях. Пусть существует пользовательский справочник Филиал, в котором хранится список филиалов компании и данные о них. Необходимо отобрать с помощью фильтра только те филиалы, которые находятся в городе Москва, т.е. такие экземпляры объекта Филиал, в которых строковое поле Город принимает значение "Москва". Чтобы иметь возможность использовать фильтры для пользовательских объектов в сценариях, необходимо выполнение следующих условий:

1. В настройках того свойства справочника, по которому будет осуществляться фильтрация, на вкладке Дополнительно должен быть установлен флажок Участвует в поиске (фильтре):

2. При установке флажка Участвует в поиске (фильтре) будет выведено сообщение о включении генерации фильтра. Чтобы продолжить работу, необходимо нажать на кнопку ОК:

Генерацию фильтра можно включить другим способом: в настройках Дизайнера включить расширенный режим, перейти к настройкам объекта на вкладку Дополнительно и установить флажок Генерировать фильтр:

Сценарий поиска примет следующий вид.

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.12.1 включительно.

Пространства имен:

using EleWise.ELMA.ConfigurationModel;
using EleWise.ELMA.API;

Текст сценария:

//Создание фильтра по экземплярам объекта Филиал, по полю Город и запись результатов в переменную FilialyVMoskve, которая имеет тип Филиал с типом связи Список
context.FilialyVMoskve.AddAll(PublicAPI.Objects.UserObjects.UserFilial.Filter().Gorod("Москва").Find());

Пример сценария без использования PublicAPI

Пространства имен:

using EleWise.ELMA.Services;
using EleWise.ELMA.ConfigurationModel;

Текст сценария:

var a = new InstanceOf<IFilialFilter> {  //создание фильтра
       New = {
          Gorod = "Москва",      //критерий отбора
          }
       }.New;
       //запись результатов в переменную FilialyVMoskve, которая имеет тип "Филиал" с типом связи "Список"
       context.FilialyVMoskve.AddAll(EntityManager<Filial>.Instance.Find(a, null));