День добрый!

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

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

 

Собственно, вопросы следующие:

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

2) если подобное приложение можно разместить на маркетплейсе, то сможет ли пользователь облака попросить саппорт зарегистрировать сторонний анонимный веб сервис или это возможно только при развертывании на мощностях клиента?

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

 

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

 

Версия 7.16.0.4461 (в списке версий не нашел)

Нравится

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

1) Да, мы выкладываем. Например, https://marketplace.terrasoft.ru/app/konnektor-k-onlayn-chatu-jivosite

2) Да, сможет. Вы в личном кабинете маркетплейса положите файлик с веб сервисом и инструкцией для саппорта.

3) Нет, вариантов других нет из-за авторизации

1) Да, мы выкладываем. Например, https://marketplace.terrasoft.ru/app/konnektor-k-onlayn-chatu-jivosite

2) Да, сможет. Вы в личном кабинете маркетплейса положите файлик с веб сервисом и инструкцией для саппорта.

3) Нет, вариантов других нет из-за авторизации

Спасибо за оперативный ответ!

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

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

Кейс:

1.Настроена РФС

2. Присоединяемся к процессу для отладки.

3. вносим правки в исходный код.

4. Нажимаем build и получаем ошибку получения доступа к компилируемому файлу в Autogenerated/Src.



Подскажите можно ли это исправить/настроить или это нормальное поведение?



сейчас решаю Остановкой отладки -> Build -> Присоединение к процессу -> Buil (Т.к. точки останова отрабатывают только после компиляции во время отладки )

 

Нравится

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

Доброго времени суток! Дайте полный доступ для IIS_IUSRS для всех файлов и папок корневой папки где расположено приложение, по идее должно помочь - https://prnt.sc/sdebqs

Доброго времени суток! Дайте полный доступ для IIS_IUSRS для всех файлов и папок корневой папки где расположено приложение, по идее должно помочь - https://prnt.sc/sdebqs

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

Кто может сталкивался.

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

Кто сталкивался, поделитесь. Заранее все спасибо.

Нравится

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

Добрый день.

 

Если без разработки, то можно комментарий указать либо в 'Подписи числового показателя' в настройке графика (и он будет отображаться при наведении курсора), либо в заголовке самого графика. Например:

 

 

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

Алла, спасибо. Это всё сделано. Ноклиент как раз хочет, чтобы было краткое описание самого дэшборда. Т.е. типа всплывающего окна с многострочным текстом.

Милова Марина,

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

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

к сожалению, клиент не хочет ждать новую версию, а хочет сейчас

Марина, ещё как вариант, можно между графиками добавить блоки веб-страниц, где и разместить нужный текст с форматированием. Но хранить их с доступом по HTTP или HTTPS где-то нужно отдельно. Если именно всплывающим окном, боюсь, без программирования не обойтись.

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

Александр, дык есть программисты. Как раз и спрашиваю для программистов. У Вас есть принтскрин, как хоть это выглядит и возможна ли такая реализация в Итогах? для дэшбордов?

 

Я имею в виду стандартный блок итогов «Веб-страница», но так текст будет только в размере её фрейма и на всю страницу не получится. Настраивается пользовательскими средствами.

 

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

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

Как обновить "Панель действий" не перезагружая страницу при создании активности.

Пример ситуации:

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

Ну или как часто бывает у меня - Создается продажа из карточки, процесс начался, и база очень долго создает активность (да, на это бывает уходит минуты две, но это уже вопрос по работе с СУБД Oracle), но пользователь уже зашел в карточку, и когда активность все же создалась то на панели действий ее нет так как она создалась когда у кейса выбрана стадия и панель действий загрузилась уже

Нравится

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

Пример ситуации:

Менеджер сидит и на втором мониторе смотрит фильм, 

Отличное начало.laugh

 

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

 

Конкретно с панелью действий работают сообщения ReloadDashboardItems (отправляется из BaseMiniPage) и ChangeDashboardTab (из ActivityMiniPage):

/**
 * Publishes events after entity save.
 * @protected
 * @param {Function} [callback] Callback-function.
 * @param {Object} [scope] Callback execution context.
 */
publishOnSaveEvents: function(callback, scope) {
	this.sandbox.publish("ReloadDashboardItems", {
		id: this.get("Id")
	});
	this.Ext.callback(callback, scope || this);
},
/**
 * @inheritdoc BaseMiniPage#close
 * @override
 */
close: function() {
	if (this.destroyed) {
		return;
	}
	this.sandbox.publish("ChangeDashboardTab", null);
	this.callParent(arguments);
},

 

Они принимаются в BaseActionsDashboard:

/**
 * Subscribe on events of sandbox.
 * @protected
 */
