EntitySchemaQuery использование фильтров на js (javascript)
Добрый день!
Пробую реализовывать запрос к данных через ESQ таким образом:
var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrTbl1"
});
esq.addColumn("Id");
esq.addColumn("UsrPar1");esq.addColumn("UsrInfoId");
esq.addColumn("UsrValueList.Name");//вот с такими строками уже начинается проблема
esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrValueList.Name", "значение1"));//и с такими фильтрами
Если нужно получить значение колонок с таблицы - rootSchemaName, то не вопрос.
Проблемы начинаются, когда пытаюсь использовать прямые ссылки или в одной запросе получать GUID, а во втором его использовать.
GUID видимо со String плохо понимают друг друга. Если ли примеры их нормального совместного использования в рамках ESQ?
Можно ли как-то понять причины неработоспособности прямых ссылок? Или хотя бы понять как с GUID быть? Даже если я значение GUID пытаюсь вставлять так, то не работает:
esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrInfoId", "337ED96B-B658-48B0-BBB6-7FACF918C735"));
Нравится
Eсли нужно получить справочную колонку, то её название нужно указывать без приставки "Id", как в схеме таблицы:
esq.addColumn("UsrInfo")
Аналогично и с фильтрами:
esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrInfo", "337ED96B-B658-48B0-BBB6-7FACF918C735"));
Но обратите внимание, что, если у Вас фильтр построен по обратным связям, то можно писать 2 способами.
1. Через Id и тогда в качестве значения фильтра указываем Id:
var shipment = this.get("BTShipment");
sampleESQ.filters.addItem(sampleESQ.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[BTSampInShipment:BTSampleID].BTShipment.Id", shipment.value));
2. Через справочное поле и тогда в качестве значения указывать значение справочного поля:
var shipment = this.get("BTShipment");
sampleESQ.filters.addItem(sampleESQ.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[BTSampInShipment:BTSampleID].BTShipment", shipment));
А вообще, чтобы понять причину ошибки нужно отладиться на стороне клиента, если запрос уходит в базу данных, то посмотреть в SQL profiler, какой запрос идет в базу и какой результат работы этого запроса.
В js все Guid преобразуйте к нижнему регистру
те в вашем случае напишите что то типа esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrInfoId", "337ed.....
Eсли нужно получить справочную колонку, то её название нужно указывать без приставки "Id", как в схеме таблицы:
esq.addColumn("UsrInfo")
Аналогично и с фильтрами:
esq.filters.addItem(Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "UsrInfo", "337ED96B-B658-48B0-BBB6-7FACF918C735"));
Но обратите внимание, что, если у Вас фильтр построен по обратным связям, то можно писать 2 способами.
1. Через Id и тогда в качестве значения фильтра указываем Id:
var shipment = this.get("BTShipment");
sampleESQ.filters.addItem(sampleESQ.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[BTSampInShipment:BTSampleID].BTShipment.Id", shipment.value));
2. Через справочное поле и тогда в качестве значения указывать значение справочного поля:
var shipment = this.get("BTShipment");
sampleESQ.filters.addItem(sampleESQ.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "[BTSampInShipment:BTSampleID].BTShipment", shipment));
А вообще, чтобы понять причину ошибки нужно отладиться на стороне клиента, если запрос уходит в базу данных, то посмотреть в SQL profiler, какой запрос идет в базу и какой результат работы этого запроса.