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