Настроить обработку действия для нескольких записей раздела

Средний

Пример. Для реестра раздела Активности (Activities) настроить обработку действия. Действие устанавливает состояние Завершена (Completed) для выбранных активностей.

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

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

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

    • Код (Code) — "ActivitySectionV2".
    • Заголовок (Title) — "Раздел активности" ("Activities section").
    • Родительский объект (Parent object) — выберите "ActivitySectionV2".
  4. Добавьте локализуемую строку с текстом пункта меню, который планируется добавить.

    1. В контекстном меню узла Локализуемые строки (Localizable strings) нажмите кнопку scr_add_button.png.
    2. Заполните свойства локализуемой строки.

      • Код (Code) — "AllDoneCaption".
      • Значение (Value) — "Отметить как "Завершены"" ("Mark as Completed").
    3. Для добавления локализуемой строки нажмите Добавить (Add).
  5. Реализуйте логику работы пункта меню. Для этого в свойстве methods реализуйте методы:

    • isCustomActionEnabled() — определяет доступность добавленного пункта меню.
    • setAllDone() — метод-обработчик действия, который устанавливает состояние Завершена (Completed) для выбранных активностей.
    • getSectionActions() — переопределенный метод родительской схемы, который возвращает коллекцию действий раздела.

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

    ActivitySectionV2
    define("ActivitySectionV2", ["ConfigurationConstants"], function(ConfigurationConstants) {
        return {
            /* Название схемы объекта раздела. */
            entitySchemaName: "Activity",
            /* Методы модели представления раздела. */
            methods: {
                /* Определяет доступность пункта меню. */ 
                isCustomActionEnabled: function() {
                    /* Попытка получить массив идентификаторов выбранных записей. */
                    var selectedRows = this.get("SelectedRows");
                    /* Если массив содержит элементы (выбрана хотя бы одна запись в реестре), то возвращается true, иначе — false. */
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                /* Метод-обработчик действия. Устанавливает для выбранных записей статус [Выполнено]. */
                setAllDone: function() {
                    /* Получает массив идентификаторов выбранных записей. */
                    var selectedRows = this.get("SelectedRows");
                    /* Обработка запускается в случае, если выбрана хотя бы одна запись. */
                    if (selectedRows.length > 0) {
                        /* Создает экземпляр класса пакетных запросов. */
                        var batchQuery = this.Ext.create("Terrasoft.BatchQuery");
                        /* Обновляет каждую из выбранных записей. */
                        selectedRows.forEach(function(selectedRowId) {
                            /* Создает экземпляр класса UpdateQuery с корневой схемой Activity. */
                            var update = this.Ext.create("Terrasoft.UpdateQuery", {
                                rootSchemaName: "Activity"
                            });
                            /* Применяет фильтр для определения записи для обновления. */
                            update.enablePrimaryColumnFilter(selectedRowId);
                            /* Для колонки [Status] устанавливается значение "Завершена" с помощью конфигурационной константы ConfigurationConstants.Activity.Status.Done. */
                            update.setParameterValue("Status", ConfigurationConstants.Activity.Status.Done, this.Terrasoft.DataValueType.GUID);
                            /* Добавляет запрос на обновление записи в пакетный запрос. */
                            batchQuery.add(update);
                        }, this);
                        /* Выполняет пакетный запрос к серверу. */
                        batchQuery.execute(function() {
                            /* Обновляет реестр. */
                            this.reloadGridData();
                        }, this);
                    }
                },
                /* Переопределение базового виртуального метода, который возвращает коллекцию действий раздела. */
                getSectionActions: function() {
                    /* Вызывается родительская реализация метода для получения коллекции проинициализированных действий раздела. */
                    var actionMenuItems = this.callParent(arguments);
                    /* Добавляет линию-разделитель. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    /* Добавляет пункт меню в список действий раздела. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        /* Привязка заголовка пункта меню к локализуемой строке схемы. */
                        "Caption": { bindTo: "Resources.Strings.AllDoneCaption" },
                        /* Привязка метода-обработчика действия. */
                        "Click": { bindTo: "setAllDone" },
                        /* Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled. */
                        "Enabled": { bindTo: "isCustomActionEnabled" },
                        /* Поддержка режима множественного выбора. */
                        "IsEnabledForSelectedAll": true
                    }));
                    /* Возврат дополненной коллекции действий раздела. */
                    return actionMenuItems;
                }
            }
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

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

Чтобы посмотреть результат выполнения примера:

  1. Очистите кэш браузера.
  2. Обновите страницу раздела Активности (Activities).

По умолчанию для реестра используется режим выбора одной записи. Для выбора в реестре нескольких записей в меню кнопки Действия (Actions) нажмите Выбрать несколько записей (Select multiple records). После этого изменяется визуальное представление реестра — появляются элементы для выбора записей.

В результате выполнения примера на страницу активности добавлено действие Отметить как "Завершены" (Mark as Completed).

В результате выбора действия Отметить как "Завершены" (Mark as Completed) для выбранных активностей в колонке Статус (Status) установлено значение Завершена (Completed).

Для отмены режима выбора нескольких записей в меню кнопки Действия (Actions) нажмите Отменить множественный выбор (Cancel multiple selection).

Если в реестре раздела Активности (Activities) не выбрана ни одна запись, то действие Отметить как "Завершены" (Mark as Completed) неактивно.