Использование 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*/
};
});