Cделан запрос в базу данных из клиентского модуля для получения системной настройки:
this.Terrasoft.SysSettings.querySysSettingsItem("PsMaximumProgramsCount", function(value) {
countSettings = value;
}, this);
Получены данные из БД отфильтровав их и сравнив с полученным значением из системной настройки ранее, и если значение выпадающего списка periodicity равно "Ежедневно" и количество записей в базе больше чем системной настройке - срабатывает валидация на поле и всплывающее уведомление при попытке сохранения:
message - сообщение для поля валидации;
periodicity - выпадающий список (словарь) в котором есть значение "Ежедневно";
countSettings - ранее полученное значение системной настройки;
concertProgramsCount - количество записей в таблице;
var periodicity = "";
if (this.get("PsPeriodicity")) {
periodicity = this.get("PsPeriodicity").displayValue;
}
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "PsConcertPrograms"
});
esq.addColumn("PsPeriodicity.Name", "PsPeriodicityName");
var esq1Filter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"PsPeriodicity.Name", "Ежедневно");
esq.filters.add("esq1Filter", esq1Filter);
esq.getEntityCollection(function(result) {
var message = "";
if (result.success) {
var concertProgramsCount = result.collection.collection.length;
if (periodicity === "Ежедневно" && concertProgramsCount <= countSettings ) {
message = this.get("Resources.Strings.PsFewFreeConcertHalls").replace("NNN", countSettings);
}
}
return message;
}, this);
Вывод валидации для поля и при сохранении страницы:
concertHallsValidator: function(message) {
var invalidMessage = message;
return {
fullInvalidMessage: invalidMessage,
invalidMessage: invalidMessage
};
}
Проблема в том что по отдельности все работает, но когда вместе - вступает в дело асинхронность и все идет не по очереди, а если использую через callback тогда застреваю на замыкании.
Спасибо всем кто окажет помощь в решении проблемы.