Пример применения правила FILTRATION
Glossary Item Box
Общие сведения
Правило FILTRATION Используется для настройки фильтрации значений колонки модели представления. Например, для фильтрации определенной колонки с типом справочник в зависимости от значения текущего состояния страницы. Подробно бизнес-правила описаны в статье "Бизнес-правила и их применение".
Описание кейса
Добавить на страницу контакта поля [Страна], [Область/Штат] и [Город]. При выборе определенной страны список областей должен отфильтровываться по выбранной стране. При выборе определенной области список городов должен отфильтровываться по выбранной области. При выборе определенного города поля страны и области должны заполняться соответствующими городу значениями.
К СВЕДЕНИЮ В базовой схеме страницы редактирования контакта уже определено правило фильтрации городов в зависимости от страны. Поэтому, если не добавлять поле [Страна], то невозможно будет выбрать город из страны, отличной от указанной для контакта. |
Алгоритм реализации кейса
1. Создать замещающую страницу редактирования контакта
Необходимо создать замещающий клиентский модуль, в котором в качестве родительского объекта указать схему ContactPageV2 (Схема отображения карточки контакта) (рис. 1). Процесс создания замещающей страницы описан в статье "Создание клиентской схемы".
Рис. 1. — Свойства замещающей страницы редактирования
2. Добавить поля [Страна], [Область/штат] и [Город] на страницу редактирования.
Для этого необходимо в массив diff добавить три конфигурационных объекта с настройками свойств соответствующих полей. Результирующий исходный код массива приведен ниже.
3. Добавить правила с типом FILTRATION для колонок [Город] и [Область/штат]
Для этого необходимо в свойство rules модели представления страницы добавить два правило с типом BusinessRuleModule.enums.RuleType.FILTRATION для колонок [City] и [Region]. Для выполнения обратной фильтрации, т.е. автозаполнения полей [Страна] и [Область/Штат] соответсвующими значениями в зависимости от выбранного города необходимо установить значение true для свойства autocomplete.
Исходый код замещающей схемы модели представления страницы редактирования контакта:
// В список зависимостей модуля добавить модуль BusinessRuleModule. define("ContactPageV2", ["BusinessRuleModule", "ConfigurationConstants"], function(BusinessRuleModule, ConfigurationConstants) { 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: [ // Метаданные для добавления поля [Страна]. { "operation": "insert", "parentName": "ProfileContainer", "propertyName": "items", "name": "Country", "values": { "contentType": Terrasoft.ContentType.LOOKUP, "layout": { "column": 0, "row": 6, "colSpan": 24 } } }, // Метаданные для добавлния поля [Область/штат]. { "operation": "insert", "parentName": "ProfileContainer", "propertyName": "items", "name": "Region", "values": { "contentType": Terrasoft.ContentType.LOOKUP, "layout": { "column": 0, "row": 7, "colSpan": 24 } } }, // Метаданные для добавления поля [Город]. { "operation": "insert", "parentName": "ProfileContainer", "propertyName": "items", "name": "City", "values": { "contentType": Terrasoft.ContentType.LOOKUP, "layout": { "column": 0, "row": 8, "colSpan": 24 } } } ] }; });
4. Сохранить созданную замещающую схему страницы
После сохранения схемы и обновления веб-страницы системы в профиле контакта появятся три новых поля (рис. 2). В каждом из них содержимое будет фильтроваться в зависимости от значения, выбранного в другом (рис. 3). При этом фильтрация также работает в окне выбора значения из справочника (рис. 3).
Рис. 2. — Новые поля в профиле контакта
Рис. 3. — Фильтрация содержимого полей
Рис. 4. — Отфильтрованные области в окне выбора