Настроить исключения блокировки полей на странице записи

Средний

Пример. Настроить блокировку полей на странице счета. Поля заблокированы для полностью оплаченного счета (т. е. в поле Состояние оплаты (Payment status) выбрано значение "Оплачен полностью" ("Paid")). Не блокируются поля Состояние оплаты (Payment status) и деталь Активности (Activities).

Создать схему замещающей модели представления страницы счета 

  1. Перейдите в раздел Конфигурация (Configuration) и выберите пользовательский пакет, в который будет добавлена схема.
  2. На панели инструментов реестра раздела нажмите Добавить —> Замещающая модель представления (Add —> Replacing view model).

  3. Заполните свойства схемы.

    • Код (Code) — "InvoicePageV2".
    • Заголовок (Title) — "Страница редактирования счета" ("Invoice edit page").
    • Родительский объект (Parent object) — выберите "InvoicePageV2".
  4. В объявлении класса модели представления в качестве зависимостей добавьте модуль InvoiceConfigurationConstants.
  5. Реализуйте исключения и условия блокировки полей.

    1. В свойство attributes добавьте атрибут IsModelItemsEnabled, который включает механизм блокировки полей.
    2. В свойстве methods реализуйте методы:

      • getDisableExclusionsColumnTags() — исключает блокировку колонки.
      • getDisableExclusionsDetailSchemaNames() — исключает блокировку детали.
      • setCardLockoutStatus() — настраивает условия блокировки полей.
      • onEntityInitialized() — переопределяет базовый виртуальный метод. Срабатывает после выполнения инициализации схемы объекта страницы записи.
    3. В массив модификаций diff добавьте конфигурационный объект с настройками контейнера CardContentWrapper, в котором планируется блокировать поля.

    Исходный код схемы замещающей модели представления страницы счета представлен ниже.

    InvoicePageV2
    /* В качестве зависимостей укажите модуль InvoiceConfigurationConstants. */
    define("InvoicePageV2", ["InvoiceConfigurationConstants"], function(InvoiceConfigurationConstants) {
        return {
            /* Название схемы объекта страницы записи. */
            entitySchemaName: "Invoice",
            /* Атрибуты модели представления. */
            attributes: {
                "IsModelItemsEnabled": {
                    /* Тип данных колонки модели представления. */
                    dataValueType: Terrasoft.DataValueType.BOOLEAN,
                    value: true,
                    /* Массив конфигурационных объектов, которые определяют зависимости атрибута [IsModelItemsEnabled]. */
                    dependencies: [{
                        /* Значение колонки [IsModelItemsEnabled] зависит от значения колонки [PaymentStatus]. */
                        columns: ["PaymentStatus"],
                        /* Метод-обработчик. */
                        methodName: "setCardLockoutStatus"
                    }]
                }
            },
            /* Методы модели представления страницы записи. */
            methods: {
                /* Исключение блокировки колонки [PaymentStatus]. */
                getDisableExclusionsColumnTags: function() {
                    return ["PaymentStatus"];
                },
                /* Исключение блокировки детали [ActivityDetailV2]. */
                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);
                    }
                },
                /* Переопределение базового метода Terrasoft.BasePageV2.onEntityInitialized(). */
                onEntityInitialized: function() {
                    /* Вызывается родительская реализация метода. */
                    this.callParent(arguments);
                    this.setCardLockoutStatus();
                }
            },
            details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
            /* Отображение контейнера блокировки на странице записи. */
            diff: /**SCHEMA_DIFF*/[
                {
                    /* Выполняется операция изменения существующего элемента. */
                    "operation": "merge",
                    /* Мета-имя родительского контейнера, в котором блокируются поля. */
                    "name": "CardContentWrapper",
                    /* Свойства, передаваемые в конструктор элемента. */
                    "values": {
                        /* Генератор представления элемента управления. */
                        "generator": "DisableControlsGenerator.generatePartial"
                    }
                }
            ]/**SCHEMA_DIFF*/
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

Результат выполнения примера 

Чтобы посмотреть результат выполнения примера, обновите страницу раздела Счета (Invoices).

В результате выполнения примера на странице счета, у которого в поле Состояние оплаты (Payment status) выбрано значение "Оплачен полностью" ("Paid")), заблокировано большинство полей. Незаблокированными остаются:

  • Поле Состояние оплаты (Payment status).
  • Деталь Активности (Activities).
  • Поля, для которых в свойстве enabled массива модификаций diff указано значение true.