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

Средний

Пример реализован для продуктов линейки Sales Creatio.

Пример. Для записей реестра раздела Заказы (Orders) добавить действие, которое в информационном окне отображает перечень контрагентов выбранных заказов.

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

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

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

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

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

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

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

    Значение первичных колонок выбранных записей хранится в свойстве SelectedRows модели представления раздела. Эти значения могут использоваться для получения значений, загруженных в реестр полей выбранных объектов, например, из коллекции данных списочного реестра, которая хранится в свойстве GridData модели представления реестра.

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

    OrderSectionV2
    define("OrderSectionV2", ["OrderConfigurationConstants"], function(OrderConfigurationConstants) {
        return {
            /* Название схемы объекта раздела. */
            entitySchemaName: "Order",
            /* Методы модели представления раздела. */
            methods: {
                /* Определяет доступность пункта меню. */ 
                isCustomActionEnabled: function() {
                    /* Попытка получить массив идентификаторов выбранных записей. */
                    var selectedRows = this.get("SelectedRows");
                    /* Если массив содержит элементы (выбрана хотя бы одна запись в реестре), то возвращается true, иначе — false. */
                    return selectedRows ? (selectedRows.length > 0) : false;
                },
                /* Метод-обработчик действия. Отображает в информационном окне перечень контрагентов. */
                showOrdersInfo: function() {
                    /* Получает массив идентификаторов выбранных записей. */
                    var selectedRows = this.get("SelectedRows");
                    /* Получает коллекцию данных записей реестра. */
                    var gridData = this.get("GridData");
                    /* Переменная для хранения модели объекта выбранного заказа. */ 
                    var selectedOrder = null;
                    /* Переменная для хранения названия контрагента выбранного заказа. */
                    var selectedOrderAccount = "";
                    /* Переменная для формирования текста информационного окна. */
                    var infoText = "";
                    /* Обработка массива идентификаторов выбранных записей реестра. */
                    selectedRows.forEach(function(selectedRowId) {
                        /* Получает модель объекта выбранного заказа. */
                        selectedOrder = gridData.get(selectedRowId);
                        /* Получает название контрагента выбранного заказа. Колонка должна быть добавлена в реестр. */
                        selectedOrderAccount = selectedOrder.get("Account").displayValue;
                        /* Добавляет название контрагента в текст информационного окна. */
                        infoText += "\n" + selectedOrderAccount;
                    });
                    /* Отображает информационное окно. */
                    this.showInformationDialog(infoText);
                },
                /* Переопределение базового виртуального метода, который возвращает коллекцию действий раздела. */
                getSectionActions: function() {
                    /* Вызывается родительская реализация метода для получения коллекции проинициализированных действий раздела. */ 
                    var actionMenuItems = this.callParent(arguments);
                    /* Добавляет линию-разделитель. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        Type: "Terrasoft.MenuSeparator",
                        Caption: ""
                    }));
                    /* Добавляет пункт меню в список действий раздела. */
                    actionMenuItems.addItem(this.getButtonMenuItem({
                        /* Привязка заголовка пункта меню к локализуемой строке схемы. */
                        "Caption": {bindTo: "Resources.Strings.AccountsSectionAction"},
                        /* Привязка метода-обработчика действия. */
                        "Click": {bindTo: "showOrdersInfo"},
                        /* Привязка свойства доступности пункта меню к значению, которое возвращает метод isCustomActionEnabled. */
                        "Enabled": {bindTo: "isCustomActionEnabled"},
                        /* Поддержка режима множественного выбора. */
                        "IsEnabledForSelectedAll": true 
                    }));
                    /* Возврат дополненной коллекции действий раздела. */
                    return actionMenuItems;
                }
            }
        };
    });
    
  6. На панели инструментов дизайнера нажмите Сохранить (Save).

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

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

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

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

В результате выполнения примера на страницу заказа добавлено действие Отобразить контрагентов по выбранным заказам (Accounts for the selected orders).

В результате выбора действия Отобразить контрагентов по выбранным заказам (Accounts for the selected orders), в информационном окне отображается перечень контрагентов выбранных заказов.

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

Если в реестре раздела Заказы (Orders) не выбрана ни одна запись, то действие Отобразить контрагентов по выбранным заказам (Accounts for the selected orders) неактивно.