Стоит следующая задача: если в карточке контакта изменилось текущее значение поля [Статус] на 'Reject', задать пользователю вопрос вида: "Вы, действительно, хотите установить 'Reject' статус", если пользователь отвечает да, тогда должен запускаться БП, который изменит статусы других, связанных объектов, если нет, тогда статус должен возвращаться в предыдущее состояние.
Сейчас это реализовано достаточно костыльным способом.
Для поля [Статус] создано dependencies, в котором реализован вызов следующего метода:
var status = this.get("BTContactStatus");
if (this.Ext.isEmpty(status)) {
return;
}
if (status.value === "f7ade63f-213d-4daa-a73d-75684c4bd689") {
var message = "Do you want set 'Reject' status?";
this.showConfirmationDialog(this.Ext.String.format(message, 1), function (result5) {
if (result5 === Terrasoft.MessageBoxButtons.NO.returnCode) {
var entity = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"
});
entity.addColumn("BTContactStatus");
entity.filters.addItem(entity.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "Id", this.get("Id")));
entity.getEntityCollection(function(result) {
if (result.success) {
if(result.collection.getCount() < 1) {
this.set("BTContactStatus", null);
return;
}
this.set("BTContactStatus", result.collection.getByIndex(0).get("BTContactStatus"));
}
}, this);
}
}, ["yes", "no"]);
}
В методе описан сценарий, когда пользователь на вопрос отвечает 'Нет', а если пользователь на вопрос отвечает 'Да', в методе ничего не происходит, но в системе реализован процесс, который запускается по сигналу изменения статуса у контакта на 'Reject'.
По моему мнению, более правильно выполнять проверку изменилось ли значение уже в момент сохранения контакта пользователем и тогда задавать ему вопрос, чтобы не пересохранять запись ещё раз.
Более правильным в данной ситуации мне кажется использование механизма добавления валидации к полю. Если пользователь отвечает на вопрос нет, то не разрешать сохранять запись, но тут возникает вопрос: мне же не нужно возращать никаких сообщений пользователю.
В итоге возник вопрос, каким образом выполнять проверку, что значение поля было изменено, и в какой момент нужно делать откат, то есть вернуть первоначальное значение, которое было установлено до изменения?
И насколько целесообразно в данной задаче использовать валидацию для поля или есть другие способы решения данной задачи?