Creatio development guide

Правило 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-2017.

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

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