Добрый день!



Существует следующая необходимость - изменить в уведомлениях по активностям ФИО связанного контакта на номер обращения (потому что все равно на то с кем общаться, главное знать по какому обращению надо сделать задачу и быстро перейти в это обращение). Можно ли вообще осуществить такое изменение в версии 7.13 и выше? Если до, то как это осуществить? Может кто делал что-то подобное?Изображение удалено.

Нравится

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

Можно попробовать в схеме ActivityNotificationProvider переделать функцию GetBody и остальные, где формируется список колонок.

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

Добрый день.

Возник вопрос, как обозначать обращения в зависимости от их категории.

Сейчас существует по умолчанию 2 категории - Инцидент и Запрос на обслуживание.

Сам вопрос - как настроить нумерацию вида SD000** / IM000**** / C000**** в зависимости от их выбранной категории?

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

 

P.S. Еще один вопрос как создать отдельную сущность Инцидент, по типу Обращения?

Возможно ли скопировать базовый пакет Case и дальше уже его редактировать?

 

Нравится

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

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

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

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

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

Посмотрите это приложение, там реализована похожая задача

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

Всем добрый день. Версия 7.12.

Небольшой эксперимент с деталями. Пытаюсь понять, можно ли добавлять на деталь свои данные, не относящиеся к объектам системы.

Переопределил в схеме детали (схема обычная, наследуется от BaseGridDetailV2) стандартный onGridDataLoaded следующим образом:

onGridDataLoaded: function(response) {
				var newCollection = Ext.create("Terrasoft.Collection");
 
				var startItem = response.collection.collection.items[0];
				startItem.values.Address = "zzzz";
				newCollection.add("zzz", startItem);
 
				var nextItem = startItem;
				nextItem.values.Address = "yyy";
				newCollection.add("yyy", nextItem);
 
				var preloadRowKeys = this.get("PreloadedGridDataRecords") || [];
				var gridData = this.getGridData();
				var preloadGridData = gridData.filter(function(item, key) {
					return preloadRowKeys.indexOf(key) >= 0;
				});
				var isClearGridData = this.get("IsClearGridData");
				if (isClearGridData) {
					if (!gridData.isEmpty() && (response.success || preloadGridData.isEmpty())) {
						gridData.clear();
					}
					this.set("IsClearGridData", false);
				}
				var performanceManagerLabel = this.sandbox.id + "_onGridDataLoaded";
				performanceManager.start(performanceManagerLabel);
				this.afterLoadGridData();
				const isContinueExecution = this.Terrasoft.findValueByPath(response, "errorInfo.response.timedout") &&
						this.getIsFeatureEnabled("UseQueryOptimize") && this.isNotEmpty(this.$CurrentFolder);
				if (!response.success && !isContinueExecution) {
					performanceManager.stop(performanceManagerLabel);
					return;
				}
 
				this.initCanLoadMoreData(newCollection);
				this.prepareResponseCollection(newCollection);
				this.initIsGridEmpty(newCollection);
 
				newCollection = this.clearLoadedRecords(newCollection);
				newCollection.eachKey(function(key, item) {
					gridData.insert(0, key, item);
				});
 
				this.addItemsToGridData(newCollection);
				this.addSelectedRecords(newCollection);
				this._setRecordsCount(newCollection);
				if (!preloadGridData.isEmpty()) {
					this.addItemsToGridData(preloadGridData, this.getAddRowsOptions());
					this.addSelectedRecords(preloadGridData);
				}
				this.onDataChanged();
				performanceManager.stop(performanceManagerLabel);
			},

 

Т.е. создаю собственную коллекцию, в которую два раза подряд добавляю первый элемент возвращаемой по запросу к объекту ContactAddress коллекции response.collection.collection.items[0], в котором также меняю значение колонки Address. В итоге на детали отображается две записи с одинаковым id, при выводе коллекции в консоль тоже всё верно, но на самой детали Address остался без изменений.

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

Как правильно изменить элемента коллекции? Либо, второй вариант - как добавить в Terrasoft.Collection свой новый элемент (не переопределять результаты запроса, а создать собственный)?

Нравится

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

Пример добавления в Terrasoft.Collection  элементов

var results = this.Ext.create("Terrasoft.Collection");
this.Terrasoft.each(decodedAllowedResults, function(result) {
	var itemId = result.resultId;
	results.add(itemId, {
		id: itemId,
		value: itemId,
		displayValue: result.caption,
	});
}, this);

 

Пример добавления в Terrasoft.Collection  элементов

var results = this.Ext.create("Terrasoft.Collection");
this.Terrasoft.each(decodedAllowedResults, function(result) {
	var itemId = result.resultId;
	results.add(itemId, {
		id: itemId,
		value: itemId,
		displayValue: result.caption,
	});
}, this);

 

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

Добрый день! 

Подскажите, пожалуйста, как преобразовать дату в текстовую строку так, чтобы не выводилось время? Я использую оператор .ToString() и получается 02.05.2019 0:00:00. Есть ли возможность получить дату без времени?

Нравится

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

В параметрах метода ToString укажите нужный формат даты.

Подробнее посмотрите в статье 1 и статье 2.

В параметрах метода ToString укажите нужный формат даты.

Подробнее посмотрите в статье 1 и статье 2.

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

