Вопрос

"Выделить всё" и обработка нескольких записей в разделе

Всем доброго времени суток. Версия 7.12.

Сделали действие в меню, обрабатывающее выбор нескольких записей в разделе, всё по образцу из академии: https://academy.terrasoft.ru/documents/technic-sdk/7-12/obrabotka-vybor…

Проблема в том, что если выделить всё, то в любом случае добавленный пункт оказывается заблокированным ("Групповое действие")

Изображение удалено.

В чём дело? Существует ли решение?

Нравится

4 комментария
Лучший ответ

Добавь "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 и будет Вам счастье wink

Ну, или же, как вариант, перепишите свое действие.

 

Показать все комментарии