Добрый день!

 

Подскажите как правильно организовать распределение входящих Лидов между операторами если каждый оператор привязан к своему региону и набору каналов(e-mail, звонки, лэндинги)?  Возникла идея организовать распределение через очереди, но в стандартной реализации Тип очереди "Лид" отсутствует. На сколько реализуемо? Какие есть альтернативные варианты? 

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

 

 

Нравится

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

Максим, попробуйте настраивать не в справочнике, а отсюда:

Откроется окно с аналогом старого интерфейса:

Максим, добавьте Лид в справочнике [Объекты очередей] и он появится в списке.

Сидоров Александр Валерьевич,

Так уже пробовал, не работает. Обратил еще внимание, что в данном справочнике есть поле с UID объекта. Оно не доступно для редактирования, но даже если SQL-скриптом в него записать UID таблицы "Лид", то  все равно выбрать его не получается.

Максим Румский,

а у вас какая версия? на 7.17.0 у меня другой интерфейс добавления записи для этого справочника и там UID нет. Просто добавляешь и работает.

 

Сидоров Александр Валерьевич,

 

версия 7.17.1 с новым интерфейсом раздела "Конфигурация". Видимо при переезде на новый интерфейс что-то потерялось. Написал в тех.поддержку.

 

Просьба еще проверить какое у Вас значение указано в  свойствах справочника "Страница реестра":

Максим, попробуйте настраивать не в справочнике, а отсюда:

Откроется окно с аналогом старого интерфейса:

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

Спасибо! Так все работает.

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

Добрый день!

 

Коллеги, помогите найти решение:

 

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

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

Спасибо!

Нравится

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

Добрый вечер.

Можно попробовать реализовать через бизнес-процесс с помощью элементов 'Автогенерируемая страница' и 'Преднастроенная страница'.

Для последовательного заполнения можно использовать несколько элементов подряд.

Подробнее о работе с этими элементами можно почитать Элемент процесса [Автогенерируемая страница] и Элемент процесса [Преднастроенная страница].

Добрый вечер.

Можно попробовать реализовать через бизнес-процесс с помощью элементов 'Автогенерируемая страница' и 'Преднастроенная страница'.

Для последовательного заполнения можно использовать несколько элементов подряд.

Подробнее о работе с этими элементами можно почитать Элемент процесса [Автогенерируемая страница] и Элемент процесса [Преднастроенная страница].

Можете использовать Terrasoft.utils.inputBox, в нем поместить Ваши поля

Модальное окно может отображать карточку, в коде карточке вы можете настроить любое количество интересующих вас элементов.

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

Добрый день. Сейчас через скрипт рекордер записываю действия и прогоняю по этому сценарию нагрузку. Вопрос у заказчика в другом, почему к примеру, при нагрузке в 600 пользователей не создаётся 600 тестовых обращений хотя по скрипту записано от и до. Авторизация в JMeter работает.

Нравится

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

Думаю, заказчику лучше обратиться с вопросом к тому, кто разрабатывал сценарий. Без подробностей сложно сказать, что именно он делает в системе. Например, если каждый раз сохранять запись о новом обращении с одним и тем же Id (а при нормальной работе он уже есть в запросе к /0/DataService/json/SyncReply/InsertQuery), то не создастся много записей, а будут ошибки.

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

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

 

Логика Terrasoft.controls.mixins.Bindable.callModelMethod вызывает привязанный метод ExperimentVisibility к элементу страницы из раздела diff в параметре bindTo

 

{
  "operation": "merge",
  "name": "ConsumptionDetailcc99e44c",
  "values": {
     "visible": {
        "bindTo": "ExperimentVisibility"
     }
  }
},

Метод ExperimentVisibility проверяет установлено ли значение в схеме объекта страницы. На момент когда Bindable.callModelMethod вызывается, данные схемы объекта страницы еще не загружены логикой. Значение которое проверяется методом = undefined. 

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

 

По мере загрузки страницы, мое значение в данных схемы появляется, кнопка на странице генерируется раньше этого и поэтому она не видима.

Нравится

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

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

А когда нужно изменить видимость, в своей логике вызывать функцию, которая меняет значение атрибута. Пример можно увидеть в схеме SocialMessageHistoryItemPageV2, где:

"CommentsVisible": {
	"dataValueType": this.Terrasoft.DataValueType.BOOLEAN,
	"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
	"value": false
},
...
/**
 * Toggle comments block visibility and load first portion of comments if it is visible and empty.
 * @protected
 */
