Просьба помочь собрать такой запрос при помощи класса select

select count(ID)

   from [dbo].[Case] AS TI

WHERE DATEPART(HOUR, DATEADD(hh, 6, TI.[UsrDueDate])) >=9  and DATEPART(HOUR, DATEADD(hh, 6, TI.[UsrDueDate])) <12

and FORMAT(DATEADD(hh, 6, TI.[UsrDueDate]), N'yyyy.MM.dd') = FORMAT(cast(GETDATE() +1 as date), N'yyyy.MM.dd')

Заранее спасибооо! 

Нравится

2 комментария

Добрый день, Адилет.

 

Вы можете настроить SQL-представление (view) с нужным условием.

 

А потом из этого представления уже делать выборку с помощью класса select.

 

Или же попробовать сделать по аналогии с примерами запросов по этой ссылке.

Alla Savelieva,

Благодарю, будем пробовать.

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

Здравствуйте, возможно ли добавить сразу несколько продуктов запросом в Postman. Запрос:

/0/odata/OpportunityProductInterest

json

{

    "OpportunityId": "id",

    "ProductId": "id"

}

 

Нравится

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

Добрый день.

Для этого можно воспользоваться batch-запросом. Примеры batch-запросов есть в статье на академии: https://academy.terrasoft.ru/docs/7-17/developer/integrations_and_api/d…

Добрый день.

Для этого можно воспользоваться batch-запросом. Примеры batch-запросов есть в статье на академии: https://academy.terrasoft.ru/docs/7-17/developer/integrations_and_api/d…

n.isaev,

Спасибо разобрался с batch запросом все заработало. Для тех кому может понадобиться добавлю код добавления в продажу 2 продуктов: 

POST      0/odata/$batch

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

Добрый день, всем. Очень долго выполняются запросы связанные с UpdateQuery, SelectQuery, InsertQuery. Кто-нибудь сталкивался с этим? Какие пути использовали, для нахождения проблемы?

Нравится

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

Для анализа запросов есть профайлер в mssql. Запускаете профайлере, делаете запрос из клиентской части. Смотрите какой sql для select получается в профайлере.

Еще может быть, что у вас тормозит обмен по websocket. Надо посмотреть в консоль разработчика в браузере, нет ли там ошибки с подключение к websocket.

И еще creatio требовательна к ресурсам, если вам кажется что все работает медленно, то стоит проанализировать производительность ваших серверов.

Для анализа запросов есть профайлер в mssql. Запускаете профайлере, делаете запрос из клиентской части. Смотрите какой sql для select получается в профайлере.

Еще может быть, что у вас тормозит обмен по websocket. Надо посмотреть в консоль разработчика в браузере, нет ли там ошибки с подключение к websocket.

И еще creatio требовательна к ресурсам, если вам кажется что все работает медленно, то стоит проанализировать производительность ваших серверов.

В profiler смотрел, запросы выполняются за доли миллисекунд.

Websocket работает отлично.

Запросы выполняются долго в момент переключения состояния Обращения, вот что заметил. Пока не отлаживал сам процесс перехода состояний, но может уже кто-то сталкивался с этим.

Саид Иманмагомедов,

При работе системы идет множество сложных запросов, если нет каких-то явных проблем с работой системы, значит надо наращивать мощности сервера под бд.

Вероятно, что в системе есть бизнес процесс, который срабатывает по сигналу и работает не в фоновом режиме, выполнение которого и приводит к длительному выполнению запросов InsertQuery и UpdateQuery.

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

Добрый день,  коллеги. Помогите пожалуйста сделать ESQ запрос с фильтрацией. Вывести 

TOP1 номер который соответсвует критерию. 

Читал статьи так и не понял.  Данный запрос в разделе контакты.

Select T1."Number" From  "ContactCommunication" T1

LEFT JOIN "Contact" T2 ON T1.Contact=T2.Id

Where T1.CommunicationType='3DDDB3CC-53EE-49C4-A71F-E9E257F59E49'

 

onEntityInitialized: function() {

        this.callParent(arguments);

        this.helping();

    },

    helping: function() {

     // Получаем [Id] объекта карточки.

      // Получаем [Id] объекта карточки.

var recordId = this.get("Id");

// Создаем экземпляр класса Terrasoft.EntitySchemaQuery с корневой схемой [Contact].

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

    rootSchemaName: "Contact"

});

esq.addColumn("[ContactCommunication:Contact:Id].Number", "Number");

esq.addColumn("[ContactCommunication:Contact:Id].CommunicationType", "CommunicationType");

