Доброго времени суток,

Я бы хотел попросить помощи в реализации подобного SQL запроса через entitySchemaQuery на фронт енде

Select id,
       name
from TableA 
where 
    accountId = '777' 
    and (name <> 'Igor' 
         OR name <> 'Alex') 

Из того что я пробовал

var esQuery = this.Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "TableA" });
				esQuery.addColumn("Id");
				esQuery.addColumn("Name");
 
var esqMainFilter = esQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "account", "777");
 
var esqFirstFilter = esQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Name", "Igor");
var esqSecondFilter = esQuery.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Name", "Alex");
 
 
var secondaryFilter = Terrasoft.createFilterGroup();
secondaryFilter.logicalOperation = Terrasoft.LogicalOperatorType.OR;
secondaryFilter.add("esqFirstFilter", esqFirstFilter);
secondaryFilter.add("esqSecondFilter", esqSecondFilter);
 
 
esQuery.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
esQuery.filters.add("esqMainFilter", esqMainFilter);
esQuery.filters.add("esqSecondaryFilter", secondaryFilter);

Спасибо!

Нравится

1 комментарий

Добрый день, 

Вот пример похожего запроса через entitySchemaQuery на клиенте

esQuery = Ext.create("Terrasoft.EntitySchemaQuery", { rootSchemaName: "Contact" });
esQuery.addColumn("Name");
 
var esqMainFilter = this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.EQUAL, "Account", "b3f737a4-d95b-4c87-9082-8d0deb421882");
esQuery.filters.logicalOperation = Terrasoft.LogicalOperatorType.AND;
esQuery.filters.addItem(esqMainFilter);
 
var esqFirstFilter = this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Name", "test2");
var esqSecondaryFilter = this.Terrasoft.createColumnFilterWithParameter(Terrasoft.ComparisonType.NOT_EQUAL, "Name", "test3");
 
var filterCollection = this.Terrasoft.createFilterGroup();
filterCollection.logicalOperation = Terrasoft.LogicalOperatorType.OR;
filterCollection.addItem(esqFirstFilter);
filterCollection.addItem(esqSecondaryFilter);
 
esQuery.filters.addItem(filterCollection);
esQuery.getEntityCollection();

используем this.Terrasoft.createFilterGroup() для того что бы добавить группу фильтров с OR.

выполнив этот запрос в консоли браузера профайлером отловила запрос который пришел в БД, выглядит он следующим образом:

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

Всем доброго времени суток! Столкнулись со следующей проблемой. Создаем шаблон Email, при сохранении выдает - https://prnt.sc/httbxf.

Картинки сжали по максимуму. Как можно увеличить порог загружаемого шаблона?

Поправка, бьет данную ошибку при отправке. Отправка через раздел Email. Интеграция с сервисом UniOne.

Заранее благодарю!

Нравится

1 комментарий

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

По умолчанию в приложении максимальный размер шаблона – 1,5 Мб. Для изменения необходимо заместить схему CESMaillingProvider. Заместить схему CESMaillingProvider стандартным способом при помощи замещения родительской схемы нельзя. Для замещения CESMaillingProvider необходимо создать свой класс, в котором скопировать весь код из CESMaillingProvider. В кастомном классе уже изменить реализацию метода ValidateTemplateSize, в котором вместо MailingMaxTemplateSize указать свой размер. После этого необходимо в таблице SysMalingProvider изменить значение ClassName для Cloud Email Service на название кастомного класса.

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

Нужно создать раздел писем.

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

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

Нравится

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

Здравствуйте, Виталий

Може более подробно описать что Вы имеете ввиду и какая стоит перед Вами бизнес задача?

Denys Diachenko, решил. 

Что бы не выделяло раздел активностей при переходе в новый раздел писем нужно преопределить функцию, вот так:

changeSelectedSideBarMenu: function() {

                    var moduleConfig = this.getModuleStructure();

                    if (moduleConfig) {

                        var config = "SectionModuleV2/UsrCorrespondenceSectionV2/";

                        this.sandbox.publish("SelectedSideBarItemChanged", config, ["sectionMenuModule"]);

                    }

                }

Радчук Виталий Владимирович,

Попробуйте создать раздел на основе объекта представления, наследующего структуру объекта Активности.

Сам сейчас работаю над этой задачей.

Можем решить совместными усилиями.

