Проблема фильтрации 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);
Нравится
Посмотрите профилировщиком какой 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.