Creatio development guide
PDF
Это документация Creatio версии 7.16.0. Мы рекомендуем использовать новую версию документации.

Применение фильтрации к справочным полям

Glossary Item Box

Общие сведения

В Creatio существует два способа применения фильтрации к справочным полям страниц редактирования:

  1. Использование бизнес-правила [FILTRATION].
  2. Явное указание фильтров в описании колонки в свойстве модели attributes.

Использование бизнес-правила [FILTRATION] целесообразно в случае, когда к полю необходимо применить простой фильтр — по определенному значению или атрибуту. Бизнес-правила подробно описаны в статье "Бизнес-правила и их применение". Подробный пример по использованию бизнес-правила [FILTRATION] приведен в статье "Пример применения правила FILTRATION".

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

Настройка фильтров справочного поля в свойстве модели attributes:

  1. В свойство attributes модели представления добавьте новый атрибут с именем колонки объекта, для которой устанавливаются фильтры.
  2. Для этой колонки объявите свойство lookupListConfig — конфигурационный объект, содержащий в себе такие свойства (опционально):
    • сolumns — массив имен колонок, которые будут добавлены к запросу дополнительно к Id и первичной для отображения колонке;

    • orders — массив конфигурационных объектов, которые определяют сортировку данных при отображении;

    • filter — метод, возвращающий объект класса Terrasoft.BaseFilter или его наследника, который будет применен к запросу;
    • или filters — массив фильтров (методов, возвращающих коллекции класса Terrasoft.FilterGroup).

Фильтры в коллекцию добавляются с помощью метода add(), который имеет следующие параметры:

Название Тип данных Описание
key String

Ключ.

item Mixed Элемент.
index Number Индекс для вставки. Если не указан, то не учитывается.

В качестве параметра item выступает объект класса Terrasoft.BaseFilter или его наследника. Методы создания фильтров с описаниями приведены в статье "Класс EntitySchemaQuery. Работа с фильтрами".

По умолчанию фильтры в коллекции объединяются с использованием логической операции AND. Если необходимо применить операцию OR, ее нужно указать явно в свойстве logicalOperation объекта Terrasoft.FilterGroup.

Описание примера

При добавлении значения в поле [Ответственный] страницы редактирования контрагента отображать только те значения из справочника контактов, для которых выполняются следующие условия:

  • с данным контактом есть связанный пользователь системы;
  • данный пользователь системы активен.

Исходный код

Пакет с реализацией примера можно скачать по ссылке.

Алгоритм реализации примера

1. Создать замещающую страницу редактирования контрагента

Создайте замещающий клиентский модуль, в котором в качестве родительского объекта укажите схему [Страница редактирования контрагента] ([Account edit page], AccountPageV2 ) (рис. 1). Процесс создания замещающей страницы описан в статье "Создание клиентской схемы".

Рис. 1. — Свойства замещающей страницы редактирования

2. В свойство attributes модели представления добавить атрибут с фильтрацией

В конфигурационном объекте атрибута [Owner] укажите тип данных колонки — Terrasoft.DataValueType.LOOKUP и опишите конфигурационный объект поля-справочника lookupListConfig. В lookupListConfig добавьте свойство filters, представляющее собой массив. В массив добавьте функцию, возвращающую коллекцию фильтров.

Исходный код замещающей схемы:

define("AccountPageV2", [], function() {
    return {
        // Название схемы объекта страницы редактирования.
        "entitySchemaName": "Account",
        // Атрибуты схемы.
        "attributes": {
            // Колонка модели представления.
            "Owner": {
                // Тип данных атрибута.
                "dataValueType": Terrasoft.DataValueType.LOOKUP,
                // Конфигурационный объект атрибута типа LOOKUP.
                "lookupListConfig": {
                    // Массив фильтров, применяемых к запросу для формирования данных поля-справочника.
                    "filters": [
                        function() {
                            var filterGroup = Ext.create("Terrasoft.FilterGroup");
                            // Добавление фильтра "IsUser" в результирующую коллекцию фильтров.
                            // Выбирает все записи из корневой схемы Contact, к которой присоединена
                            // колонка Id из схемы SysAdminUnit, для которых Id не равен null.
                            filterGroup.add("IsUser",
                                Terrasoft.createColumnIsNotNullFilter("[SysAdminUnit:Contact].Id"));
                            // Добавление фильтра "IsActive" в результирующую коллекцию фильтров.
                            // Выбирает все записи из корневой схемы Contact, к которой присоединена
                            // колонка Active из схемы SysAdminUnit, для которых Active=true.
                            filterGroup.add("IsActive",
                                Terrasoft.createColumnFilterWithParameter(
                                    Terrasoft.ComparisonType.EQUAL,
                                    "[SysAdminUnit:Contact].Active",
                                    true));
                            return filterGroup;
                        }
                    ]
                }
            }
        }
    };
});

После сохранения схемы и обновления страницы приложения на странице редактирования контрагента при добавлении значения в поле [Ответственный] ([Owner]) страницы редактирования контрагента будут отображаться только те значения из справочника контактов, которые соответствуют условиям примера (рис. 2, рис. 3). Т.е.:

  • с данным контактом есть связанный пользователь системы;
  • данный пользователь системы активен.

Рис. 2. — Профиль контрагента с ответственным

Рис. 3. — Ответственный отсутствует в отфильтрованном справочнике контактов

© Terrasoft 2002-2020.

Был ли данный материал полезен?

Как можно улучшить эту статью?