Добрый вечер, коллеги.
Подскажите, как реализовать запрет к удалению записи на детали в зависимости от определенного условия. Подскажите реализацию на клиенте и сервере. Заранее благодарен за помощь.
Нравится
Henkal Vadym,
О какой именно кнопке речь?
Если я правильно думаю о чем вы спросили, то вот:
На схему страницы детали добавьте то, что хотите скрыть
diff: /**SCHEMA_DIFF*/[ { "operation": "remove", "name": "ToolsButton" }, { "operation": "remove", "name": "CardDetail" }, { "operation": "remove", "name": "AddRecordButton" }, { "operation": "remove", "name": "ViewButton" } ]/**SCHEMA_DIFF*/, methods: { getAddRecordButtonVisible: function() { return false; }, getAddTypedRecordButtonVisible: function() { return false; }, addRecordOperationsMenuItems: Terrasoft.emptyFn }
Все можно сделать на клиенте
1)Заместите вашу деталь
2) для кнопки добавления переопределите свойство доступность для ваших условий
А может есть метод по аналогии save, где можно в зависимости от условия не вызывать родительскую реализацию?
Можно делать с зацепом на права доступа, можно просто делать доступной/не доступной саму кнопку удалить, можно обрабатывать нажатие кнопки и выдавать исключение, вариантов много, все зависит от того, какой вариант вам нужен
Пример кода (здесь в зависимости от наличия записей на деталей, отображается либо не отображается кнопка)
attributes: { "EnabledRecommendation": { "dataValueType": this.Terrasoft.DataValueType.BOOLEAN, "value": true } }, methods: { addRecordOperationsMenuItems: function(toolsButtonMenu) { this.callParent(arguments); var data = this.getCalcRecom(); if (data) { toolsButtonMenu.addItem(data); } }, getCalcRecom: function() { return this.getButtonMenuItem({ Caption: "Рассчитать рекомендации", Enabled: {bindTo: "EnabledRecommendation"} }); }, fireDetailChanged: function() { this.callParent(arguments); this.enableRecommendation(); }, enableRecommendation: function() { var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {rootSchemaName: "OrderProduct"}); esq.addColumn("Id"); esq.addColumn("Product"); esq.filters.addItem(esq.createColumnFilterWithParameter( Terrasoft.ComparisonType.EQUAL, "Order.Id", this.get("MasterRecordId"))); esq.getEntityCollection(function(result) { this.set("EnabledRecommendation", result.collection.getCount() > 0); console.log(result.collection.getCount()); }, this);
Литвинко Павел,
Cпасибо за помощь. Но как быть в случае детали с редактируемым реестром. Ведь там есть еще одна кнопка?
Henkal Vadym,
О какой именно кнопке речь?
Если я правильно думаю о чем вы спросили, то вот:
На схему страницы детали добавьте то, что хотите скрыть
diff: /**SCHEMA_DIFF*/[ { "operation": "remove", "name": "ToolsButton" }, { "operation": "remove", "name": "CardDetail" }, { "operation": "remove", "name": "AddRecordButton" }, { "operation": "remove", "name": "ViewButton" } ]/**SCHEMA_DIFF*/, methods: { getAddRecordButtonVisible: function() { return false; }, getAddTypedRecordButtonVisible: function() { return false; }, addRecordOperationsMenuItems: Terrasoft.emptyFn }
Литвинко Павел,
Спасибо. Реализовал с помощью вброса ошибки на сервере.