var esqFirstFilter= esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "CommunicationType", "3DDDB3CC-53EE-49C4-A71F-E9E257F59E49");

// Добавление созданных фильтров в коллекцию запроса. 

esq.filters.add("esqFirstFilter", esqFirstFilter);

// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам.

esq.getEntityCollection(function (result) {

    if (result.success) {

      result.collection.each(function (item) {

      this.showInformationDialog(result.entity.get("Number"));

        });

    }

}, this);

        }

Нравится

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

Вот мой пример по копированию всех адресов электронной почты контакта, по аналогии можно выбрать топ1 нужного типа

/** Копирование почты */
copyEmail: function() {
	if (this.get("Contact")) {
		var contact = this.get("Contact");
		contact = contact.value;
		var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
			rootSchemaName: "ContactCommunication"
		});
		var email = "";
		esq.addColumn("Contact");
		esq.addColumn("CommunicationType");
		esq.addColumn("Number");
		// Создание экземпляра первого фильтра.
		var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Contact", contact);
		// Создание экземпляра второго фильтра.
		var esqSecondFilter =	esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
							"CommunicationType", "ee1c85c3-cfcb-df11-9b2a-001d60e938c6");
		// Фильтры в коллекции фильтров запроса будут объединяться логическим оператором OR. 
		esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
		// Добавление созданных фильтров в коллекцию запроса. 
		esq.filters.add("esqFirstFilter", esqFirstFilter);
		esq.filters.add("esqSecondFilter", esqSecondFilter);
		// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам.
		esq.getEntityCollection(function(result) {
			if (result.success) {
				result.collection.each(function(item) {
					// Обработка элементов коллекции.
					email = email + " " + this.get("Number");
				});
				this.set("UsrEmail", email);
			}
		}, this);
}

 

Вот мой пример по копированию всех адресов электронной почты контакта, по аналогии можно выбрать топ1 нужного типа

/** Копирование почты */
copyEmail: function() {
	if (this.get("Contact")) {
		var contact = this.get("Contact");
		contact = contact.value;
		var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
			rootSchemaName: "ContactCommunication"
		});
		var email = "";
		esq.addColumn("Contact");
		esq.addColumn("CommunicationType");
		esq.addColumn("Number");
		// Создание экземпляра первого фильтра.
		var esqFirstFilter = esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Contact", contact);
		// Создание экземпляра второго фильтра.
		var esqSecondFilter =	esq.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL,
							"CommunicationType", "ee1c85c3-cfcb-df11-9b2a-001d60e938c6");
		// Фильтры в коллекции фильтров запроса будут объединяться логическим оператором OR. 
		esq.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
		// Добавление созданных фильтров в коллекцию запроса. 
		esq.filters.add("esqFirstFilter", esqFirstFilter);
		esq.filters.add("esqSecondFilter", esqSecondFilter);
		// В данную коллекцию попадут объекты - результаты запроса, отфильтрованные по двум фильтрам.
		esq.getEntityCollection(function(result) {
			if (result.success) {
				result.collection.each(function(item) {
					// Обработка элементов коллекции.
					email = email + " " + this.get("Number");
				});
				this.set("UsrEmail", email);
			}
		}, this);
}

 

Быстров Сергей, Спасибо, сейчас попробуем. 

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

Пытаюсь обратиться к сервису http://.../0/rest/ITdsBSC/CaseBSC методом POST, предварительно получил в GET cookies и явно передавал params, в т.ч. utf-8, но возвращается в неизвестной кодировке 403 ошибка, как через postman правильно посылать POST запросы? Делал по гайду с академии, какие могут быть идеи в чем проблема? P.S. url очистил т.к. NDA

Изображение удалено.

Нравится

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

Если сервис не анонимный, то не прошли аутентификацию. Надо сначала вызвать авторизоваться через метод http://.../ServiceModel/AuthService.svc/Login получить куки и в заголовке своего запроса передать значение BPMCSRF

Если сервис не анонимный, то не прошли аутентификацию. Надо сначала вызвать авторизоваться через метод http://.../ServiceModel/AuthService.svc/Login получить куки и в заголовке своего запроса передать значение BPMCSRF

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

Доброго дня.

Существует деталь "Продукты в заказе". В ней отображены группы, в которых настроены несколько фильтров, и согласно которым подбираются продукты.

После выбора группы и прокрутки отобразившегося списка продуктов, в консоли выводятся запросы, которые система направляет в БД.

