Использование EntitySchemaQuery для построения запросов к базе данных в коде страницы
Коллеги, прошу Вашей помощи!
Есть задача: При отработки определенного типа активности и переводе её в состояние "Завершена", должна происходить проверка, добавлен ли в файлы и ссылки этой активности хотя бы один документ. Если добавлен, то сохранять активность, если нет - то выводить предупреждающее сообщение.
Я попробовал в конфигурации страницы активности ActivityPageV2 переопределить метод save() и прописать там проверку на вложенный документ таким образом:
save: function() {
var activityStatus = (this.get("Status").value).toString();
var activityTitle = (this.get("Title")).toString();
if (activityTitle === "Активность для Управления оценки рисков")
{
if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") {
var activityId = this.get("Id");
var checkInfo = false;
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "ActivityFile"
});
esq.addColumn("Name","actName");
var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId);
esq.filters.add("esqFirstFilter", esqFirstFilter);
esq.getEntityCollection(function(result) {
if (result.success) {
checkInfo = true;
}
}, this);
if (checkInfo) {
this.callParent(arguments); //если документ есть сохраняем страницу
} else {
this.showInformationDialog(Ошибка. Не добавлен документ в файлы и ссылки!); //если документа нет - выводим сообщение
}
}
else {
this.callParent(arguments);
}
}
else
{
this.callParent(arguments);
}
}
После долгих проверок выяснилось, что параметр checkInfo не передает измененное значение с false на true внутри esq.getEntityCollection(function(result) {},this) и остается в значении false, хотя проверка в ActivityFile отрабатывает корректно.
Вопрос: как передать измененное значение checkInfo из esq.getEntityCollection обратно на страницу, чтобы далее можно было прописывать различные условия проверки? Или может я вообще не правильно осуществляю проверку вложенного документа и есть другие способы?
Нравится
Вот один из примеров, как это можно реализовать:
define("ActivityPageV2", [], function() { return { entitySchemaName: "Activity", attributes:{ "isSecond": { "dataValueType": Terrasoft.DataValueType.BOOLEAN, "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "value": false } }, methods: { save: function() { if(this.get("isSecond")){ this.callParent(arguments); this.set("isSecond", false); }else{ var activityStatus = (this.get("Status").value).toString(); var activityTitle = (this.get("Title")).toString(); if (activityTitle === "Активность для Управления оценки рисков") { if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") { var activityId = this.get("Id"); var checkInfo = false; var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ActivityFile" }); esq.addColumn("Name","actName"); var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId); esq.filters.add("esqFirstFilter", esqFirstFilter); esq.getEntityCollection(function(result) { if (result.success && result.collection.collection.length > 0) { this.set("isSecond", true); this.save();//если документ есть сохраняем страницу } else { this.showInformationDialog("Ошибка. Не добавлен документ в файлы и ссылки!"); //если документа нет - выводим сообщение } }, this); } else { this.callParent(arguments); } } else { this.callParent(arguments); } } }, test: function(){ } }, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/ }; });
Вот один из примеров, как это можно реализовать:
define("ActivityPageV2", [], function() { return { entitySchemaName: "Activity", attributes:{ "isSecond": { "dataValueType": Terrasoft.DataValueType.BOOLEAN, "type": Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN, "value": false } }, methods: { save: function() { if(this.get("isSecond")){ this.callParent(arguments); this.set("isSecond", false); }else{ var activityStatus = (this.get("Status").value).toString(); var activityTitle = (this.get("Title")).toString(); if (activityTitle === "Активность для Управления оценки рисков") { if (activityStatus === "4bdbb88f-58e6-df11-971b-001d60e938c6") { var activityId = this.get("Id"); var checkInfo = false; var esq = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "ActivityFile" }); esq.addColumn("Name","actName"); var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Activity", activityId); esq.filters.add("esqFirstFilter", esqFirstFilter); esq.getEntityCollection(function(result) { if (result.success && result.collection.collection.length > 0) { this.set("isSecond", true); this.save();//если документ есть сохраняем страницу } else { this.showInformationDialog("Ошибка. Не добавлен документ в файлы и ссылки!"); //если документа нет - выводим сообщение } }, this); } else { this.callParent(arguments); } } else { this.callParent(arguments); } } }, test: function(){ } }, diff: /**SCHEMA_DIFF*/[ ]/**SCHEMA_DIFF*/ }; });