Как добавить действие раздела: обработка выбора нескольких записей
Glossary Item Box
Режим выбора нескольких записей
По умолчанию для реестра используется режим выбора одной записи. Для того чтобы одновременно выделить в реестре несколько активных записей, необходимо в меню [Действия] раздела выполнить пункт [Выбрать несколько записей]. После этого изменяется визуальное представление реестра — появляются элементы для выбора записей. Отмена режима выбора нескольких записей выполняется также через меню [Действия ] пунктом [Отменить множественный выбор].
Описание кейса
Для раздела [Заказы] реализовать действие, которое в информационном окне будет отображать контрагентов нескольких выбранных в реестре заказов.
К СВЕДЕНИЮ Значение первичных колонок выбранных записей хранится в свойстве SelectedRows модели представления раздела. Эти значения могут быть использованы для получения значений других полей выбранных объектов, например, из коллекции данных списочного реестра, которая хранится в свойстве GridData модели представления реестра. |
Алгоритм реализации кейса
1. В пользовательском пакете создать замещающую страницу раздела [Заказы]
Необходимо создать замещающий клиентский модуль, в котором в качестве родительского объекта указать схему OrderSectionV2 (рис. 1). Процесс создания замещающей страницы описан в статье "Создание клиентской схемы".
Рис. 1. — Свойства замещающей страницы раздела [Заказы]
2. В коллекцию локализуемых строк замещающей схемы раздела добавить строку с заголовком пункта меню [Действия]
Для этого, щелкнув правой кнопкой по узлу структуры [LocalizableStrings], выбрать [Добавить] (рис. 2).
Рис. 2 — Добавление в схему локализируемой строки
Для созданной строки заполнить следующие свойства (рис. 3):
Рис. 3. — Свойства пользовательской локализованной строки
- [Название] — "AccountSectionAction";
- [Заголовок] — "AccountSectionAction";
- [Значение] — "Отобразить контрагентов по выбранным заказам".
3. В коллекцию методов модели представления раздела добавить реализацию методов
- isCustomActionEnabled() — определяет доступность добавленного пункта меню;
- ShowOrdersInfo() — метод-обработчик действия, который отображает в информационном окне список контрагентов выбранных заказов;
- getSectionActions() — переопределенный метод родительской схемы, возвращающий коллекцию действий раздела.
Для этого на вкладку исходного кода схемы нужно добавить следующее:
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"} })); return actionMenuItems; } } }; });
4. Сохранить созданную замещающую схему
После сохранения схемы и обновления веб-страницы системы в разделе [Заказы] появится новое действие, которое будет активно при выборе заказов в режиме выбора нескольких записей реестра (рис. 4).
Рис. 4. — Результат выполнения кейса