Вопрос

Проблема с валидацией

Доброе утро, коллеги.

У меня возникла такая проблема. Мне на детали с редактируемым реестром нужно сделать запрет на сохранение при определенном условии. Но чтобы получить это условие необходимо делать esq запрос. Он не успевает выполниться, поэтому метод save срабатывает. Валидацию я пытаюсь сделать с помощью условия в методе save. Вызываю базовую реализацию только тогда, когда условие true. В ином случае пользователь получает сообщение. Подскажите, как поступать в такой ситуации. Можна реализовать на сервере, но как тогда вывести окошко с информацией. Буду очень признателен за помощь, поскольку данный кейс не первый раз вызывает проблемы. Желательно чтобы способ был универсален, без привязки к типу детали.

Нравится

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

Сделай все проще перехвати событие сохранение или добавление и вызови свой esq в него передай как callbak  callParent и если валидация успешная вызывай callParent сохранения

Нужно перекрыть метод asyncValidate, пример ниже 

asyncValidate: function(callback, scope) {
	this.callParent([function(response) {
		if (!this.validateResponse(response)) {
			return;
		}
		Terrasoft.chain(
			function(next) {
				this.validateAccountOrContactFilling(function(response) {
					if (this.validateResponse(response)) {
						next();
					}
			}, this);
		},
		function(next) {
			callback.call(scope, response);
				next();
		}, this);
		}, this]);
},
 
validateAccountOrContactFilling: function(callback, scope) {
		var account = this.get("Account");
		var contact = this.get("Contact");
		var result = {
			success: true
		};
		if (this.Ext.isEmpty(account) && this.Ext.isEmpty(contact)) {
			result.message = this.get("Resources.Strings.RequiredContactOrAccountMessage");
				result.success = false;
		}
		callback.call(scope || this, result);
}

 

Григорий Чех,

А если условие валидации не такое простое, а там  esq запрос, как мне реализовать данный пример

Сделай все проще перехвати событие сохранение или добавление и вызови свой esq в него передай как callbak  callParent и если валидация успешная вызывай callParent сохранения

Григорий Чех,

Событие сохранения, вы имеете ввиду onSaved?

Это зависит от типа детали Для детали с реестром addRecord

Григорий Чех,

А где это можно посмотреть, чтобы знать на будущее?

Смотреть от кого наследуешь деталь (базового предка) или дальше вверх по иерархии и там смотришь как выполняется сохранение. Можно заглянуть в документацию на академии там далеко не все хоть она и активно дорабатывается

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