В посте описана не плохая идея как предотвратить переход на стадию не выбрав причину, или какие либо условие https://community.terrasoft.ru/questions/pokazat-dialog-dlya-podtverzhdeniya-statusa-otmena-v-dcm-razdela-keys#comment-83766 , но к сожалению не описано как именно это выполнить в "save" не получив рекурсию вечную. К автору поста и ответившему на него так и не удалось достучаться.

Возможно кто-то знает решение этой задачи, а так же есть идея как бы сделать что бы то что пользователь изменил но не сохранил до нажатия на кнопку перехода на другую стадию.

Нравится

4 комментария

CheckConfirmationMessage управляет проверять - или нет
 

if (confirmationMessage && this.get("CheckConfirmationMessage")) {
		this.set("CheckConfirmationMessage", false);
		var scopeArguments = arguments;
		this.showConfirmationDialog(confirmationMessage.message, function(result) {
				if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
					this.save(scopeArguments);
				} else {
					this.onDiscardChangesClick();
				}
		}, ["Yes", "No"]);
	} else {
    	this.callParent(arguments);
}

 

 

Владимир Соколов,

 

а как быть с такой комбинацией?

attributes: {
	"CheckConfirmationMessage": {
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
		value: true
	}
},
 
methods: {
	eaqRequestReason: function() {
		var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
			rootSchemaName: "KtBadReasonEndRequest"
		});
		esq.addColumn("Id");
		esq.addColumn("Name");
		var requestInServiceFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
			"KtRequestInService", this.get("KtRequestInService").value);
		var stageFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
			"KtRequestStage", this.get("KtStage").value);
		var recordInactiveFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 
				"RecordInactive", false);
		esq.filters.add("requestInServiceFilter", requestInServiceFilter);
		esq.filters.add("stageFilter", stageFilter);
		esq.filters.add("recordInactiveFilter", recordInactiveFilter);
		return esq;
	},
	save: function() {
		var scopeArguments = arguments;
		var esq = this.eaqRequestReason();
		esq.getEntityCollection(function (request) {
			if (request && request.success) {
				var requestLength = request.collection.collection.length;
				if (requestLength > 0 && this.get("CheckConfirmationMessage")) {
					this.set("CheckConfirmationMessage", false);
					this.showConfirmationDialog(resources.localizableStrings.DisqualifyReason, function(result) {
						if (result === Terrasoft.MessageBoxButtons.YES.returnCode) {
							this.save(scopeArguments);
						} else {
							this.onDiscardChangesClick();
						}
					}, ["Yes", "No"]);
				} else {
					this.callParent(scopeArguments);
					this.set("CheckConfirmationMessage", true);
				}
			}
		}, this);
	}
}

 

Тут save вроде как с переданным скоупом передается, но выполниться не может

Александр, что значит, «не может выполниться»? Если в функции отладчик поставить, туда заходит?

Зверев Александр,

Проблема была скорее всего в области видимости, но не стал разбираться дальше. Подумал что так как это условие перехода, можно сказать проверка его обязательности, решил переделать не трогая save а использовать asyncValidate. С его помощью получилось как хотел. Код полный выложу не много позже, так как он совсем пока красивый, а если время будет то наверно сделаю видео с разъяснением почему решил сделать именно так и приложу ссылку, может в комментариях кто предложит как еще оптимизировать

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