"Выделить всё" и обработка нескольких записей в разделе
Всем доброго времени суток. Версия 7.12.
Сделали действие в меню, обрабатывающее выбор нескольких записей в разделе, всё по образцу из академии: https://academy.terrasoft.ru/documents/technic-sdk/7-12/obrabotka-vybor…
Проблема в том, что если выделить всё, то в любом случае добавленный пункт оказывается заблокированным ("Групповое действие")
В чём дело? Существует ли решение?
Нравится
Добавь "IsEnabledForSelectedAll": true и верни проверку на доступность, те что хотя бы одна запись была выделена или выбрана. Вот что получилось в итоге:
isCustomActionEnabled: function() { var activeRowId = this.get("ActiveRow"); if (activeRowId) return true; var selectedRows = this.get("SelectedRows") || []; return selectedRows.length > 0; }, getSectionActions: function () { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ Type: "Terrasoft.MenuSeparator", Caption: "" })); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": {bindTo: "Resources.Strings.GetServiceInfoButtonCaption"}, "Click": {bindTo: "onGetServiceInfoClick"}, "Enabled": {bindTo: "isCustomActionEnabled"}, "IsEnabledForSelectedAll": true })); return actionMenuItems; },
Работает и при множественном выделении если хотябы ода запись отмечена или выбрана
Попробуй для проверки что хоть одна запись отмечена использовать isAnySelected
actionMenuItems.addItem(this.getButtonMenuItem({ "Click": {"bindTo": "openShowOnMap"}, "Caption": {"bindTo": "Resources.Strings.ShowOnMapActionCaption"}, "Enabled": {"bindTo": "isAnySelected"} }));
Я вообще убирал какие-либо условия для Enabled, и всё равно блокируется.
Что ещё интересно, блокировка происходит только после того, как я выделю через пукнт "Выбрать всё" в Действиях. Если просто подключу множественный выбор и по одной выберу все записи - то всё ок.
Добавь "IsEnabledForSelectedAll": true и верни проверку на доступность, те что хотя бы одна запись была выделена или выбрана. Вот что получилось в итоге:
isCustomActionEnabled: function() { var activeRowId = this.get("ActiveRow"); if (activeRowId) return true; var selectedRows = this.get("SelectedRows") || []; return selectedRows.length > 0; }, getSectionActions: function () { var actionMenuItems = this.callParent(arguments); actionMenuItems.addItem(this.getButtonMenuItem({ Type: "Terrasoft.MenuSeparator", Caption: "" })); actionMenuItems.addItem(this.getButtonMenuItem({ "Caption": {bindTo: "Resources.Strings.GetServiceInfoButtonCaption"}, "Click": {bindTo: "onGetServiceInfoClick"}, "Enabled": {bindTo: "isCustomActionEnabled"}, "IsEnabledForSelectedAll": true })); return actionMenuItems; },
Работает и при множественном выделении если хотябы ода запись отмечена или выбрана
Денис,
я тоже сталкивалась с аналогичной проблемой.
Заметила для базового действия "Merge records".
Уточнила у службы поддержки не является ли это ошибкой, на что был получен ответ: "Это корректное поведение базового функционала.
Таким образом система предотвращает объединение всех записей и защищает пользователя от совершения ошибки, но если необходимо выделить диапазон записей, то Вы можете воспользоваться клавишей shift.
Нажмите на необходимую запись, она выделится, после этого зажмите shift и нажмите на необходимо границе выборки."
Мое мнение, что это совсем неочевидно (про shift).
Озвучила им, что функционал нужно переделать и пункт меню 'Merge records' должен быть доступен при 'Select all', так как вариант с shift более трудозатратный и требует дополнительных действий со стороны пользователя. Сказали, что информацию передадут соответствующей команде разработки.
В общем выделяйте пока shift и будет Вам счастье
Ну, или же, как вариант, перепишите свое действие.