Спасибо огромное! Получилось

Немировская Виктория,

Рада, что смогла помочь wink

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

Добрый день!

Создал свой WS с методом GET. Он не требует авторизации в BPM. По прямой ссылке он прекрасно выдает результат в браузере.

При попытке использования его в БП появляется сообщение: 

Ошибка HTTP 401.1 — Unauthorized

Я верно понимаю, что причина кроется именно в настройке самой BPM  для работы с WS, а не в настройке конкретного БП?

Нравится

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

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

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

Григорий Чех,

Верно ли понимаю, что можно в БП первым действием блок для работы с WS вставить, 

описать WS AuthService.svc/Login в справочнике WS и на первом шаге к нему обращаться так:

https://bpm/ServiceModel/AuthService.svc/Login

Тем самым решая проблему выполнения последующих блоков в рамках данного БП.

Или нужно c# кодом описывать логику дополнительно?

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

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

Добрый день!

Сделал тестовый WS, который возвращает:

{"TestResult":[{"comment":"Programer","name":"Alex"},{"comment":"Manager","name":"Bob"}]}

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

В блоке с кодом C# первой строкой пишу:

var entities = Get>("WebService1.UsrTestResult_Out");

При выполнении данной строки в entities данные не появляются.

В чем могут быть проблемы?

 

Нравится

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

ICompositeObject  это для случяая когда вы парсите коллекцию полученную из элемента чтение данных в БП

Вам нужно просто выполнить парсинг JSON на C# примеров в интернете как это сделать масса

ICompositeObject  это для случяая когда вы парсите коллекцию полученную из элемента чтение данных в БП

Вам нужно просто выполнить парсинг JSON на C# примеров в интернете как это сделать масса

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

Коллеги, а можно ли в задании-сценарии создавать свой класс? И можно ли в принципе свободно в нем писать свой код или есть большое число ограничений?  Ссылку по описанию данного блока на академии смотрел. Описание так весьма краткое.

Например пробую использовать:

public class SomeClass{

            public string id;

            public string login;

            public string name;

};

При попытке его использования выскакивает ошибка при публикации.

Александр Кулиш,

Свой класс вы можете создать добавив в конфигурации элемент - Исходный код, затем его можно использовать в задании сценарии!

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

Добрый день!

В чем может быть проблема?

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

Порядок действий:

Система в режиме разработки в БД

Создаю WS в своем пакете - WS прекрасно работает.

Перевожу систему в режим разработки в файловой системе

Жму Компилировать Все.

Система ругается на WS:

При проверке схемы произошли ошибки: "System.IO.FileNotFoundException: Зависимость пакета не найдена. Путь поиска:

Удаляю WS. Компиляция проходит.

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

Это классический случай, который решается мелкой донастройкой или тут что-то более серьезное может быть?

Нравится

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

Попробуйте после перевода BPM в разработку в файловой системе сделать выгрузку в ФС, а затем скомпилируйте конфигурацию

Попробуйте после перевода BPM в разработку в файловой системе сделать выгрузку в ФС, а затем скомпилируйте конфигурацию

Григорий Чех,

Помогло. Спасибо!

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

Всем доброго дня. Версия 7.12.

Существует ли способ отписки от сообщения? Обычно в init идёт подписка на sandbox примерно в таком виде:

init: function(callback, scope) {
	this.callParent(arguments);
 
	this.sandbox.subscribe("startMessageEvent", function(arg) {
		console.log(arg)
	}, this, ["messageId"]);
},

Можно ли отписаться от sandbox? Конкретная задача - изменить обработчик, т.е. то, что внутри функции function(arg){}. Предполагаю, что для этого нужно сначала отписаться от сообщения, после чего подписаться на него заново.

Нравится

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

Проще использовать базовый функционал а именно unsubscribePtp примерно так:

this.sandbox.unsubscribePtp("startMessageEvent");

Попробуйте полностью переопределить метод init.

Проще использовать базовый функционал а именно unsubscribePtp примерно так:

this.sandbox.unsubscribePtp("startMessageEvent");
Показать все комментарии

Всем доброго дня. Версия 7.12.

При открытии дизайнера страницы возникает ошибка.

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

Попытка генерации исходного кода и компиляции всей сборки не помогла. В чём может быть причина ошибки? 

Нравится

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

При открытии любой страницы или только страницы (страниц) какогото конкретного раздела? Если это какой то конкретный раздел какие изменения в него вносились?

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

При открытии любой страницы или только страницы (страниц) какогото конкретного раздела? Если это какой то конкретный раздел какие изменения в него вносились?

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

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

Добрый день!

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

Как можно вынести свое поле в блок расширенные настройки?

вариант реализации через "добавить элемент" не хотелось бы рассматривать.

 

 

Нравится

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

Добрый день!

При открытии страницы на добавление новой записи любые поля можно предзаполнять (https://monosnap.com/file/tPSQ0trcaysvRU4HTCUngC2G16hyXF). При открытии страницы на редактирование такое сделать нельзя, да и не нужно это делать (перезатирать существующие значения).

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

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

Опочина Любовь,

"При этом создается активность" - тогда предлагаю во внутреннем бизнес процессе Активности добавить логику по заполнению полей при создании активности

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

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

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

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