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

Как полностью заблокировать поля страницы редактирования

Glossary Item Box

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

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

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

ВАЖНО

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

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

На странице редактирования счета необходимо блокировать все поля, если счет находится в состоянии [Оплачен полностью] ([Paid]). Поле [Состояние оплаты] ([Payment status]) и деталь [Активности] ([Activities]) должны оставаться доступными для редактирования.

ВАЖНО

Если для поля существует привязка для свойства enabled в элементе массива diff или в бизнес-правиле BINDPARAMETER, то механизм не будет блокировать такое поле.

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

1. Создать замещающую схему страницы редактирования счета

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

Рис. 1. — Свойства схемы [Страница редактирования счета] ([Invoice edit page])

2. Добавить исходный код схемы

В дизайнере схемы, на панели [Исходный код] необходимо добавить исходный код реализации замещающей схемы [Страница редактирования счета] ([Invoice edit page]). Нужный исходный код приведен ниже:

define("InvoicePageV2", ["InvoiceConfigurationConstants"], function(InvoiceConfigurationConstants) {
    return {
        entitySchemaName: "Invoice",
        attributes: {
            // Статус блокировки полей.
            "IsModelItemsEnabled": {
                dataValueType: Terrasoft.DataValueType.BOOLEAN,
                value: true,
                dependencies: [{
                    columns: ["PaymentStatus"],
                    methodName: "setCardLockoutStatus"
                }]
            }
        },
        methods: {
            getDisableExclusionsColumnTags: function() {
                // Поле [Состояние оплаты] блокироваться не должно.
                return ["PaymentStatus"];
            },
            
            getDisableExclusionsDetailSchemaNames: function() {
                // Также не блокируется деталь "Активности".
                return ["ActivityDetailV2"];
            },
            setCardLockoutStatus: function() {
                // Получить текущий статус счета.
                var state = this.get("PaymentStatus");
                // Если текущий статус счета — "оплачен", то заблокировать поля.
                if (state.value === InvoiceConfigurationConstants.Invoice.PaymentStatus.Paid) {
                    // Установить свойство, которое хранит признак блокировки полей.
                    this.set("IsModelItemsEnabled", false);
                } else {
                    // Иначе — разблокировать поля.
                    this.set("IsModelItemsEnabled", true);
                }
            },
            onEntityInitialized: function() {
                this.callParent(arguments);
                // Установить статус блокировки полей.
                this.setCardLockoutStatus();
            }
        },
        diff: /**SCHEMA_DIFF*/[
            {
                "operation": "merge",
                "name": "CardContentWrapper",
                "values": {
                    "generator": "DisableControlsGenerator.generatePartial"
                }
            }
        ]/**SCHEMA_DIFF*/
    };
});

Здесь определяется атрибут IsModelItemsEnabled и реализуются методы, необходимые для блокирования и исключения блокирования полей страницы редактирования счета. В качестве контейнера механизма блокировки используется контейнер CardContentWrapper страницы редактирования.

После добавления исходного кода созданную схему необходимо сохранить. Затем нужно выполнить очистку кэша страницы в браузере.

В результате выполнения кейса после установки счета в состояние [Оплачен полностью] ([Paid]) большинство полей страницы редактирования счета станут заблокированными (рис. 2). Незаблокированными останутся поля и детали, указанные в исключениях для блокировки. Также незаблокированными останутся поля, для которых явно указано значение true для свойства enabled.

Рис. 2. — Результат выполнения кейса

© Terrasoft 2002-2019.

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

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