Не получается выполнить запрос

Сделал следующие методы для валидации.

Нужно посчитать количество данных по условиям в группе фильтров. Все переменные присваивают правильные значения, кроме 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);

            }

Нравится

2 комментария

Пробовал различные операции без группы фильтров, а с обычными, без условия и тд. Ничего...

 

Paul_lgb,

Добрый день. Все дело в том, что у вас даже не вызывается callback вызова getEntity (если вызывается, то это странно, возможно в вашей версии еще есть такое поведение).

Функция getEntity имеет 3 параметра:

1. primaryColumnValue

2. callback

3. scope

Функция getEntity будет возвращать вам все колонки, относящиеся к этой entity.

Пример:

getEntity("<здесь Id контакта>", function(resullt) {}) //т.е. будет фильтрация по Id контакта

Для получения количества записей, без "фильтрации" нужно использовать функцию getEntityCollection(callback), но она асинхронна, поэтому это нужно учесть.

 

Показать все комментарии