Вопрос

Построение фильтра EntitySchemaQuery с присоединением другой схемы

Добрый день, коллеги! Нужно просуммировать значения DurationInMitutes активностей контакта и поместить значение в поле контакта, для этого, как написано в академии, можно присоединить схему, в нашем случае Activity, но почему то вы результат приходит пустой ответ. Я попробовал упростить задачу и просто вывести диалоговой окно с заголовками всех активностей без фильтров, результат тот же, пустые ответы по каждому элементу коллекции (пример кода ниже)... Интересно что при построении пути колонке в виде esq.addColumn("Activity.Title", "ActivityName"); выдает диалоговое окно со значениями undefinedundefinedundefined...., то есть значение каждого элемента коллекции undefined, подскажите в чем может быть проблема?

                var message= "";

                // Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой [Contact].

                var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "Contact"

                });



                esq.addColumn("[Activity:Id:Owner].Title", "ActivityName");                



                esq.getEntityCollection(function (result) {

                    if (!result.success) {

                        // обработка/логирование ошибки, например

                        this.showInformationDialog("Ошибка запроса данных");

                        return;

                    }

                    result.collection.each(function (item) {

                        // Обработка элементов коллекции.

                        message += item.get("ActivityName");

                    });

                    this.showInformationDialog(message);

                }, this);

Нравится

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

Кочев Антон Сергеевич,

1. Вместо [Activity:Id:Owner] требуется писать [Activity:Owner:Id] (или [Activity:Owner]), т.к. на втором месте идет поле дочернего объекта по которому присоединяем, а на третьем поле текущего объекта.

2. У вас нет фильтра

Спасибо за совет! Сделал оба пункта - все равно пустые ответы, при этом если ставить вместо параметра CurrentContactId значение id контакта, то результаты приходят корректно... пробовал указывать тип данных фльтра Terrasoft.DataValueType.GUID, ничего не меняется, в чем может быть проблема?

                var CurrentContactId = this.get('Id');

                var message= "";

                var esq = Ext.create("Terrasoft.EntitySchemaQuery", {

                    rootSchemaName: "Contact"

                });

                esq.addColumn("[Activity:Owner:Id].Title", "ActivityName");

                var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, '[Activity:Owner:Id].Id', CurrentContactId);

                esq.filters.add("esqFirstFilter", esqFirstFilter);

                esq.getEntityCollection(function (result) {

                    if (!result.success) {

                        this.showInformationDialog("Ошибка запроса данных");

                        return;

                    }

                    result.collection.each(function (item) {

                        message += item.get("ActivityName");

                    });

                    this.showInformationDialog(message);

                }, this);

Антон,

Ваш фильтр:

esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, '[Activity:Owner:Id].Id', CurrentContactId);

Сравнивает Id активности и текущий Id сущности (предположительно контакт).

Вы же хотите сделать фильтр по контакту:

esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, 'Id', CurrentContactId);

Еще проще этот запрос бы смотрелся если бы вы использовали в качестве корневой схемы - схему Actvity, а не Contact. Тогда не нужны будут никакие обратные связи.

Дмитрий, спасибо, такую очевидную вещь упустил...), а на счет запроса в карточке активности: просуммированное значение нужно поместить в схему контакта, это проще сделать из схемы контакта

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