toggleCommentsVisibility: function() {
	if (this.get("CommentCount") < 1) {
		return;
	}
	var newVisibilityState = !this.get("CommentsVisible");
	this.set("CommentsVisible", newVisibilityState);
	if (newVisibilityState && this.get("ShownCommentMessagesCount") === 0) {
		this.onLoadNextComment();
	}
},
...
{
	"operation": "insert",
	"name": "ESNCommentsContainer",
	"parentName": "HistoryV2MessageFooterContainer",
	"propertyName": "items",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.CONTAINER,
		"wrapClass": ["esn-comments-container"],
		"visible": {"bindTo": "CommentsVisible"},
		"items": []
	},
	"index": 1
},

 

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

В Академии есть описание как скачать шаблон для импорта объектов из Конфигурации. В предыдущих версиях часто это использовала. 

Но в версии 7,17,0 - не могу определить где находится кнопка Настройки. 

Пример на скрине

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

Нравится

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

На версии 7.17.0 можно попробовать пройти по адресу yoursite/0/ViewPage.aspx?Id=c2af7f54-07df-4670-9c2b-af2497d3231f

 

На версии 7.17.1 прежде чем эту ссылку использовать надо реанимировать старый конфигуратор

 

Спасибо! Вот только клиенту это уже не объяснишь....

А клиент в старой конфигурации умел это делать сам? в этом случае дайте ему ссылку, а дальше все тоже самое осталось.

Екатерина, что Вы имеете в виду под шаблоном для импорта объектов из Конфигурации? Речь о выгрузке схем или данных в Excel? Приведите ссылку или скриншот, как раньше было.

вот тут ссылка на окошко старого интерфейса /0/ViewPage.aspx?Id=c2af7f54-07df-4670-9c2b-af2497d3231f

добраться из старой конфигурации можно так:

 

Было бы не плохо вставить эту кнопку "Скачать шаблон"  в новый мастер импорта, который по адресу /0/Nui/ViewModule.aspx?vm=FileImportWizard#FileImportModule/FileImportStartPage/f0a9cd02-5a19-4a4b-9e6e-7505bd509247

Спасибо, теперь понял, о чём Вы. В новой конфигурации нет кнопки «настройки», поскольку она была не частью старой конфигурации, а частью старого 5.Х-интерфейса вообще, была видима в любом разделе. А в 7.17 старый интерфейс окончательно убрали, а с ней и кнопку настройки, и окно старого импорта, и кнопку скачивания в нём. В новом интерфейсе свой экран настроек, «Дизайнер системы».

В академию по поводу неактуального абзаца сообщил.

Сложность в использовании функциональности импорта из Excel о том, что нет возможности скачать шаблон файла для загрузки данных объекта была зарегистрирована ещё при запуске нового UI импорта из Excel, но пока ничего не планировали. Приоритетность реализации зависит от количества запросов  по этой теме.

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

Как обходной вариант, можно просто вывести в реестре раздела нужные колонки и скачать файл по действию «Экспорт в Excel», а затем его открыть и оставить только «шапку».

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

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

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

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

Не, идея не в этом. Шаблон выгружается согласно доработанной объектное модели.(он не статичен) Т.о. добавляем в объект все нужные поля и справочники, выгружаем шаблон и отдаем для наполнения. А так как у всех модели данных разные, то и выгрузка шаблонов - регулярна.

В таком случае, можно опять выгрузить по действию «Экспорт в Excel».

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

Да, но для этого нужно опять добавлять колонки в реестр.

А зачем Вы их удаляли?

С выгрузкой по действию «Экспорт в Excel» тоже есть свои нюансы. Так например списочное представление позволяет вывести только 24 колонки. Можно конечно в плиточном вывести все необходимые колонки. Тогда Экспорт в Excel выгрузит все что надо. Но Выгрузка шаблона позволяла выгрузить сразу всю объектную модель данных без настройки реестра записей, да еще и с указанием обязательности полей

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

а зачем мне в реестре весь список полей из объекта? Алексей в сообщении выше очень точно описал суть проблемы)

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

Или самостоятельно сделать БП с логикой, взятой из DownloadTemplateMenuItemClickScriptTaskExecute схемы ImportSettingsPage и адаптированной под сохранение файла где-то в базе.

Или написать веб-сервис, куда параметром передают название схемы, а возвращают файл.