По окончанию списка продуктов и прокрутке вниз (в этой же области списка) запросы продолжают отправляться в БД, несмотря на то, что все продукты уже прогружены.

Получается, что система всё-равно пытается найти подходящие продукты, отчего система принимает на 1-2 секунды режим загрузки.

Почему так происходит и должна ли по логике система слать запросы в БД, если все продукты группы уже загружены?

Нравится

7 комментариев

Доброе утро.

Это на последней версии наблюдается такое поведение системы?

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

доброго дня, Алла.

Версия 7.13.1.769

Не совсем понятно, о каких «запросах в БД», которые «выводятся в консоли» речь. Вы имеете в виду «Инструменты разработчика» в браузере или профайлер из MS SQL?

Если речь о запросах  в браузере к серверу, то на версии 7.14.3 такого поведения не наблюдаю. Попробуйте и Вы развернуть на сайте демо-версию и воспроизвести в ней, чтобы выяснить, дело в более старой версии софта или, может, в каких-то доработках окна выбора.

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

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

Дарья Сошина пишет:

Версия 7.13.1.769

Используемая Вами версия устаревшая, поэтому рекомендую проверить возникает ли проблема на самой последней версии 7.14.4. Если данная проблема есть и в этой версии, обратитесь в службу поддержки, возможно, что Вы обнаружили не выявленную ранее ошибку. 

Алла, спасибо, когда заказывал демку, её ещё не давали. Сейчас, по идее, совсем скоро должна уже 7.15 появиться.

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

Здравствуйте, Александр.

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

Попробовала на демке 7.14.4. Индицент не повторился. В действительности, как Александр подметил, была доработка окна выбора.

Зверев Александр пишет:

Не совсем понятно, о каких «запросах в БД», которые «выводятся в консоли» речь. Вы имеете в виду «Инструменты разработчика» в браузере или профайлер из MS SQL?

В консоли браузера при скролле наблюдала формирование запросов. 

Могла ли доработка так повлиять на поведение системы и можно ли это как-то проверить?

Могла, конечно. Мы же не знаем, что это за доработка. Проверить можно, оставив Вашу  7.13 без неё (например, подняв старый бекап и подключив сайт к нему) или накатываем доработанных схем на 7.14.

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

Всем доброго времени суток.
Хотелось бы узнать если ли возможность в элемент бизнес-процесса "Задание-сценарий" вставить запрос к базе данных и если есть, то можно хоть самый простой пример c Select.

Нравится

2 комментария

Сергей, такая возможность есть.
Пример можно посмотреть на академии в этой статье.

Спасибо Наталия. Буду разбираться.

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

Коллеги, добрый день!

При настройке системы иногда возникает потребность внесения ряда изменений на уровне базы данных.
Наш бесплатный модуль для bpm’online позволяет техническим специалистам осуществлять выборки из базы данных и выполнять SQL-команды наиболее удобным способом и без потери времени.
Особенно эта возможность актуальна для пользователей сайтов on-demand, когда доступ к базе данных ограничен.

Чтобы получить подробную информацию по настройке и использованию консоли SQL запросов, а также заполнить форму заказа этого бесплатного решения, просто перейдите по ссылке.

SQL

Будем рады ответить на ваши вопросы!

С уважением,
Зайчиков Илья
Менеджер продуктов
ООО «Программные Технологии»
Центр разработки и внедрения Террасофт Поволжье
Тел. +7 (846) 266-55-69
Email: galanin@samarasoft.com
samarasoft.com

Нравится

Поделиться

9 комментариев

Насколько понимаю, это развитие Вашей же утилиты под 5.Х?

Александр, Добрый день!

Да, всё верно. Эта версия позволяет более удобно выполнять SQL запросы в интерфейсе 7.X, в новой версии появилась подсветка синтаксиса языка SQL, возможность настроить разграничение доступа к данному модулю, выполнять одновременно несколько select запросов (как это позволяет делать SQL Management Studio), выполнять сортировку полученных результатов и обрабатывать ошибки в случае некорректного написания SQL-команды.

С уважением,
Зайчиков Илья

Бесплатно, но "спасибо" оставлю :)

Сходил по ссылке, заявку оставил, да так мне и не дали чудо утилиту... :cry:

Александр, Добрый день!

Приношу извинения, но, к сожалению, вашей заявки не было на сайте, возможно что-то было не так заполненно, так как заявки приходят, мы только что проверили.
А утилиту мы конечно же предоставим!

С уважением,
Зайчиков Илья