Радчук Виталий Владимирович пишет:

так:changeSelectedSideBarMenu

А в какой схеме вы переопределяете этот метод?

 

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

Есть задача. ЕЕ состояние завершена. Срок завершения 01.01.2018.

По этой задаче есть акция, которую пользователь не может отправить на согласование, хотя в визах я ему проставил статус "ожидает визирования". В чем тут проблема?

Что нужно проверить или изменить?

Нравится

1 комментарий

Здравствуйте!

В первую очередь следует посмотреть лог выполнения кейса. Его можно посмотреть зная Id процесса кейса.

Узнать Id процесса кейса можно следующим образом:

1. Через базу данных, в таблице SysProcessEntity найти запись где EntityId = <Id акции>. В выборке нас интересует результат колонки SysProcessId.

2. В системе перейти в Журнал процессов, открыть любую запись лога бизнес-процесса и заменить в ссылке Id карточки лога, на результат колонки SysProcessId, то есть ссылка должна заканчиваться так: SysProcessLogPageV2/edit/<SysProcessId с выборки>.

3. Откроется карточка лога кейса. Через неё можно посмотреть в каком состоянии выполнения кейс. А если есть ошибка в его выполнении - сориентироваться по ошибке.

Также следует проверить наличие прав доступа у пользователя на запись акции, может ли он изменять её.

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

Спасибо!

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

Всем доброго времени суток.

Версия 7.11.

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

var hash = /**путь до страницы**/;
this.sandbox.publish("PushHistoryState", {hash: hash});

Вопрос такой - а как это сделать внутри задания-сценария бизнес-процесса? Просто открыть для текущего пользователя некую страницу, зная её ссылку, перенаправить его.

В мастере БП есть стандартные элементы "Открыть страницу редактирования" и "Преднастроенная страница", но интересует страница раздела Обращений CaseSection - её нет в списке допустимых для открытия преднастроенных, и к тому же там идёт перенаправление по ссылке странного вида: ProcessCardModuleV2, а нужно просто #SectionModuleV2/CaseSection/

Хотелось бы получить скрипт для любой ссылки. Спасибо.

Нравится

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

"Хотелось бы получить скрипт для любой ссылки" - из бизнес-процесса можно отправить сообщение по вебсокету, а в ClientMessageBridge на клиенте загрузить страницу.

Альмухаметов Булат

добрый вечер, спасибо за идею.

Не подскажете, как правильно отправить сообщение из БП? Пробую вот по этой инструкции: https://academy.terrasoft.ru/documents/technic-sdk/7-11/clientmessagebr… компилятор ругается на MsgChannelUtilities в задании-сценарии. Что ещё нужно подключить?

Нашёл. Отправляю таким способом:

 

// Публикация сообщения по WebSocket.
var userConnection = Get&lt;UserConnection&gt;("UserConnection");
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "OpenCaseSection", "messageText");
return true;

В переопределённом ClientMessageBridge  на клиенте соответственно доработал метод:

onMessageReceived: function(scope, response) {
					this.callParent(arguments);
					if (response.Header.Sender == "OpenCaseSection"){
						console.log(response);
						this.sandbox.publish("PushHistoryState", {hash: "SectionModuleV2/CaseSection/"});
					}
				},

Но теперь проблема при перенаправлении: i {message: "Message PushHistoryState is not defined in BaseSch…aModuleV2 (ViewModule_clientMessageBridge) module"}

Соответственно, вопрос - где именно происходит подписка на PushHistoryState, и как выглядит обработчик?

Смородинов Денис,

думаю, нужно добавить сообщение

"PushHistoryState": {
					mode: this.Terrasoft.MessageMode.BROADCAST,
					direction: this.Terrasoft.MessageDirectionType.PUBLISH
				},

 

Подписка происходит в NUI.NavigationModule, там всего пару методов для работы с глобальным объектом роутером.

Альмухаметов Булат,

спасибо, так работает.

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

Как на детали "Связи" в объекте активности убрать поля: заказы, проект, документы, так как эти объекты не используются в системе?

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

 

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

Нравится

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

Здравствуйте, Екатерина!

 

Базовыми средствами внести данные изменения не получится. Необходимо выполнить замещение базовой схемы EntityConnectionsDetailV2