Нынешняя логика этой кнопки такая:

		public virtual bool DownloadTemplateMenuItemClickScriptTaskExecute(ProcessExecutingContext context) {
			Page.BaseMessagePanel.Clear();
			if (string.IsNullOrEmpty(SchemaName)) {
				Page.BaseMessagePanel.AddMessage(WarrningMessage, UnableSelectObjectMessage, MessageType.Warning, true);
				return true;
			}
			Page.Response.ClearHeaders();
			Page.Response.ClearContent();
			string fileName = SchemaName;
			var instance = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
			if (instance != null) {
				fileName = instance.Caption.ToString();
			}
			Page.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
			if (HttpContext.Current.Request.Browser.Browser == "IE") {
				string fileNameEnc = HttpUtility.UrlPathEncode(fileName);
				Page.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileNameEnc + ".xlsx\"");
			} else {
				Page.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ".xlsx");
			}
			List<double> columnWidthsList = new List<double>();
			using (MemoryStream stream = new MemoryStream()) {
				using(SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream, SpreadsheetDocumentType.Workbook)) {
					// Add a WorkbookPart to the document.
					var workbookpart = spreadsheetDocument.AddWorkbookPart();
					workbookpart.Workbook = new OpenXmlSpreadsheet.Workbook();
 
					// Add a WorksheetPart to the WorkbookPart.
					var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
					var workbookStylesPart = workbookpart.AddNewPart<WorkbookStylesPart>(); 
					worksheetPart.Worksheet = new OpenXmlSpreadsheet.Worksheet(new OpenXmlSpreadsheet.SheetData());
 
					// Add Sheets to the Workbook.
					OpenXmlSpreadsheet.Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.AppendChild<OpenXmlSpreadsheet.Sheets>(new OpenXmlSpreadsheet.Sheets());
 
					// Append a new worksheet and associate it with the workbook.
					string relationshipId = spreadsheetDocument.WorkbookPart.GetIdOfPart(worksheetPart);
					string sheetName = fileName;
					OpenXmlSpreadsheet.Sheet sheet = new OpenXmlSpreadsheet.Sheet() {
						Id = relationshipId,
						SheetId = 1, 
						Name = sheetName
					};
					sheets.Append(sheet);
 
					OpenXmlSpreadsheet.Worksheet worksheet = new OpenXmlSpreadsheet.Worksheet();
					OpenXmlSpreadsheet.SheetData sheetData = new OpenXmlSpreadsheet.SheetData();
					OpenXmlSpreadsheet.Row row = new OpenXmlSpreadsheet.Row();
 
					OpenXmlSpreadsheet.Cell currentCell;
					int columnCount = 0;
					var entitySchema = UserConnection.EntitySchemaManager.GetInstanceByName(SchemaName);
					foreach (EntitySchemaColumn column in entitySchema.Columns) {
						if (!column.DefValue.IsSystemValue &&
								(column.UsageType != EntitySchemaColumnUsageType.Advanced) && 
								(column.UsageType != EntitySchemaColumnUsageType.None) &&
								!column.Name.Equals("ProcessListeners") &&
								!(column.DataValueType is ImageDataValueType) &&
								!(column.DataValueType is ImageLookupDataValueType)) {
							currentCell = new OpenXmlSpreadsheet.Cell();
							currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
							if (column.RequirementType == EntitySchemaColumnRequirementType.ApplicationLevel || column.RequirementType == EntitySchemaColumnRequirementType.DBLevel) {
								currentCell.StyleIndex = 3;
							} else {
								currentCell.StyleIndex = 4;
							}
							columnWidthsList.Add(CalculateWidth(column.Caption.Value));
							currentCell.CellValue = new OpenXmlSpreadsheet.CellValue(column.Caption.Value);
							row.AppendChild(currentCell);
						}
					}
					sheetData.Append(row);
					row = new OpenXmlSpreadsheet.Row();
					for (int i=0;i<columnWidthsList.Count; i++) {
						currentCell = new OpenXmlSpreadsheet.Cell();
						currentCell.DataType =  OpenXmlSpreadsheet.CellValues.String;
						currentCell.StyleIndex = 5;
						row.AppendChild(currentCell);
					}
					sheetData.Append(row);
					//Adding columns and specifeing width
					OpenXmlSpreadsheet.Columns columns = new OpenXmlSpreadsheet.Columns();
					uint j = 1;
					foreach (var w in columnWidthsList) {
						columns.Append(CreateColumnData(j, w));
						j++;
					}
					worksheet.Append(columns);
					//--
					worksheet.Append(sheetData);
 
					workbookStylesPart.Stylesheet = CreateStyleSheet();
					worksheetPart.Worksheet = worksheet;
					spreadsheetDocument.Close();
 
					stream.Seek(0, SeekOrigin.Begin);
					byte[] dataArray = stream.ToArray();
 
					Page.Response.BinaryWrite(dataArray);
					Page.Response.End();
				}
			}
			return true;
		}

 

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

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

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

