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

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

Glossary Item Box

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

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

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

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

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

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

В свойство attributes модели представления необходимо добавить новый атрибут с именем колонки объекта, для которой устанавливаются фильтры.

Для этой нужно колонки объявить свойство 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. Создать замещающую страницу редактирования контрагента

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

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

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

В конфигурационном объекте атрибута [Owner] необходимо указать тип данных колонки (свойство dataValueType) — 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;
                        }
                    ]
                }
            }
        }
    };
});

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

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

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

 

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

 

© Terrasoft 2002-2017.

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

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