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

Механизм блокировки полей страницы редактирования

Glossary Item Box

Общие сведения

При разработке пользовательской функциональности bpm'online может возникнуть необходимость в одновременной блокировке всех полей и деталей на странице при выполнении некоторого условия. Механизм блокировки страницы редактирования позволяет существенно ускорить процесс решения данной задачи, не прибегая к написанию большого количества бизнес-правил.

ВАЖНО

Механизм блокировки реализован в bpm'online версий 7.11.1 и выше.

ВАЖНО

Функциональность блокировки полей страницы редактирования может быть отключена с помощью опции CompleteCardLockout на странице отключения функциональности (см. "Механизм отключения функциональности Feature Toggle"). Страница отключения функциональности доступна по адресу ../0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage. Например, https://mycompany.bpmonline.com/0/Nui/ViewModule.aspx#BaseSchemaModuleV2/FeaturesPage

В результате применения механизма блокировки на странице редактирования будут заблокированы все поля и детали. Если для поля существует привязка для свойства enabled в элементе массива diff или в бизнес-правиле, то механизм не будет блокировать такое поле. У деталей скрываются кнопки и элементы меню, которые отвечают за выполнение операций над записью. В детали с редактируемым реестром остается возможность перейти на страницу объекта, однако на ней также будут заблокированы все поля с учетом бизнес-правил.

ВАЖНО

Механизм блокировки предназначен для блокировки деталей с реестром и с редактируемым реестром. Если же необходима корректная работа механизма для деталей с полями редактирования, то необходимо создать замещающую схему такой детали и управлять доступностью полей при помощи атрибута IsEnabled.

Чтобы включить механизм блокировки, необходимо в исходном коде страницы редактирования установить значение false для атрибута модели IsModelItemsEnabled:

this.set(“IsModelItemsEnabled”, false);

Или можно установить для атрибута значение по умолчанию:

"IsModelItemsEnabled": {
    dataValueType: Terrasoft.DataValueType.BOOLEAN,
    value: true,
    dependencies: [{
        columns: ["PaymentStatus"],
        methodName: "setCardLockoutStatus"
    }]
}

Также для работы механизма блокировки на конкретной странице редактирования в массиве diff этой страницы необходимо указать генератор DisableControlsGenerator для тех контейнеров, в которых необходимо блокировать поля. Так, для блокировки всех полей страницы редактирования нужно указать глобальный контейнер CardContentWrapper:

diff: /**SCHEMA_DIFF*/[
    {
        "operation": "merge",
        "name": "CardContentWrapper",
        "values": {
            "generator": "DisableControlsGenerator.generatePartial"
        }
    }
]/**SCHEMA_DIFF*/

ВАЖНО

Установка значения "generator": "DisableControlsGenerator.generatePartial" приводит к ошибке открытия страницы редактирования в мастере разделов.

Исключение блокировки

Существует возможность исключить блокировку для некоторых полей и деталей. Сделать это можно при помощи переопределения методов getDisableExclusionsDetailSchemaNames() и getDisableExclusionsColumnTags(). Эти методы возвращают списки полей и деталей, которые не должны быть заблокированы механизмом. Пример реализации методов приведен ниже:

getDisableExclusionsColumnTags: function() {
    return ["SomeField"];
}
getDisableExclusionsDetailSchemaNames: function() {
    return ["SomeDetailV2"]
}

Более сложную логику исключений можно реализовать при помощи переопределения метода isModelItemEnabled() для полей редактирования и метода isDetailEnabled() для деталей. Эти методы вызываются для каждого поля и детали. Они получают на вход имя и возвращают признак доступности поля или детали. Пример реализации методов приведен ниже:

isModelItemEnabled: function(fieldName) {
    var сondition = this.get("SomeConditionAttribute");
    if (fieldName === "ExampleField" || сondition)) {
        return true;
    }
    return this.callParent(arguments);
}

isDetailEnabled: function(detailName) {   
    if (detailName === "ExampleDetail") {
        var exampleDate = this.get("Date");
        var dateNow = new Date(this.Ext.Date.now());
        var condition = this.Ext.Date.isDate(exampleDate) && exampleDate >= dateNow;
        return condition;
    }
    return this.callParent(arguments);
}

© Terrasoft 2002-2019.

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

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