Всем добрый день!

Друзья, подскажите, пожалуйста, кто-нибудь работал с деталью на странице портала самообслуживания?

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

Нравится

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

Это ещё реализовано и в Средствах связи

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

В средствах связи, схеме ContactCommunicationDetailV2 добавленные и удалённые складываются в две коллекции Collection и DeletedItems и при сохранении из них извлекаются и идут на сервер одним составным запросом:

deleteItem: function(item) {
	var deletedItems = this.get("DeletedItems");
	var collection = this.get("Collection");
	collection.removeByKey(item.get("Id"));
	deletedItems.addItem(item);
},
 
addItem: function(tag) {
	if (this.get("IsDetailCollapsed")) {
		return;
	}
	var communicationTypes = this.get("CommunicationTypes");
	var communicationType = communicationTypes.get(tag);
	var newItem = this.Ext.create("Terrasoft.BaseCommunicationViewModel", {
		entitySchema: this.entitySchema,
		columns: this.columns
	});
	newItem.set("CommunicationTypes", communicationTypes);
	newItem.sandbox = this.sandbox;
	newItem.setDefaultValues(function() {
		newItem.set("CommunicationType", {
			value: communicationType.get("Id"),
			displayValue: communicationType.get("Name")
		});
		newItem.set("Contact", {
			value: this.get("MasterRecordId")
		});
		var itemKey = newItem.get("Id");
		var collection = this.get("Collection");
		collection.add(itemKey, newItem);
		this.changeCardPageButtonsVisibility(true);
	}, this);
	return newItem;
},
 
...
 
getDeleteItemsQueries: function() {
	var deletedItems = this.get("DeletedItems");
	var deleteQueries = [];
	deletedItems.each(function(item) {
		var primaryColumnValue = item.get(item.primaryColumnName);
		var deleteQuery = item.getDeleteQuery();
		deleteQuery.enablePrimaryColumnFilter(primaryColumnValue);
		deleteQueries.push(deleteQuery);
	}, this);
	return deleteQueries;
},
 
getSaveItemsQueries: function() {
	var collection = this.get("Collection");
	var saveQueries = [];
	collection.each(function(item) {
		if (item.isChanged() && item.validate()) {
			saveQueries.push(item.getSaveQuery());
		}
	}, this);
	return saveQueries;
},
 
...
 
save: function() {
	var restrictionsQuery = this.getSaveRestrictionsQuery();
	var queries = restrictionsQuery ? [restrictionsQuery] : [];
	var saveQueries = this.getSaveItemsQueries();
	queries = queries.concat(saveQueries);
	var deleteQueries = this.getDeleteItemsQueries();
	queries = queries.concat(deleteQueries);
	if (Ext.isEmpty(queries)) {
		this.publishSaveResponse({
			success: true
		});
		return true;
	}
	var batchQuery = Ext.create("Terrasoft.BatchQuery");
	Terrasoft.each(queries, function(query) {
		batchQuery.add(query);
	}, this);
	batchQuery.execute(this.onSaved, this);
	return true;
},
 
onSaved: function(response) {
	var message = response.ResponseStatus && response.ResponseStatus.Message;
	if (response.success && !message) {
		var deletedItems = this.get("DeletedItems");
		var collection = this.get("Collection");
		collection.each(function(item) {
			item.isNew = false;
			item.changedValues = null;
		}, this);
		deletedItems.clear();
		this.publishSaveResponse(response);
	} else {
		this.publishSaveResponse({
			success: false,
			message: this.getValidationMessage(message)
		});
	}
},

 

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

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

Пытаюсь установить расширение ITSM https://marketplace.terrasoft.ru/app/itsm-service-creatio для Service Enterprise.

При установке пишет, что Зависимый пакет "ServiceEnterpriseSoftkey" не найден

У нас Sales Enterprise On-Site, но вчера получили лицензии Service Ent.

Где взять этот пакет для скачивания, чтобы ITSM заработал? Поддержка отправляет сюда.

