Удалить действие из меню [Действия] страницы редактирования кастомного раздела
В продукте sales enterprice версии 7.8 нужно удалить действие "Подписаться на обновления ленты" из списка действий из стандартного меню [Действия] на странице редактирования кастомного раздела. Как это сделать?
Видимо, нужно перегрузить базовый виртуальный метод getActions, но как именно, еще не понимаю.
Есть ли примеры реализации данного кейса?
Нравится
Вы совершенно правы
Необходимо перегрузить схему страницы редактирования раздела
В ней перегрузить базовый метод 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 помог.