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

Средний
PDF

Пример. Настроить фильтрацию полей Страна (Country), Область/штат (State/province), Город (City) страницы контакта. Перечень доступных для выбора областей/штатов зависит от страны, выбранной в поле Страна (Country). Перечень доступных для выбора городов зависит от области/штата, выбранного в поле Область/штат (State/province).

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

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

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

    • Код (Code) — "ContactPageV2".
    • Заголовок (Title) — "Схема отображения карточки контакта" ("Display schema - Contact card").
    • Родительский объект (Parent object) — выберите "ContactPageV2".
  4. В объявлении класса модели представления в качестве зависимостей добавьте модуль BusinessRuleModule.
  5. Реализуйте фильтрацию значений связанных справочных полей.

    1. В свойство rules для колонок City и Region:

      • В свойстве ruleType укажите значение FILTRATION, которое задает тип бизнес-правила. Типы правил представлены перечислением BusinessRuleModule.enums.RuleType.
      • В свойстве autocomplete укажите значение true, которое выполняет обратную фильтрацию, т. е. автозаполнение полей Страна (Country) и Область/штат (State/province) в зависимости от выбранного города.
    2. В массив модификаций diff добавьте конфигурационный объект с настройками расположения полей Страна (Country), Область/штат (State/province), Город (City).

      В базовой схеме страницы контакта определено правило фильтрации городов в зависимости от указанной для контакта страны. Чтобы получить возможность выбрать город из страны, которая отличается от указанной для контакта, то необходимо добавить поле Страна (Country).

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

    ContactPageV2
    /* В качестве зависимостей укажите модуль BusinessRuleModule. */
    define("ContactPageV2", ["BusinessRuleModule"],
        function(BusinessRuleModule) {
            return {
                /* Название схемы объекта страницы записи. */
                entitySchemaName: "Contact",
                /* Бизнес-правила модели представления страницы записи. */
                rules: {
                    /* Набор правил для колонки [City] модели представления. */
                    "City": {
                        /* Правило фильтрации колонки [City] по значению колонки [Region]. */
                        "FiltrationCityByRegion": {
                            /* Тип правила FILTRATION. */
                            "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
                            /* Выполняется обратная фильтрация. */
                            "autocomplete": true,
                            /* Выполняется очистка значения при изменении значения колонки [Region]. */
                            "autoClean": true,
                            /* Путь к колонке для фильтрации в справочной схеме [City], на которую ссылается колонка [City] модели представления страницы записи. */
                            "baseAttributePatch": "Region",
                            /* Тип операции сравнения в фильтре. */
                            "comparisonType": Terrasoft.ComparisonType.EQUAL,
                            /* Тип выражения — атрибут (колонка) модели представления. */
                            "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                            /* Название колонки модели представления, значение которой сравнивается в выражении. */
                            "attribute": "Region"
                        }
                    },
                    /* Набор правил для колонки [Region] модели представления. */
                    "Region": {
                        "FiltrationRegionByCountry": {
                            "ruleType": BusinessRuleModule.enums.RuleType.FILTRATION,
                            "autocomplete": true,
                            "autoClean": true,
                            "baseAttributePatch": "Country",
                            "comparisonType": Terrasoft.ComparisonType.EQUAL,
                            "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                            "attribute": "Country"
                        }
                    }
                },
                /* Отображение полей на странице записи. */
                diff: [
                    /* Метаданные для добавления на страницу записи поля [Country]. */
                    {
                        /* Выполняется операция добавления элемента на страницу. */
                        "operation": "insert",
                        /* Мета-имя родительского контейнера, в который добавляется поле. */
                        "parentName": "ProfileContainer",
                        /* Поле добавляется в коллекцию элементов родительского элемента. */
                        "propertyName": "items",
                        /* Мета-имя добавляемого поля. */
                        "name": "Country",
                        /* Свойства, передаваемые в конструктор элемента. */
                        "values": {
                            /* Тип поля — справочник. */
                            "contentType": Terrasoft.ContentType.LOOKUP,
                            /* Настройка расположения поля. */
                            "layout": {
                                /* Номер столбца. */
                                "column": 0,
                                /* Номер строки. */
                                "row": 6,
                                /* Диапазон занимаемых столбцов. */
                                "colSpan": 24
                            }
                        }
                    },
                    /* Метаданные для добавления на страницу записи поля [Region]. */
                    {
                        "operation": "insert",
                        "parentName": "ProfileContainer",
                        "propertyName": "items",
                        "name": "Region",
                        "values": {
                            "contentType": Terrasoft.ContentType.LOOKUP,
                            "layout": {
                                "column": 0,
                                "row": 7,
                                "colSpan": 24
                            }
                        }
                    },
                    /* Метаданные для добавления на страницу записи поля [City]. */
                    {
                        "operation": "insert",
                        "parentName": "ProfileContainer",
                        "propertyName": "items",
                        "name": "City",
                        "values": {
                            "contentType": Terrasoft.ContentType.LOOKUP,
                            "layout": {
                                "column": 0,
                                "row": 8,
                                "colSpan": 24
                            }
                        }
                    }
                ]
            };
        });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

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

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

В результате выполнения примера в профиль контакта на страницу контакта добавлены связанные справочные поля Страна (Country), Область/штат (State/province), Город (City).

В профиле контакта можно изменить страну контакта.

Также фильтрация выполняется в окне выбора страны.

Перечень доступных для выбора областей/штатов зависит от страны, выбранной в поле Страна (Country). Фильтрация выполняется как в поле ввода значения, так и в окне выбора области/штата.

Перечень доступных для выбора городов зависит от области/штата, выбранного в поле Область/штат (State/province). Фильтрация выполняется как в поле ввода значения, так и в окне выбора города.