"Зайчиков Илья Алексеевич" написал:А утилиту мы конечно же предоставим!

Еще раз отправил заявку))

Александр,

Я уже вам отправил ссылку для скачивания в скайп.

С уважением,
Зайчиков Илья

"Зайчиков Илья Алексеевич" написал:Я уже вам отправил ссылку для скачивания в скайп.

Поймал, спасибо огромное

Александр,

Всегда рады помочь!

С уважением,
Зайчиков Илья

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

Коллеги, приветствую.

Есть некоторый запрос к базе данных, полученный с использованием класса SELECT (считывается информация о платежах за период по ФИО должника.):

var selectPaymentsRegister = (Select)new Select(userConnection)
        .Column("c", "Surname").As("Surname")
        .Column("c", "GivenName").As("Name")
        .Column("c", "MiddleName").As("MiddleName")
        .Column("c", "Name").As("FullName")
        .Column("c", "Phone").As("Phone")
        .Column("c", "Address").As("Address")
        .Column("up", "UsrPaymentSum").As("Amount")
        .Column("up", "UsrPaymentDate").As("AmountDate")
        .From("UsrPayments").As("up")
        .Join(JoinType.Inner, "Contact").As("c")
        .On("up", "UsrDebtorId").IsEqual("c", "Id")
        .Where("c", "Surname").IsEqual(Column.Parameter(debtorSurname))
        .And("c", "GivenName").IsEqual(Column.Parameter(debtorName))
        .And("c", "MiddleName").IsEqual(Column.Parameter(debtorMiddleName))
        .And("up", "UsrPaymentDate").IsGreaterOrEqual(Column.Parameter(dateBegin))
        .And("up", "UsrPaymentDate").IsLessOrEqual(Column.Parameter(dateEnd))

        as Select;

Далее, с использованием IDataReader в цикле я получаю значения полей.

Как составить такой же запрос, но с использованием EntitySchemaQuery? Хочу подробнее разобраться в этой теме.

Был бы весьма признателен за информацию.

Спасибо.

--
С уважением, Алексей Быков.

Нравится

2 комментария

Здесь вся доступна инфа по ESQ - http://academy.terrasoft.ru/documents/docs/technic/SDK/7.7.0/UsingEntit…. Должно помочь.

Здравствуйте, Илья! Спасибо.

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

Добрый день!
Бывают к примеру фильтры сравнения
filterGroup1.add("ServiceItemFilter", scope.Terrasoft.createColumnFilterWithParameter(
scope.Terrasoft.ComparisonType.EQUAL, "[ServiceEngineer:Engineer].ServiceItem", serviceItem.value));
}

фильтры проверки на null
filterGroup2.add("TerritoryNullFilter", scope.Terrasoft.createColumnIsNullFilter(
"[ServiceEngineer:Engineer].UsrNeedTerritory"));

А подскажите, пожалуйста, синтаксис фильтра like?
Допустим, я хочу исключить все группы в название которых входит Группа руководителей
Каков синтакис?

Нравится

6 комментариев

Попробуйте, использовать для этой задачи NOT IN фильтр на ESQ?

var existsFilter = this.Terrasoft.createColumnInFilterWithParameters("Id",
   someCollection);
existsFilter.comparisonType = this.Terrasoft.ComparisonType.NOT_EQUAL;

вы имеете в виду создать коллекцию someCollection, в которую бы входили группы с названием "Группа руководителей", а потом ее исключить из выбора?
Да, наверное, это вариант.
Хорошо, спасибо, попробую

вы имеете в виду создать коллекцию someCollection, в которую бы входили группы с названием "Группа руководителей", а потом ее исключить из выбора?
Да, наверное, это вариант.
Хорошо, спасибо, попробую

хотя вопрос остается)
даже если это фильтр на ESQ

Допустим, есть такой фильтр
- этот фильтр отбирает записи, у которых поле UsrTest = значению somecaption
esq.filters.add("filterCase", Terrasoft.createColumnFilterWithParameter(
Terrasoft.ComparisonType.EQUAL, "UsrTest", somecaption));
каким образом должен выглядеть фильтр, отбирающий записи, в название которых (поле UsrTest в примере) входит значение somecaption?

Здравствуйте, Дарья!

1) Откройте консоль браузера, находясь в Вашей CRM системе
2) Начните писать в консоли Terrasoft.ComparisonType.
В результате система Вам предложит все типы сравнения - просто выберите нужный. В условиях Вашей задачи - это CONTAIN.

Спасибо, Алексей, попробую

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