Коллеги подскажите как написать запрос на EntitySchemaQuery
select count (id) from UsrReqVisa
where usrnewrequestid='c153d823-c2a7-4f82-bf44-03bbae3c2a02'
and (usrstatusid='fb78f21e-d815-471a-8709-20f4d4c64a50'
or usrstatusid='e0c83f44-1219-42e5-85b5-010643a54266')
а затем результат сравнить с числом?
Нравится
Пользователь13,
Попробуйте вместо createInFilter использовать метод createColumnInFilterWithParameters. Тогда Ваш второй фильтр будет выглядеть вот так:
var esqSecondFilter = select.createColumnInFilterWithParameters("UsrStatus", ["fb78f21e-d815-471a-8709-20f4d4c64a50", "e0c83f44-1219-42e5-85b5-010643a54266"]);
Также обратите внимание, что оператор сравнения указывать не обязательно, если Вы используете AND.
Поэтому строчку
select.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
можно удалить.
Если Ваш запрос не заработает, посмотрите, есть ли какие-то ошибки в консоли, и попробуйте отладиться на клиенте в браузере, а также посмотреть SQL Profiler какие запросы идут в базу при вызове данной функциональности.
Здравствуйте. Как работать с классом Select описано в данной статье https://academy.terrasoft.ru/documents/technic-sdk/7-14/poluchenie-informacii-iz-bazy-dannyh-klass-select
необходимо воспользоваться без вызова сервиса
начал так но с добавлением фильтров запутался
var select = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrReqVisa"});
select.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountAll");
и далее как привязать фильтры
по работе с фильтрами esq детально описано в данной статье - https://academy.terrasoft.ru/documents/technic-sdk/7-14/klass-entityschemaquery-rabota-s-filtrami
Изучал эту статью, не совсем понятно как в фильтре наложить условие AND и OR , поэтому и прошу похожий пример.
Пользователь13,
В Вашем запросе вместо OR можно и нужно с точки зрения производительности использовать in. Тогда он будет выглядеть следующим образом:
select count (id) from UsrReqVisa where usrnewrequestid='c153d823-c2a7-4f82-bf44-03bbae3c2a02' and usrstatusid in ('fb78f21e-d815-471a-8709-20f4d4c64a50', 'e0c83f44-1219-42e5-85b5-010643a54266')
Таким образом Вам нужно использовать методы createColumnFilterWithParameter (для первого фильтра) и createInFilter (для второго фильтра).
По логическим операциям в статье, ссылку на которую привел Вам выше Алексей, написано:
По умолчанию все фильтры, добавляемые в коллекцию filters, объединяются между собой логической операцией AND. Свойство logicalOperation коллекции filters позволяет пользователю указать логическую операцию, которой необходимо объединять фильтры. Свойство принимает значения из перечисления Terrasoft.core.enums.LogicalOperatorType: AND — И OR — Или
Таким образом, если требуется использовать логический оператор OR, перед тем, как прописывать фильтры, нужно присвоить значение соответствующей константы свойству logicalOperation. Например:
esq.filters.logicalOperation = this.Terrasoft.LogicalOperatorType.OR;
Алла спасибо за совет, написал вот так но что то не работает
var select = this.Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "UsrReqVisa"});
select.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "CountAll");
var esqFirstFilter = select.createColumnFilterWithParameter(
this.Terrasoft.ComparisonType.EQUAL, "UsrNewRequest",UsrNewRequest);
var esqSecondFilter = select.createInFilter("UsrStatus","fb78f21e-d815-471a-8709-20f4d4c64a50",
"e0c83f44-1219-42e5-85b5-010643a54266");
select.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
select.filters.add("esqFirstFilter", esqFirstFilter);
select.filters.add("esqSecondFilter", esqSecondFilter);
Пользователь13,
Попробуйте вместо createInFilter использовать метод createColumnInFilterWithParameters. Тогда Ваш второй фильтр будет выглядеть вот так:
var esqSecondFilter = select.createColumnInFilterWithParameters("UsrStatus", ["fb78f21e-d815-471a-8709-20f4d4c64a50", "e0c83f44-1219-42e5-85b5-010643a54266"]);
Также обратите внимание, что оператор сравнения указывать не обязательно, если Вы используете AND.
Поэтому строчку
select.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
можно удалить.
Если Ваш запрос не заработает, посмотрите, есть ли какие-то ошибки в консоли, и попробуйте отладиться на клиенте в браузере, а также посмотреть SQL Profiler какие запросы идут в базу при вызове данной функциональности.
Спасибо, после замены на createColumnInFilterWithParameters получилось