Удалить действие из меню [Действия] страницы редактирования кастомного раздела

В продукте sales enterprice версии 7.8 нужно удалить действие "Подписаться на обновления ленты" из списка действий из стандартного меню [Действия] на странице редактирования кастомного раздела. Как это сделать?
Видимо, нужно перегрузить базовый виртуальный метод getActions, но как именно, еще не понимаю.
Есть ли примеры реализации данного кейса?

Нравится

6 комментариев

Вы совершенно правы
Необходимо перегрузить схему страницы редактирования раздела
В ней перегрузить базовый метод getActions
в нев вызвать родительскую реализацию и получить ссылку на коллекцию действий
из коллекции удалить необходимый элемент при помощи метода removeItem
Подробнее https://academy.terrasoft.ru/jscoresdk/#!/api/Terrasoft.controls.Menu-m…

ПРимер как добавить действие есть в руководстве разработчика
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dobavlenie-deyst…
делайте по аналогии
Примерно реализуется так:

methods: {
			// Перегрузка базового виртуального метода, возвращающего коллекцию действий страницы редактирования.
			getActions: function() {
				// Вызывается родительская реализация метода для получения
				// коллекции проинициализированных действий базовой страницы.
				var actionMenuItems = this.callParent(arguments);
				//Посмотреть на коллекцию в консоли
				window.console.log(actionMenuItems);
				// Для удаления элемента коллекции можно использовать removeItem
				return actionMenuItems;
			}...

Роман, спасибо, уже стало понятнее, но после реализации данного способа страница раздела перестала открываться. Что может быть не так в коде, возможно, поможете:

methods: {
getActions: function() {
var actionMenuItems = this.callParent(arguments);
window.console.log(actionMenuItems);
actionMenuItems.removeItem(this.getButtonMenuItem({
"Visible": {
"bindTo": "IsSubscribed",
"bindConfig": {"converter": "getSubscribeButtonVisible"}
},
"Caption": {"bindTo": "Resources.Strings.SubscribeCaption"},
"Enabled": {"bindTo": "canEntityBeOperated"},
"Tag": "subscribeUser"
}));
actionMenuItems.removeItem(this.getButtonMenuItem({
"Visible": {"bindTo": "IsSubscribed"},
"Caption": {"bindTo": "Resources.Strings.UnsubscribeCaption"},
"Enabled": {"bindTo": "canEntityBeOperated"},
"Tag": "unsubscribeUser"
}));
return actionMenuItems;
}
},

"Симута Роман Русланович" написал:ПРимер как добавить действие есть в руководстве разработчика
https://academy.terrasoft.ru/documents/technic-sdk/7-8/dobavlenie-deystv...
делайте по аналогии
Примерно реализуется так:

Роман, спасибо, уже стало понятнее, но после реализации данного способа страница раздела перестала открываться. Что может быть не так в коде, возможно, поможете:

methods: {
getActions: function() {
var actionMenuItems = this.callParent(arguments);
window.console.log(actionMenuItems);
actionMenuItems.removeItem(this.getButtonMenuItem({
"Visible": {
"bindTo": "IsSubscribed",
"bindConfig": {"converter": "getSubscribeButtonVisible"}
},
"Caption": {"bindTo": "Resources.Strings.SubscribeCaption"},
"Enabled": {"bindTo": "canEntityBeOperated"},
"Tag": "subscribeUser"
}));
actionMenuItems.removeItem(this.getButtonMenuItem({
"Visible": {"bindTo": "IsSubscribed"},
"Caption": {"bindTo": "Resources.Strings.UnsubscribeCaption"},
"Enabled": {"bindTo": "canEntityBeOperated"},
"Tag": "unsubscribeUser"
}));
return actionMenuItems;
}
}

removeItem - undefined
this.getButtonMenuItem возвращает новый объект "Terrasoft.BaseViewModel", так что сравнивать его с
существующим некорректно

Ваш кейс реализуется так:

			getActions: function() {
				var actionMenuItems = this.callParent(arguments);
				var delIndex = -1;
				actionMenuItems.each(function(item, index) {
					if (item.values.Caption.bindTo === "Resources.Strings.SubscribeCaption") {
						delIndex = index;
					}
				}, this);
				if (delIndex > -1) {
					actionMenuItems.removeByIndex(delIndex);
				}
				return actionMenuItems;
			}

Обязательно обновите страницу с удалением кеша. Возможно нужно перезайти в приложение.

Хотя, возможно нужно не удалять из коллекции, а использовать setVisible( visible ) https://academy.terrasoft.ru/jscoresdk/#!/api/Terrasoft.controls.BaseMe…

Спасибо. Вариант с removeByIndex помог.

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