Проблема фильтрации EntitySchemaQuery createColumnFilterWithParameter

Если не использую фильтр, то все работает, но без фильтрации

Если использую, то null на выходе

В чем может быть причина?

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

        rootSchemaName: "GeneralForm"

    });

    

    esq.addColumn("Id");

    esq.addColumn("UsrCode");

    esq.addColumn("UsrInfoId.Name");

    esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(

    Terrasoft.ComparisonType.EQUAL, "UsrInfoId.Name", "Инфо"));

    

    var rowsCount = 0;

    var rowsCount1 = "";

    esq.getEntityCollection(function(result) {

        if (result.success) {

            

            

            result.collection.each(function (item) {

                rowsCount = rowsCount + 1;

                rowsCount1 += item.get("UsrCode") + "#" + item.get("UsrInfoId.Name") + 

                    "(" + rowsCount + ")" + "\n";

            });

            this.set("UsrCount", rowsCount1);

        }

    }, this);

Нравится

12 комментариев
Лучший ответ

Посмотрите профилировщиком какой sql запрос отправляется в БД, это поможет определить проблему

Посмотрите профилировщиком какой sql запрос отправляется в БД, это поможет определить проблему

Ошибка в том, что Вы неправильно построили связи - нужно писать UsrInfo.Name, а у Вас UsrInfoId.Name.

Вот корректный код:

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

        rootSchemaName: "GeneralForm"

    });

    

    esq.addColumn("Id");

    esq.addColumn("UsrCode");

    esq.addColumn("UsrInfo.Name");

    esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(

    Terrasoft.ComparisonType.EQUAL, "UsrInfo.Name", "Инфо"));

    

    var rowsCount = 0;

    var rowsCount1 = "";

    esq.getEntityCollection(function(result) {

        if (result.success) {

            

            

            result.collection.each(function (item) {

                rowsCount = rowsCount + 1;

                rowsCount1 += item.get("UsrCode") + "#" + item.get("UsrInfo.Name") + 

                    "(" + rowsCount + ")" + "\n";

            });

            this.set("UsrCount", rowsCount1);

        }

    }, this);

Ну, и на будущее смотрите, какая ошибка возвращается в браузере и выполняете отладку клиентского кода, тогда сразу становится понятно, в какой строке кода допущена ошибка.

Алла Савельева,

пытаюсь реализовать запрос:



select 

    q1.UsrCode

    , q2.Name

from 

    GeneralForm q1 

    join UsrInfoList q2 

on 

    q1.UsrInfoId = q2.Id

При моей текущей реализации этот кусок работает:

esq.addColumn("UsrInfoId.Name");

Проблема с фильтром. 

Григорий Чех,

Ок. Разбираюсь с тем как его использовать.

Григорий Чех,

а как корректно этот механизм объявить в коде?

добавил:

//перед esq

var performanceManagerLabel = "";

performanceManager.start(performanceManagerLabel + "_Init");

//сразу после фильтрации

performanceManager.stop(performanceManagerLabel + "_Init");

пишет:

'performanceManager' is not defined

 

Григорий Чех,

Нашел. 

performanceManager указать надо было.

Григорий Чех,

Верно понимаю, что performanceManager.stop по сути служит меткой для того, чтобы в браузере можно было посмотреть состояние системы на этот момент и при необходимости перескочить на следующую метку?

Алла Савельева,

Верно понимаю, что для такого запроса реализация ниже верна?

На практике без фильтра логика выдает правильное число строк, а с фильтром null.

select 

    q1.Id

    q1.UsrCode

    , q2.Name

from 

    GeneralForm q1 

    join UsrInfoList q2 

on 

    q1.UsrInfoId = q2.Id



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

    rootSchemaName: "GeneralForm"

esq.addColumn("Id");

esq.addColumn("UsrCode");

esq.addColumn("UsrInfoId.Name");

esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(

Terrasoft.ComparisonType.EQUAL, "UsrInfoId.Name", "Инфо"));

Посмотрите в профайлере, что за SQL-запрос идёт в базу при выполнении последнего кода и потом запустите в Management Studio  его отдельно, чтобы выяснить, почему у него пустой результат.

Зверев Александр,

система в yазвании таблицы, которую пробую подцепить добавляет в начале и конце названия еще символы

SysUsrInfoListLcz. А нужна таблица была UsrInfoList. Это фича такая?

Хотя нет. Не в ней дело. Тут все хорошо.

SysUsrInfoListLcz — это автоматически сгенерированная таблица переводов названий для UsrInfoList.

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