subscribeSandboxEvents: function() {
	var sandbox = this.sandbox;
	sandbox.subscribe("ReloadDashboardItems", function() {
		this.onReloadDashboardItems();
	}, this);
	sandbox.subscribe("ChangeDashboardTab", function(tabName) {
		this.setActiveTab(tabName);
	}, this);
},

Далее срабатывают обработчики в этой же или дочерних схемах.

 

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

 

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

Но как это сделать из бизнес процесса?

Я создал замещение объекта "Активность", в нем добавил сообщение после создания записи. Создал событийный процесс что реагирует на это сообщение, в нем создал класс с колонкой Id (так как в подпищике смотрю эту колонку ждет)

	public class idNumberOpportunity
    {
		public Guid Id { get; set; }
    }

проверил что колонка "Продажа" не пуста

Entity.GetTypedColumnValue<Guid>("OpportunityId") != Guid.Empty

и в сценарии запустил код преобразовав сообщение в нужный вид преобразовав в Json формат (на выходе в js вышло так { "Id": "22345200-abe8-4f60-90c8-0d43c5f6c0f6"})

var userConnection = Entity.UserConnection;
var KtIdOpportunuty = new idNumberOpportunity();
KtIdOpportunuty.Id = Entity.GetTypedColumnValue<Guid>("OpportunityId");
MsgChannelUtilities.PostMessage(userConnection, "ReloadDashboardItems", JsonConvert.SerializeObject(KtIdOpportunuty));
return true;

Но видимо подписка так не срабатывает.

Что я не так делаю, подскажите?

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

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

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

следовал за инструкцией:

https://academy.terrasoft.ru/documents/technic-sdk/7-16/instrumenty-otladki-servernogo-koda

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

компиляция завершается успешно.



Версия BPM - 7.15.4.3055

Нравится

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

Добрый день.

 

Проверьте, файлы с исходным кодом могли выгрузиться в '...Terrasoft.WebApp\Terrasoft.Configuration\Src'.

 

Подробнее это обсуждалось в этом посте.

Добрый день.

 

Проверьте, файлы с исходным кодом могли выгрузиться в '...Terrasoft.WebApp\Terrasoft.Configuration\Src'.

 

Подробнее это обсуждалось в этом посте.

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

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

Нравится

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

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

 

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

 

Но, к сожалению, это не всегда возможно.

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

 

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

 

Но, к сожалению, это не всегда возможно.

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

Подскажите как сделать валидацию номера для "Средства связи"? Читал статью https://community.terrasoft.ru/questions/validacia-zapolnenia-telefona-v-detali-sredstva-svazi но this.addColumnValidator("Number", newItem.validateField, newItem); что бы в детали сделать замену валидации нужно полностью переписать то что в "BaseCommunicationViewModel" но это модуль и его нельзя замещать.

Нравится

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

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

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

 

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

Не работает именно валидация или замещение? Если второе — то по ссылке выше приводил, как делать обходным способом. По сути, переопределять все стандартные схемы, которые используются для работы со средствами связи на свои аналоги.

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

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

Там не переписывание всего текста модулей, а дополнение своим при помощи override. Но потом и замена всех упоминаний стандартного модуля на свой аналог.

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

Спасибо, получилось как описано в статье.

Сделал замещение BaseCommunicationDetail

 

define("BaseCommunicationDetail", ["KtValidBaseCommunicationViewModel"],
	function() {
		return {
			attributes: {},
			messages: {},
			methods: {},
			diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
		};
	});

и BaseCommunicationViewModel

define("KtValidBaseCommunicationViewModel", ["terrasoft", "BaseCommunicationViewModel"],
	function(Terrasoft) {
		Ext.define("Terrasoft.KtValidBaseCommunicationViewModelOverrided", {
			override: "Terrasoft.BaseCommunicationViewModel",
			/**
			 * @override
			 * ######### ######### ###### ########.
			 * @param {String} value ########### ########.
			 * @return {Boolean} true #### ###### ######## ##### ########.
			 */
 
			isPhoneNumber: function(value) {
				//Terrasoft.SysSettings.querySysSettingsItem("CommunicationPhoneRegExpValid", function(phoneRegExp) {
				//	var phonePattern = new RegExp(this.get("PhoneRegExp"));
				//	return phonePattern.test(value);
				//}, this);
				var phonePattern = /^\98(\(\d{3}\)\d{3}\-\d{2}\-\d{2})$/;
				return phonePattern.test(value);
			},
		});
	}
);

Все отлично работает если вшить регулярное выражение.

А как можно получить из системной настройки его? Получение значение в ней асинхронное и нужно сделать через callback, но не как не выходит. Помогите в реализации такого callback, пожалуйста.

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

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

