Настроить фильтрацию значений справочного поля на странице записи

Средний

Пример. Настроить фильтрацию контактов, которые доступны для выбора при заполнении справочного поля Ответственный (Owner) страницы контрагента. В окне выбора контактов отображать:

  • Контакты, которые имеют связанных пользователей системы.
  • Активные контакты.

Создать схему замещающей модели представления страницы контрагента 

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Замещающая модель представления (Add —> Replacing view model).

  3. Заполните свойства схемы.

    • Код (Code) — "AccountPageV2".
    • Заголовок (Title) — "Страница редактирования контрагента" ("Account edit page").
    • Родительский объект (Parent object) — выберите "AccountPageV2".
  4. Реализуйте фильтрацию значений справочного поля.

    Для этого задайте свойство attributes для колонки Owner:

    • В свойстве dataValueType укажите значение LOOKUP, которое устанавливает тип данных колонки. Типы данных колонки представлены перечислением Terrasoft.core.enums.DataValueType.
    • В свойстве lookupListConfig укажите конфигурационный объект поля-справочника.
    • В массиве filters укажите функцию, которая возвращает коллекцию фильтров.

    Исходный код схемы замещающей модели представления страницы контрагента представлен ниже.

    AccountPageV2
    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;
                            }
                        ]
                    }
                }
            }
        };
    });
    	
  5. На панели инструментов дизайнера нажмите Сохранить (Save).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера, обновите страницу раздела Контрагенты (Accounts).

В результате выполнения примера при заполнении справочного поля Ответственный (Owner) настроена фильтрация контактов на странице контрагента.

Например, контакт Andrew Z. Barber не доступен для выбора в справочном поле Ответственный (Owner) на странице контрагента, поскольку является неактивным.

Контакт Sheldon Mallen не доступен для выбора в справочном поле Ответственный (Owner) на странице контрагента, поскольку не имеет связанного пользователя системы.