Вопрос

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

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

У меня такой же вопрос

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

Добрый день!

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Возникло сразу несколько вопросов по графикам:

1. Можно ли показатель поделить на какое-то число перед отображением? Например, сумму выводить в миллионах рублей, а не в единицах рублей? Огромные числа не информативны!

2. Можно ли в горизонтальной гистограмме выводить top 5, 10 или 20 линий в сортировке по убыванию?

3. Как настроить подписи по оси Х, чтобы они были развернуты на 90%, т.е. вертикально? Тогда они перестанут наезжать друг на друга.

У меня такой же вопрос

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

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

1. На данный момент, к сожалению, данные на графиках отображаются в том же виде, в котором заполнены соответствующие поля на страницах разделов. Мы зафиксировали Ваше пожелание и передали его аналитикам продукта. Они рассмотрят возможность реализации настройки отображения данных на дашбордах в будущих релизах продукта

2. Индивидуально для каждого графика такой возможности нет, но можно ограничить количество выводимых на дашборд данных в системной настройке "Ограничение запроса данных графика". Тогда на графике будет отображаться только топ-N категорий согласно сортировке (работает начиная с версии 7.11.2, только с графиками, где настроена одна серия данных). Также можем предложить устанавливать дополнительные фильтры, чтоб уменьшить количество выводимых данных

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

Мы передали все Ваши пожелания аналитикам продукта. Спасибо, что помогаете улучшать наши продукты!

Посмотрел в 7.11.2 как работает эта настройка.

Во-первых, она выдает на 1 значение больше, чем указано. Т.е. я указал значение 2 в настройке, а увидел 3 столбца-значения на графике.

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Здравствуйте, подскажите как правильно настроить WebStorm для разработки под BPM.Какие библиотеки, подводные камни и тд

У меня такой же вопрос

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

Добрый день, нет никаких особенных настроек. Просто создаете проект с указанием пути к папке с js файлами

Артем Гура,

а насчет библиотек? просто хотелось бы использовать не как редактор кода, а как полноценную IDE 

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

Артем Гура,

Насчет debug тоже интересно можно ли? Если насчет IDE то к примеру удобство написания Crud запросов и прочих особенностей Bpm

 

Касательно debug, то не пробовал, ибо в Chrome удобнее :)

А на счет функциональности IDE, то он подхватывает функции нормально. Чтобы он подхватывал ядровый js, то нужно подключить папку ...\Terrasoft.WebApp\Resources\ui. Там js-ы ядра (контролы, схемы...). Но их изменять не нужно, ибо приложение их не подхватывает. Они больше именно для разработки

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

У меня реализована система интеграции через EntityDataService, и когда данные приходят в интеграционные сущности, запускается БП по сигналу и обрабатывает данные. Иногда возникает странная ошибка 

Terrasoft.Common.ItemNotFoundException: Элемент с именем "UsrIntMyTable" не найден в
Terrasoft.Core.ManagerItemCollection`1.GetByName(String name) в
Terrasoft.Core.Manager`2.GetInstanceByName(String name) в
Terrasoft.Core.Entities.EntitySchemaQuery..ctor(EntitySchemaManager entitySchemaManager, String sourceSchemaName) в
Terrasoft.Core.Process.UsrMyProcessing.ScriptTask1Execute(ProcessExecutingContext context) в
Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)

где UsrIntMyTable - моя интеграционная таблица в БД, которой соответствует объект в конфигураторе (или наоборот).

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

Судя по всему, ошибка случается здесь

var userConnection = UserConnection;
var DealEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager,"UsrIntMyTable");

Буду благодарен за любые советы на тему что это и как это поправить.

У меня такой же вопрос

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

Добрый день

Единственное предположение в том, что в эти моменты производится компиляция. Проверьте это предположение

"За ширмой" происходит следующее:

EntitySchemaManager ищет созданный инстанс, если его нет, то создает (new UsrIntMyTable). И вот, если его в сборке нет, то создать его возможности нет

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

В реестре есть механизм модификации выводимых полей. А есть ли механизм выведения несуществующих в базе полей? Например,