Нравится

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

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

Александр, спасибо за подсказку.

Связался с менеджером в Creatio, они не могут понять что мне нужно, лицензии у нас есть, всё должно быть нормально. Написал в тех поддержку, они не берутся поддерживать devlabs, отправляют сюда, в Community.

Подскажите пожалуйста, что мне конкретно спрашивать у Менеджера или у тех поддержки? Они не понимают.

Пакет для установки Service Enterprise? Какой-то модуль? Или как им объяснить?

У нас On-site, версия 7.13

Сначала убедитесь, что у Вас вообще функциональность Service Enterprise есть. Появились ли новые рабочее место и разделы?

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

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

Каким образом использовать функционал сервисных инженеров по сервису? 

В курсах указано:

1) Создать сервис и указать сервисных инженеров по уровню поддержки

2) В обращении указать сервис и уровень поддержки (по умолчанию указан 1 уровень), после чего в полях группа ответственных и ответственный должны быть доступны выбранные группы/ответственные. Но такого не происходит. Доступны все группы и все пользователи.

Нравится

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

Константин Марков,

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

А стрелка вниз в этом поле ещё работает? Кажется, ею можно было вызвать отфильтрованный список

 

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

Константин Марков,

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

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

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

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

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

Нравится

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

Добрый день.

Если хотите сравнивать значения до и после, то есть 2 варианта.

1. Запускать процесс не по сигналу, а из клиентских скриптов, например, из карточки редактирования обращения.

2. Реализовать данную логику через событийные процессы схемы таблицы на серверной стороне.

И в одном, и в другом случае есть возможность сравнить значение до изменения и после.

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

Добрый день.

Если хотите сравнивать значения до и после, то есть 2 варианта.

1. Запускать процесс не по сигналу, а из клиентских скриптов, например, из карточки редактирования обращения.

2. Реализовать данную логику через событийные процессы схемы таблицы на серверной стороне.

И в одном, и в другом случае есть возможность сравнить значение до изменения и после.

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

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

Добрый день!

Возник небольшой вопрос по настройке global search.  Файл onsite-custom-onboard отредактировал, докер контейнеры создал. Но при этом все контейнеры имею нулевой адрес. С чем это связано?

Заранее благодарю за помощь!

Нравится

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

Добрый день, Роман!

По Вашему вопросу о указании адреса в настройках: 
Если все эти компоненты поднимаются в контейнере, т.е. run_mysql, run_elasticsearch и run_rabbitmq равно 1, то адреса необходимо оставить такие же, как в примере.

Также см. тему о настройке поиска.

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

Добрый день!

Подскажите, как в системе Service Enterpise правильно настроить календарь 24x7 в справочнике Календари.

Если указывать рабочее время с 0:00 до 23:59 то при подсчёте, например, кол-ва минут

между датами регистрации и планового решения обращения с учетом  календаря 24x7, теряются минуты.

Для рас чета используется функция  GetWorkingTimeSpan из схемы TermCalculatorActions.

Пример:

Дата создания: 2019-10-01 12:21:54.0000000

Дата планового решения: 2019-10-03 12:21:39.0000000

Срок решения: 2 календарных дня.

sql datediff: 2880 минут

расчёт с учетом календаря: 2878

 

Нравится

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

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

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

Вы отметили, что работаете в версии 7.12, а на текущий момент актуальна версия 7.14.4. Поэтому попробуйте развернуть тестовое приложение прямо с сайта terrasoft и посмотреть в его конфигурации не вносились ли изменения/исправления в используемую Вами функцию. Возможно, что описываемая проблема уже решена в более поздних версиях.

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

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

Вы отметили, что работаете в версии 7.12, а на текущий момент актуальна версия 7.14.4. Поэтому попробуйте развернуть тестовое приложение прямо с сайта terrasoft и посмотреть в его конфигурации не вносились ли изменения/исправления в используемую Вами функцию. Возможно, что описываемая проблема уже решена в более поздних версиях.

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

