Сделал следующие методы для валидации.
Нужно посчитать количество данных по условиям в группе фильтров. Все переменные присваивают правильные значения, кроме activeEverydayConcertCount на этапе чтения выборки. В чем проблема?
maxEverydayActive: function() {
var invalidMessage = "";
var activeEverydayConcertCount = 0;
var maxActiveEverydayConcertCount = 0;
Terrasoft.SysSettings.querySysSettingsItem("UsrMaxEverydayActiveProgram", function(value) {
maxActiveEverydayConcertCount = value;
}, this);
var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrConcertProgram"
});
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountEntities",
Terrasoft.AggregationEvalType.ALL);
var filterGroup = this.Terrasoft.createFilterGroup();
filterGroup.add("concertsIsActive",
this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrIsActive", "1"));
filterGroup.add("performancePeriodEveryday",
this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
"UsrPerformancePeriod", "85A8C133-FF83-4290-9F69-B34EAF627F8C"));
esq.filters.addItem(filterGroup);
esq.getEntity(function(result) {
if (result.success){
activeEverydayConcertCount = result.entity.get("CountEntities"); - здесь не присваивается значение. Должно быть 4. По БД проверил
}
}, this);
if (activeEverydayConcertCount >= maxActiveEverydayConcertCount) {
invalidMessage = this.get("Resources.Strings.MaximumActiveEverydayConcerts");
}
return {
invalidMessage: invalidMessage
};
},
setValidationConfig: function() {
this.callParent(arguments);
this.addColumnValidator("UsrIsActive", this.maxEverydayActive);
this.addColumnValidator("UsrPerformancePeriod", this.maxEverydayActive);
}
Нравится
Paul_lgb,
Добрый день. Все дело в том, что у вас даже не вызывается callback вызова getEntity (если вызывается, то это странно, возможно в вашей версии еще есть такое поведение).
Функция getEntity имеет 3 параметра:
1. primaryColumnValue
2. callback
3. scope
Функция getEntity будет возвращать вам все колонки, относящиеся к этой entity.
Пример:
getEntity("<здесь Id контакта>", function(resullt) {}) //т.е. будет фильтрация по Id контакта
Для получения количества записей, без "фильтрации" нужно использовать функцию getEntityCollection(callback), но она асинхронна, поэтому это нужно учесть.