Попробовал в Creatio заблокировать всех пользователей на вход, но такого функционала просто нет - можно решить БП. Уведомления тоже можно сделать БП, Закрытие активной сессии по идее тоже не проблема. 

Собственно вопрос - кто как работает и оповещает пользователей о технических работах в системе?

Нравится

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

Ну помимо предложенного способа с Бп, есть таблицы в базе данных. Можете подсоединится, вытянуть активных пользователей и уже как-то уведомить их письмом на почту, в мессенджер и т.д Сделать это можно прямо на сервере где развернут IIS простой консолькой на c#, запуск консольки делать планировщиком Windows по таймеру или триггеру

Ну помимо предложенного способа с Бп, есть таблицы в базе данных. Можете подсоединится, вытянуть активных пользователей и уже как-то уведомить их письмом на почту, в мессенджер и т.д Сделать это можно прямо на сервере где развернут IIS простой консолькой на c#, запуск консольки делать планировщиком Windows по таймеру или триггеру

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

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

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

На локальной среде разработки при нажатии на восстановить из хранилища система выдает ошибку 

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

Опытным путем установлено, что если удалить пакет с диска по пути defPackagesWorkingCopyPath из ConnectionzStrings.config, то он проходит и так с каждым пакетом. Т.е. чтобы обновиться из хранилища надо предварительно удалить всю рабочую копию.

Как то не очень радует такой режим работы. Кто сталкивался и как можно решить?

 

Нравится

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

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

Читал это, но не смог никак к себе применить. 

Но два дня безуспешных попыток решить вопрос дали свой результат. Причина в URL хранилища. По каким то причинам не нравится адрес по ip, нужен адрес с именем. После того как сменил IP на имя все заработало. Хотя в адресе по IP ничего, что противоречило бы UTF-8 я не вижу.

Судя по сообщению об ошибке, проблема к доступу по пути :)

Навскидку, могу посоветовать проверить наличие русских символов в пути и права IIS на чтение / запись к папке с приложением

Alex Kalnitskiy,

Как бы я хотел написать "Спасибо за помощь, проблема решена", но увы и ах! Кириллицы в пути нет, у пользователя IIS Full control на папку и все вложенное в неё, а ошибка остается :(

Ошибка
При работе с хранилищем произошла ошибка
Target path '/branches/development/EPMPortal/branches/1.0.0' does not exist
SvnErrorCode: SVN_ERR_FS_PATH_SYNTAX

 

70% - Авторизация в SVN закончилась.

Олександр Цируль пишет:

70% - Авторизация в SVN закончилась

Если про Creatio то нет. Авторизовался перед выполнение данной операцией. + заливку в SVN я могу выполнять. а вот обновить из хранилища без ошибки не могу. Обновляется только если удаляю рабочую копию.

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

 

А тут больше о том, какой должен быть формат пути:

Directory entry names and directory paths.

Here are the rules for directory entry names, and directory paths:

A directory entry name is a Unicode string encoded in UTF-8, and may not contain the NULL character (U+0000). The name should be in Unicode canonical decomposition and ordering. No directory entry may be named '.', '..', or the empty string. Given a directory entry name which fails to meet these requirements, a filesystem function returns an SVN_ERR_FS_PATH_SYNTAX error.

A directory path is a sequence of zero or more directory entry names, separated by slash characters (U+002f), and possibly ending with slash characters. Sequences of two or more consecutive slash characters are treated as if they were a single slash. If a path ends with a slash, it refers to the same node it would without the slash, but that node must be a directory, or else the function returns an SVN_ERR_FS_NOT_DIRECTORY error.

A path consisting of the empty string, or a string containing only slashes, refers to the root directory.

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

Читал это, но не смог никак к себе применить. 

Но два дня безуспешных попыток решить вопрос дали свой результат. Причина в URL хранилища. По каким то причинам не нравится адрес по ip, нужен адрес с именем. После того как сменил IP на имя все заработало. Хотя в адресе по IP ничего, что противоречило бы UTF-8 я не вижу.

Ну хоть теперь все в Гугле найдут по коду ошибки и эту причину. Странно, что движок SVN выдавал в ошибке именно путь к папке, а не весь адрес с IP.

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

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

Пробовал два метода описанные тут https://community.terrasoft.ua/questions/zakrytie-zapisi-pri-sohranenii и https://community.terrasoft.ua/questions/thissave-prervat-zakrytie-kartocki-vozvrat-k-predydusei-kartocke-v-shain тут, но не один из них не помог

Нравится

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

Александр, обратите ещё внимание на более новую статью по теме:

«Как сохранять, не закрывая, открытую бизнес-процессом страницу редактирования».

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

Видел статью, пробовал, не работает. Видимо что-то не туда пишу

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

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