Добрый день, 

Подскажите, возможно прикрепить email работающий по протоколу РОР3?

Если нет, то подскажите какие возможны решения.

Нравится

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

Добрый день!

POP3 — старый протокол, от поддержки которого было принято решение отказаться. На данный в базовой версии bpm'online его нельзя использовать для интеграции с почтой. POP3 был так же удален из поддержки из-за того, что создавал уязвимые места в безопасности системы. Функционал с данной интеграцией был полностью удален из системы. 

Если он Вам необходим Вы можете доработать данный функционал в рамках проекта.

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

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

Несколько раз встречали такое поведение системы, что после 13 часов (в 13:02, 13:07 и т. п.) останавливаются все процессы в системе (завершаются без ошибок). Следующие по расписанию процессы не стартуют, на триггеры не реагируют. На следующий день в 8:00 всё начинает работать как положено. С чем может быть связано такое поведение?

 

Нравится

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

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

Посмотрите в логах сервера, что происходит в это время. Также по поведению конкретных процессов узнать больше может помочь трассировка. Может, ещё какие-то ежедневные регламентные работы, настроенные по таймеру на серверах, где запущены IIS, БД или Redis. Таймер может быть и средствами Windows, и встроенный в MS SQL.

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

Добрый день.

На главной странице портала, есть грид с обращениями.

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

Как это можно реализовать?

Нравится

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

Главная страница портала — по сути, та же страница-панель итогов. Самодельные виджеты в неё должны добавляться аналогичным образом. Только нужно учитывать ограничения прав на все объекты для портальных пользователей, если доступ не разрешён специально.

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

Добрый день

Есть в системе деталь, которая отображает запросы пользователей к сервису. Один пользователь может обращаться много раз. На каждый запрос формируется запись с ID пользователя, датой и типом запроса.

Как получить график количество уникальных пользователей за текущий квартал в группировке по датам. На SQL легко и просто.

SELECT
CAST(DATEADD(HH,3,EPMRequestDate) as date) as [Дата], --дата запроса с учетом часового пояса
COUNT(DISTINCT EPMAuthDataEnergyId) as [Уникальные пользователи],
COUNT(Id) as [Посещения]
FROM EPMAuthDataStatisticEntity
WHERE
EPMAuthDataEnergyId!='9bb71e40-09b4-4352-ba5a-0f55b486f8f0' --Исключение ИД
and EPMTypeRequest = 1 --тип запроса
and EPMRequestDate between DATEADD(M,-3, GETDATE()) and GETDATE() --Текущий квартал
GROUP BY CAST(DATEADD(HH,3,EPMRequestDate) as date)
ORDER BY CAST(DATEADD(HH,3,EPMRequestDate) as date)

Начинаю делать в BPM и получаю только количество посещений в день

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

Нравится

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

Нужно создать view в БД, на основе view создать объект. И уже делать график основываясь на данных виртуального объекта (view)

Поищите по форуму, как создаются объекты на основе вьюхи, вот например в этой теме есть инфа.

https://community.terrasoft.ru/questions/sozdanie-obekta-na-osnove-db-view

Нужно создать view в БД, на основе view создать объект. И уже делать график основываясь на данных виртуального объекта (view)

Поищите по форуму, как создаются объекты на основе вьюхи, вот например в этой теме есть инфа.

https://community.terrasoft.ru/questions/sozdanie-obekta-na-osnove-db-view

Благодарю за помощь. Создал View, объект в системе по ней и построил требуемые графики. Единственная сложность возникла при создании Объекта. Система требовала обязательно указать ключевое поле. Пришлось задать его во View

Да, для корректной работы view должна быть максимально похожа по набору стандартных полей на обычные объекты. Ещё поле для отображения указать будет не лишним.

Если не знаете, что вывести в качестве уникального Id, можно взять MD5-хэш от остальных полей.

 

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