Всплывающее окно с выбором условия для перехода на стадию
В посте описана не плохая идея как предотвратить переход на стадию не выбрав причину, или какие либо условие 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. С его помощью получилось как хотел. Код полный выложу не много позже, так как он совсем пока красивый, а если время будет то наверно сделаю видео с разъяснением почему решил сделать именно так и приложу ссылку, может в комментариях кто предложит как еще оптимизировать