Creatio development guide
Разработка в bpm'online на примерах

Пример применения правила 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. — Отфильтрованные области в окне выбора

© Terrasoft 2002-2017.

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

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