Нравится

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

Игорь, Вы можете включить и настроить права доступа по записям в объекте «Справочник» (Lookup).  Также, чтобы не только администраторы, но и пользователи, нужно выдать им права на операцию «Доступ к разделу "Справочники"» (CanManageLookups).

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

Я сделал булев метод в methods:{ }, тот вычитывает атрибут entity и возвращает результат - равенство текста из свойства объекта моей подстроке.

Два метода: ExperimentVisible, ExperimentNonVisible, - проверяют результат что отдает первый метод и также возвращают булев результат.

В разделе diff одной новой и одной существующей кнопке в схеме наследования , на свойство visible были привязаны эти методы.

 

Две кнопки были помещены в верхний контейнер страницы, там где есть зеленая базовая кнопка "Сохранить".

 

Во время загрузки страницы получаю всегда разный результат моих методов. Так как кнопки расположены в верхнем контейнере, привязанный к видимости кнопки метод проверяется прежде всего. Иногда в схему, доступную через this , Креатио загружает атрибут entity для проверки, иногда еще нет. Зафиксировал что иногда он еще и кэширует состояние схемы (тогда в this присутствуют данные не корректные а соответствуют схеме прежде открытой в браузере страницы).

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

 

Я пытался сделать более просто  - вместо чтения атрибута из this в моем методе написал загрузку объекта через EntitySchemaQuery и проверял мое свойство. Данные получались, но не были доступны через this страницы, они остались в scope запроса ESQ.

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

 

Нравится

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

А у Вас дело случайно не в том же, что и в недавней теме? Там в одних случаях работает логика для совмещённого режима, в других — для отдельной карточки. Если не в этом, то по изложению не очень понятно, что происходит, нужно производить в браузере отладку.

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

Добрый день!

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

Спасибо!

Нравится

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

1. Дизайнер системы - Библиотека процессов - Выбрать БП - Свойства - Включить "Включена трассировка"

2. Дизайнер системы -Журнал процессов - Выбрать БП - Открыть - На детали "Элементы процесса" добавить колонку "Создал" - На выбранном шаге нажать кнопку "Показать данные трассировки"

1. Дизайнер системы - Библиотека процессов - Выбрать БП - Свойства - Включить "Включена трассировка"

2. Дизайнер системы -Журнал процессов - Выбрать БП - Открыть - На детали "Элементы процесса" добавить колонку "Создал" - На выбранном шаге нажать кнопку "Показать данные трассировки"

Спасибо, Дамиан! Действительно, оказалось все проще некуда.

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

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

Появилась необходимость выкачивать отчет по лиду в формате Excel по определенному шаблону (скриншот 1), решил воспользоваться дополнением https://marketplace.terrasoft.ru/app/advanced-excel-reports-creatio

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

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

Нравится

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

Илья, 

 

дополнение https://marketplace.terrasoft.ru/app/advanced-excel-reports-creatio не предоставляет возможности настраивать отчеты формата выше. Скорее будет более полезно для формирования выгрузок данных.

 

Подскажите, рассматривали ли возможность настройки отчета выше базовыми средствами в формате docx?

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

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

 

Зарегистрировал онлайн стенд через https://www.terrasoft.ru/trial/creatio

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

 

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

Нравится

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

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



Для использования функционала звонков в 14-дневной триал версии необходимо выполнить настройку интеграции с одной из телефоний из данного списка - https://academy.terrasoft.ru/documents/sales-enterprise/7-10/sravnenie-vozmozhnostey-integracii-s-razlichnymi-ats.



С уважением, Елена.

 

support,

 

А раньше внутрение звонки работали в триале по умолчанию при создании. Webitel все так же бесплатна или теперь нужны деньги и пляски с бубном? Было бы не плохо узнать официальный ответ в публичном чате

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

 

Ранее в 14-дневных триал версиях, по умолчанию, был представлен продукт Webitel Collaboration, который давал возможность осуществлять внутренние звонки.

В последних релизах эту функциональность убрали, так как развитие Webitel Collaboration приостановлено.

 

Поэтому для использования функциональности телефонии, нашей рекомендацией является заказывать триал полного продукта Webitel, либо же выбирать другой коннектор к системе телефонии из предустановленных или из решений на Маркетплейс.

Tseberko Kristina,

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

Александр Тыра,

Да, к сожалению, уже не входят.

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