Вопрос

как написать ESQ запрос

Коллеги подскажите как написать запрос на 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')

а затем результат сравнить с числом?

Нравится

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

Пользователь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 получилось

Пользователь13,

Рада, что смогла помочь)

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