Вопрос

Запретить к удаление записи на детали

Добрый вечер, коллеги.

Подскажите, как реализовать запрет к удалению записи на детали в зависимости от определенного условия. Подскажите реализацию на клиенте и сервере. Заранее благодарен за помощь. 

Нравится

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

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
        }

 

Литвинко Павел,

Спасибо. Реализовал с помощью вброса ошибки на сервере.

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