Подобная проблема уже рассматривалась ранее Вы можете ознакомиться с решением тут - https://community.terrasoft.ru/questions/kak-ubrat-ne-nuznoe-pole-v-rod…

Для проделывания данной операции хватит всего лишь удалить соответствующие записи из таблицы EntityConnection. Соотношение идёт в ней вроде по Id (или UId) объекта - Id (или UId) колонки.

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

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

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

Как это можно сделать?

 

Нравится

1 комментарий

Здравствуйте, Екатерина!

 

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

 

Более подробно можно прочитать на академии Террасофт - https://academy.terrasoft.ru/documents/studio/7-11/nastroyka-spiska-rab…

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

Добрый день!

Подскажите, пожалуйста, как можно изменить исходный код объекта? В дизайнере объектов можно только посмотреть его, но не редактировать, при выгрузке в файловую систему создаются только .js-файлы объекта. Но в одном из объектов в нашей системе этот код был изменен сторонней компанией, выполнявшей доработки, значит, такая возможность существует.

Нравится

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

Во встроенном процессе объекта. В дизайнере объекта нажмите Дополнительно -> открыть процесс. Исходный код будет храниться в метаданных объекта в экранированном виде, там можно смотреть все изменения из SVN.

Альмухаметов Булат,

у меня возникла проблема, может Вы мне сможете помочь?

Есть сторонний пакет, он закрыт для изменений. В нем в объект добавлен обработчик при добавлении записи, и он работает некорректно. Сам объект я изменить не могу, а если создать замещающий, то методы родительского выполнятся всё равно. Не подскажете, есть ли решение?

Добрый день. В замещающем объекте вы можете переопределить методы родителя и не вызывать базовую реализацию.

Кот Владимир Владимирович,

А подскажите, пожалуйста, каким образом я могу переопределить методы родителя в сущности типа "объект"?

В "Дополнительно -> Открыть процесс" я могу увидеть родительские методы, но не имею понятия как их переопределить.

Для этого необходимо выбрать нужный вам метод, и нажать галочку Переопределен. По умолчанию в переопределении будет вызов родителя. Например, я поставил эту галочку для метода TryProcessComplete, у которого есть параметр changeType, и получил следующий код:

base.TryProcessComplete(changeType);

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

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

Есть БП, который запускается по сигналу "Изменение записи". Можно ли в логах БП (полный доступ в базу имеется) узнать Id записи, на которую сработал БП? Логируется ли это где-нибудь?

Проблема в том, что БП вызывается достаточно часто и по времени сопоставлять не получается.

Нравится

1 комментарий

Добрый день!

Для решения задачи нужно в сам процесс добавить элемент [Привязать процесс к объекту]. Описание можно найти в документации.

После этого связь между экземпляром процесса и записью можно будет увидеть в Журнале процессов в конкретном экземпляре.

Или в таблице SysProcessEntity. Тут есть ссылка на экземпляр БП (в SysProcessLog), UId схемы объекта к которому привязан экземпляр (в SysSchema) и Id конкретной записи (из объекта к которому выполнена привязка)

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

Добрый день! Проблема с сервисом DataService. В процессе разработки была произведена небольшая интеграция с сайтом клиента, однако в процессе переноса на боевую среду (в облаке) возникла ошибка следующего вида: невозможно выполнить какой-либо запрос (напр. SelectQuery):

Возвращается код ошибки 403 и ответ вида: 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>403 - Forbidden: Access is denied.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;}
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;}
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;}
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>403 - Forbidden: Access is denied.</h2>
  <h3>You do not have permission to view this directory or page using the credentials that you supplied.</h3>
 </fieldset></div>
</div>
</body>
</html>

ЕМНИП, необходимо при начале работы с сервисом отключить CSRF-проверку подлинности. Не подскажете, в чём может быть проблема? Спасибо. 

Нравится

1 комментарий

Здравствуйте, Иван

Данное поведение возникло в следствие некорректного отключения защиты от CSRF-атак.

Ошибку исправили на Вашем сайте и временно отключили защиту от CSRF-атак. Прошу обновить страницу с очисткой кеша.

Также напоминаю, что при следующем обновлении сайта, защита от CSRF-атак будет включена автоматически и для корректной работы Вашей интеграции в последующем Вам необходимо доработать Вашу интеграцию по инструкции https://academy.terrasoft.ru/documents/technic-sdk/7-11/zashchita-ot-cs…

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