addItemsToGridData: function() {
    this.callParent(arguments);
	debugger;
	var gridDataItems = this.getGridData().getItems();
	gridDataItems.forEach(function(item) {
		item.set("IsUpdated", 1);
	});
.....

Можно ли в реестр вывести IsUpdated, чтобы пользователи его видели?

У меня такой же вопрос

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

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

Как это лучше сделать?

Я, например, вижу, что есть метод setActiveTab, однако, надо номер таба получить.

Нормально ли сделать ссылку вида

/0/Nui/ViewModule.aspx#CardModuleV2/UsrMyPage/edit/3f199545-fd54-46fb-b801-f711014389f2/4

Не окажется ли так, что такая приписка к урлу будет валить систему в будущих версиях?

У меня такой же вопрос

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

Добрый день

Вы можете оперировать не номерами Tab'а, а их именами и в урле будете передавать его имя. В будущих релизах не планируется что-то добавлять после Id записи

По ходу возник еще один вопрос - а когда можно вызывать setActiveTab при загрузке страницы? В onEntityEnitialized получается рано - таб выбирается, но контент остается от первого таба.

Алексей-Карягин пишет:
В onEntityEnitialized получается рано - таб выбирается, но контент остается от первого таба.

Это потому , что с табами всё очень плохо smiley Попробуйте вот так написать:

onEntityInitialized: function() {
	this.callParent(arguments);
	this.tabsCollectionActions();
},
tabsCollectionActions: function() {
	var tabsCollection = this.get("TabsCollection"); //получаем коллекцию
	//что-то с ней делаем (или нет)
	this.setActiveTab("ProductsInDiscountTab"); //устанавливаем активную
	this.set("ProductsInDiscountTab", true); //в этом set-е вся соль. Нафига он - непонятно. Но без него не рендерится содержимое вкладки
},

 

Варфоломеев Данила,

this.set("ProductsInDiscountTab", true); тоже не рендерится. Только таймаут, только хардкор!

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Хочу настроить функцию Количество по связанному объекту и вывести значение в реестр как здесь https://academy.terrasoft.ru/documents/marketing/7-8/nastroyka-kolonok-…

Вопрос в том, что где-то фильтрация доступна, а где-то нет, хотя всё как будто одинаково.

Почему? Что влияет на это?

У меня такой же вопрос

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

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

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Наблюдаю интересный глюк на OnSite.

Раз в какое-то кол-во минут (10-30) Redis поднимает второй процесс, который отъедает до 13 ГБайт памяти, потом завершается. База рэдиса dump.rdb по размеру 3Гб.

В логах этому времени соответствует такая запись, например

[2116] 04 Dec 15:37:45.043 * 10 changes in 300 seconds. Saving...
[2116] 04 Dec 15:37:45.183 * Background saving started by pid 7080
[2116] 04 Dec 15:38:28.223 # fork operation complete
[2116] 04 Dec 15:38:29.504 * Background saving terminated with success

Когда свободной памяти в системе не хватало, BPM повисала на 30-50 сек, сайт становился недоступен. Когда памяти стало больше (уменьшили макс. память для SQL-сервера), стала чуть-чуть подтормаживать в эти моменты, но в целом работает стабильно.

Однако, сама ситуация мне не нравится. Что посоветуете посмотреть? Куда копать?

И вообще, насколько важные данные хранит рэдис? Если вообще отключить сохранение, то при ребуте сервера, потеряется ли что-то важное?

В ВРМ постоянно вкачиваются данные со стороны системы интеграции через EntityDataService.

У меня такой же вопрос

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

Скорее всего у вас включено хранение данных в файле для редиса.

Попробуйте его отключить:

Конфигурация Redis (redis.windows.conf)
    Отключить сохранение на диск (закомментировать)
        #save 900 1
        #save 300 10
        #save 60 10000

Сергей Кy6риш,

Я правильно понимаю, что в Рэдисе ничего важного не хранится и при очистке и перезапуске сервера, например, мы точно ничего не потеряем?

Алексей-Карягин,

верно

Кстати, каноничный Redis есть только под Linux. Порт на Windows — неофициальный.

При перезапуске ничего важного не теряется. Разве что пользователей (в том числе и интеграции) выкинет. И сразу будет чуть тормозить, пока снова всё не закеширует.

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Для определенной сущности у меня есть администрирование по записям.

Если я даю человеку доступ, допустим на чтение, получит ли группа руководителей роли, в которую он входит такие же права?

А если мне надо, чтобы руководители получили права с правом делегирования другому сотруднику, как тогда?

У меня такой же вопрос

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

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

Если я даю человеку доступ, допустим на чтение, получит ли группа руководителей роли, в которую он входит такие же права?

Да, получит.

А если мне надо, чтобы руководители получили права с правом делегирования другому сотруднику, как тогда? 

В таком случае для нужной роли в правах администрирования по записям нужно чтоб в колонке "Уровень доступа" стоял доступ с правом делегирования (значек в виде ключика).

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

Войдите или зарегистрируйтесь, чтобы комментировать
Вопрос

Есть у меня галлерея изображений, которые я отображаю через Terrasoft.Button. Хочу, что бы по клику открывалось большое изображение, однако, при клике вылетает ошибка "Cannot read property 'apply' of undefined" причем дважды.

Вот такой код. Подскажите, куда копать?

getItemViewConfig: function(itemConfig, item) {
				var itemViewConfig = this.get("itemViewConfig");
				if (itemViewConfig) {
					itemConfig.config = itemViewConfig;
					return;
				}
				var config = {
					className: "Terrasoft.Container",
					id: "ImageGalleryContainer",
					items: []
				};
				config.items.push(this.generateImageConfig(item.get("itemId"), item.get("PhotosSmallURL"),
					item.get("PhotosLargeURL")));
				itemConfig.config = config;
				var x = [];
				x.push(config);
			},
 
			generateImageConfig: function(id, smallUrl, largeUrl) {
				var config = {
					id: id,
					type: ConfigurationEnums.CustomViewModelSchemaItem.CUSTOM_ELEMENT,
					style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT + " cpimagebutton",
					className: "Terrasoft.Button",
					iconAlign: Terrasoft.controls.ButtonEnums.iconAlign.TOP,
					tag: id,
					click: {
						bindTo: "onImageClick"
					},
					visible: true,
					enabled: true,
					imageConfig: {
						source: Terrasoft.ImageSources.URL,
						url: smallUrl
					}
				};
 
				return config;
			},
 
			onImageClick: function() {
				debugger;
			}

 

У меня такой же вопрос

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

Сто процентов вы указали что-то замудрёное в одном из параметров. Я бы начал с "style: Terrasoft.controls.ButtonEnums.style.TRANSPARENT + " cpimagebutton"" Поставил бы что-нибудь простое, вроде style: "blue".

По хорошему, запихнуть бы в контейнер обычный "чистый" button, посмотреть как отработает, потом навесить, допустим  imageConfig, проверить, и т.д

Добрый день!

сложно сказать куда копать, так как ошибка в том, что не найден какой-то метод можели. Для начала я бы рекомендовал продебажить. Остановиться в месте свала, пройтись по callstack. и возможно станет ясно, какой метод отсутствует

Варфоломеев Данила,

Разобрался, метод должен быть определен во viewmodel scope-е.

Войдите или зарегистрируйтесь, чтобы комментировать