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

Правило BINDPARAMETER. Как скрыть поле на странице редактирования по определенному условию

Glossary Item Box

Описание кейса

Добавить на страницу редактирования активности новое поле [Место встречи], которое будет отображаться только для активностей категории [Встреча].

К СВЕДЕНИЮ

Добавление поля на страницу редактирования может быть реализовано двумя способами — с помощью Мастера разделов и вручную.

Процесс добавления поля на страницу редактирования описан в статье "Добавление нового поля".

Алгоритм реализации кейса

1. Создать замещающий объект [Активность] и добавить в него новую колонку [Место встречи]

Для этого необходимо перейти в раздел [Конфигурация], выбрать пользовательский пакет и на вкладке [Схемы] выполнить команду меню [Добавить] — [Замещающий объект] (рис. 1).

Рис. 1. — Создание замещающей схемы объекта

Затем нужно заполнить свойства нового объекта, указав в качестве родительского объекта [Активность] (рис. 2).

Рис. 2. — Свойства замещающего объекта [Активность]

После этого добавить в замещающий объект новую колонку [Место встречи] строкового типа (рис. 3.).

Рис. 3. — Добавление пользовательской колонки в замещающий объект

Затем нужно сохранить и опубликовать объект.

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

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

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

3. Добавить поле [Место встречи] на страницу редактирования активности.

Для этого в массив diff нужно добавить конфигурационный объект с настройками расположения поля [Место встречи] на странице. Добавление поля подробно рассмотрено в статье "Добавление нового поля".

Для возможности локализации приложения, необходимо создать локализируемую строку (рис. 5) и связать ее с заголовком поля.

Рис. 5. — Свойства локализируемой строки

4. Добавить правило с типом BINDPARAMETER для колонки [UsrMeetingPlace]

В свойство rules модели представления страницы добавить правило BindParametrVisibilePlaceByType с типом BusinessRuleModule.enums.RuleType.BINDPARAMETER для колонки [UsrMeetingPlace]. Свойство property правила необходимо проинициализировать значением BusinessRuleModule.enums.Property.VISIBLE. В массив conditions нужно добавить условие выполнения правила — значение колонки [ActivityCategory] модели должно быть равно идентификатору категории [Встреча] из справочника категорий активностей.

Для определения идентификатора категории [Встреча] нужно использовать запрос к содержимому справочника с помощью EntitySchemaQuery. Однако, вследствие асинхронной природы методов этого класса, для сохранения результата запроса необходимо создать атрибут MeetingId, а сам запрос выполнять во время инициализации схемы. Для этого необходимо переопределить метод Init() базовой схемы страницы редактирования активности.

К СВЕДЕНИЮ

Идентификатор категории встречи также

Полностью код замещающей страницы:

// В список зависимостей модуля добавить модуль BusinessRuleModule.
define("ActivityPageV2", ["BusinessRuleModule"],
    function(BusinessRuleModule) {
        return {
            // Название схемы объекта страницы редактирования.
            entitySchemaName: "Activity",
            // Атрибут для хранения идентификатора нужной категории активности.
            attributes: {
                "MeetingId": {
                    "dataValueType": Terrasoft.DataValueType.TEXT,
                    "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                    "value": ""
                }
            },
            methods: {
                // Метод инициализации схемы.
                init: function() {
                    this.callParent(arguments);
                    this.initMeetingId();
                },
                // Метод определения идентификатора категории активности.
                initMeetingId: function() {
                    var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ActivityCategory"});
                    // Сохранение контекста модуля в переменную.
                    var scope = this;
                    esq.addColumn("Name", "Name");
                    // Выполнение запроса.
                    esq.getEntityCollection(function(result) {
                        if (result.success) {
                            // Перебор значений справочника [Категория активности].
                            result.collection.each(function(item) {
                                // Если значение колонки [Name] — [Встреча].
                                if (item.get("Name") === "Встреча") {
                                    // Получение идентификатора для категории [Встреча].
                                    var Id = item.get("Id");
                                    // Установка значения атрибута.
                                    scope.set("MeetingId", Id);
                                }
                            });
                        }
                    }, this);
                }
            },
            // Настройка визуализации дополнительного поля на странице редактирования.
            diff: /**SCHEMA_DIFF*/[
                {
                    // Метаданные для добавления поля [Место встречи].
                    "operation": "insert",
                    "parentName": "Header",
                    "propertyName": "items",
                    "name": "UsrMeetingPlace",
                    "values": {
                        "caption": {"bindTo": "Resources.Strings.MeetingPlaceCaption"},
                        "layout": { "column": 0, "row": 6, "colSpan": 12 }
                    }
                }
            ]/**SCHEMA_DIFF*/,
            // Объект правил модели представления страницы редактирования.
            rules: {
                // Набор правил для колонки [UsrMeetingPlace] модели представления. 
                "UsrMeetingPlace": {
                    // Настройка правила видимости поля [UsrMeetingPlace] по колонке [ActivityCategory].
                    "BindParametrVisibilePlaceByType": {
                        // Тип правила BINDPARAMETER.
                        "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
                        // Правило регулирует свойство VISIBLE поля.
                        "property": BusinessRuleModule.enums.Property.VISIBLE,
                        // Массив условий, при выполнении которых отрабатывает правило. В данном
                        // случае массив содержит одно условие для сравнения значения колонки [ActivityCategory] с
                        // идентификатором категории активности [Встреча].
                        "conditions": [{
                            // Выражение левой части условия.
                            "leftExpression": {
                                //Тип выражения ATTRIBUTE указывает на то, что в качестве выражения выступает
                                // аттрибут (колонка) модели представления.
                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                // Название колонки модели представления, значение которой сравнивается в выражении.
                                "attribute": "ActivityCategory"
                            },
                            // Тип операции сравнения.
                            "comparisonType": Terrasoft.ComparisonType.EQUAL,
                            // Выражение правой части условия.
                            "rightExpression": {
                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                // Значение, с которым сравнивается выражение левой части. В данном случае идентификатор
                                // типа [Активности] задается атрибутом MeetingId.
                                "attribute": "MeetingId"
                            }
                        }]
                    }
                }
            }
        };
    });

После сохранения схемы и обновления веб-страницы системы на странице редактирования активности поле [Место встречи] будет отображаться только в том случае, если категория активности — встреча (рис. 5, 6).

Рис. 5. — Результат выполнения кейса. Тип активности — "Выполнить", поле [Место встречи] скрыто

Рис. 6. — Результат выполнения кейса. Тип активности — "Встреча", поле [Место встречи] отображено

© Terrasoft 2002-2018.

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

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