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

С возможностью вставки картинок из буфера обмена, а также просмотра их в ленте в уменьшенном виде с увеличением по клику?

Нравится

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

Насколько я понимаю лента содержит html. А значит можно сохранять картинки в БД и подставлять к ним путь.

Примеров как на js получить из буфера картинку в инете много, там же примеры предпросмотра и в версии 12,4 на детали файлы и примечания  это есть в коробке.

Так что все реально, насколько это сложно для вас зависит от вашего опыта в разработке js.

Насколько я понимаю лента содержит html. А значит можно сохранять картинки в БД и подставлять к ним путь.

Примеров как на js получить из буфера картинку в инете много, там же примеры предпросмотра и в версии 12,4 на детали файлы и примечания  это есть в коробке.

Так что все реально, насколько это сложно для вас зависит от вашего опыта в разработке js.

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

Григорий, спасибо! А может подскажете, в маркетплейсе есть такая функциональность?

Если картинка вместе с текстом копируется из браузера и доступна по адресу в Интернете, то вставится в ленту уже сейчас:

А вы уверены, что вам лента вообще нужна?

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

«Интернет не нужон!»©

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

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

Добрый день!

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

Нравится

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

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



Как можно в bpm'online перевести кроме элементов интерфейса на несколько языков еще и данные?

Необходимо отображать на языке пользователя некоторые поля справочников (Name, Description), а также некоторые поля разделов (например, названия, описания сервисов или продуктов)

Нравится

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

В схеме таблицы для тех полей, которые хотите локализировать, установить признак 'Локализируемый текст' (Localizable Text):

 

По умолчанию для таблиц, которые наследованы от Base lookup, для полей Name и Description эти признаки уже установлены.

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

Для примера на скриншоте ключ выглядит следующим образом: Data:Contact.OfficialName:82d21f9f-4cec-4ff7-aeee-9255cc4f37f3. Contact - это название таблицы, OfficialName - название локализируемого поля, 82d21f9f-4cec-4ff7-aeee-9255cc4f37f3 - Id записи в таблице Contact, для которой делается перевод.

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

Спасибо!



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



А как все уже существовавшие записи добавить для перевода?

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

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

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

Нравится

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

Зайдите в настройку кэйса и посмотрите

1) панель кэйсов вашего раздела настроена на статус в продаже?

2) есть ли в панели шаг "продажа завершена с проигрышем" и с каких шагов на него можно попасть. При необходимости разрешите переход в "продажа завершена с проигрышем" со всех остальных шагов.

Зайдите в настройку кэйса и посмотрите

1) панель кэйсов вашего раздела настроена на статус в продаже?

2) есть ли в панели шаг "продажа завершена с проигрышем" и с каких шагов на него можно попасть. При необходимости разрешите переход в "продажа завершена с проигрышем" со всех остальных шагов.

Григорий Чех, в кейсах разрешено переход с любого этапа на "продажа завершена с проигрышем". Изменение статуса происходит в бизнес-процессе - не в бизнес-кейсе

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

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

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

 пример такой логики не можете показать или указать где можно глянуть?

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

Доброе утро!

Странная проблема у меня, создаю в «Мастер раздела» объект с именем UsrBePVM

Далее перехожу в JS скрипт, где описываю логику работы этого объекта, сохраняется удачно, все как бы хорошо.

Далее почему-то ничего не происходит на странице, такое ощущение, что не видит значения UsrBePVM или ему просто ничего не передается.

Что не так? Что-то забыл заполнить? Где смотреть?

 

Нравится

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

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

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

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

Алла Савельева пишет:

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

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

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

Странно, что из бизнес процесса не работает.

Процессы отрабатывают на сервере, а JS — на странице в браузере. Соответственно, при работе процесса клиентская логика отрабатывать не будет.

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

Добрый день.

Прошу помощи, развернул сайт, все устанавливал согласно инструкции на сайте https://academy.terrasoft.ru/documents/administration/7-12/ustanovka-bp…

Установлен на Server 2016. Сервер видит и Redis и базу SQL 2017

При запуске выдает ошибку:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Reflection.ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

 

[ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0
   System.Reflection.Assembly.GetTypes() +112
   Terrasoft.Common.ReflectionUtilities.FindTypeByShortName(Assembly assembly, String name) +455
   Terrasoft.Core.SchemaManagerItem`1.get_TypeName() +150
   Terrasoft.Core.SchemaManager`1.InitializeCoreSchemaLocalizableValues(ISchemaManagerItem`1 schemaManagerItem) +31
   Terrasoft.Core.SchemaManager`1.AddCoreSchema(Guid uid, String name, Guid parenSchemaUId, Assembly assembly, Guid[] referenceSchemaUIds) +116
   Terrasoft.Core.Entities.SystemEntitySchemaManager.InitializeItems() +320
   Terrasoft.Core.Entities.EntitySchemaManager.Initialize(SchemaManagerProvider provider, SchemaManagerProviderConfigurationElement configuration) +163
   Terrasoft.Core.SchemaManagerProvider.InitializeSystemSchemaManager(String systemSchemaManagerName) +223
   Terrasoft.Core.SchemaManagerProvider.InitializeSchemaManager(String managerName) +27
   Terrasoft.Core.SchemaManagerProvider.GetManager(String managerName) +221
   Terrasoft.Core.UserConnection.get_SystemEntitySchemaManager() +47
   Terrasoft.Core.SystemUserConnection.InitializeCurrentUser(String userName, TimeZoneInfo timeZone, String clientIP, String agent, Boolean logSessionStart) +36
   Terrasoft.Core.AppConnection.InitializeSystemUserConnection(ConfigurationSection schemaManagerProviderConfigurationSection) +172
   Terrasoft.Core.AppConnection.Initialize(ConfigurationSectionGroup appConfigurationSectionGroup) +558
   Terrasoft.WebApp.Loader.Global.InitializeAppConnection() +486
   Terrasoft.WebApp.Loader.Global.Application_Start(Object sender, EventArgs e) +202
 
[HttpException (0x80004005): Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +517
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +185
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +168
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +414
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +369
 
[HttpException (0x80004005): Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +532
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +111
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +714

Помогите советом, что делать? куда копать?

Нравится

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

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

Панель управления - >> Программы - >> Программы и компоненты - >> Включить или отключить функции Windows - >> Внутренние информационные службы

 

 

Добрый день.

Все компоненты установлены.

Evgeny D,

 

обратите внимание, что в требованиях предполагается IIS 7 и выше; а у вас , возможно, стоит более ранняя версия, так же есть в описании ошибки к этому отсылка

System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)

Попробуйте обновить IIS 

изначально установлен IIS 10

Если после обновления при логине в систему возникает ошибка вида "Unable to load one or more of the requested types", то вам необходимо установить компонент Microsoft Visual C++ 2010 SP1 Redistributable Package. Загрузить его можно на сайте компании Microsoft по ссылке.

Установка Microsoft Visual C++ 2010 SP1  помогла! огромное спасибо за помощь.  Хочется понять, почему в инструкции не указано, что должен стоять этот компонент. Спасибо!

Нашел заметку, но совсем в другом месте

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

Коллеги, доброго дня!

Может, кто-то сталкивался с подобной задачей, прошу подсказать ньюансы:

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

2. При реализации нового функционала я создал новую версию работающего процесса в пакете-наследнике от пакета с процессом и пакета с новым функционалом.

Цель - оставить запущенные экземпляры на старой реализации процесса, а новые с момента обновления запускать на новой реализации. 

3. Сейчас я должен перенести новую версию процесса в рамках обновления, но немного паникую: не нужно ли каких-либо дополнительных действий с моей стороны?

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

Кто-нибудь сталкивался? как прошло?

Нравится

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

См. статью «Версионность процессов»:

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

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

При сохранении изменений в процессе выполняется проверка:

 

  1. есть ли запущенные экземпляры процесса;

  2. доступен ли для изменений пакет, в котором находится процесс;

  3. выполнялся ли экспорт бизнес-процесса.

Если пакет процесса недоступен для изменений, система предложит сохранить новую версию бизнес-процесса. После подтверждения будет выполнено сохранение новой версии в пакет, указанный в системной настройке [Текущий пакет].

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

Всем доброго времени суток. Версия 7.12.

В своё время работал с настройкой мобильного приложения, в т.ч. с добавлением кастомных элементов на страницы. Вроде тогда всё работало (в 7.10 и эмуляторе приложения для 7.10) - https://community.terrasoft.ru/questions/dobavlenie-kastomnyh-elementov…

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

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

Есть схема MobileContactPreviewPage, которая подключена в MobileApplicationManifestDefaultWorkplace у контакта в Models:

"Contact": {
			"Preview": "MobileContactPreviewPage",
			"RequiredModels": [
				"Account",
				"Contact",
				"ContactCommunication",
				"CommunicationType",
				"Department",
				"ContactAddress",
				"AddressType",
				"Country",
				"Region",
				"City",
				"ContactAnniversary",
				"AnniversaryType",
				"Activity",
				"SysImage",
				"FileType",
				"ActivityPriority",
				"ActivityType",
				"ActivityCategory",
				"ActivityStatus",
				"Job"
			],
			"ModelExtensions": [],
			"PagesExtensions": [
				"MobileContactRecordPageSettingsDefaultWorkplace",
				"MobileContactGridPageSettingsDefaultWorkplace",
				"MobileContactActionsSettingsDefaultWorkplace",
				"MobileContactModuleConfig"
			]
		}

Я заместил схему MobileContactPreviewPage, перенёс содержимое из оригинальной реализации полностью, добавил свою небольшую доработку-  просто добавление кнопки на страницу:

/* globals Contact: false */
Terrasoft.LastLoadedPageData = {
	controllerName: "ContactPreviewPage.Controller",
	viewXType: "contactpreviewpageview"
};
 
Ext.define("ContactPreviewPage.View", {
	extend: "Terrasoft.view.BasePreviewPage",
	xtype: "contactpreviewpageview",
	config: {
		id: "ContactPreviewPage"
	}
});
 
Ext.define("ContactPreviewPage.Controller", {
	extend: "Terrasoft.controller.BasePreviewPage",
 
	statics: {
		Model: Contact
	},
 
	config: {
		refs: {
			view: "#ContactPreviewPage"
		}
	},
 
	/**
	 * @inheritdoc
	 * @protected
	 * @overridden
	 */
	onCallPhoneStarted: function() {
		this.callParent(arguments);
		Terrasoft.PhoneCallLogUtils.openPage({
			activityLinkColumnNames: [
				{
					parentColumnName: "Id",
					activityColumnName: "Contact"
				},
				{
					parentColumnName: "Account",
					activityColumnName: "Account"
				}
			],
			record: this.record
		});
	},
 
	onLoadRecord: function(loadedRecord, callback) {
      this.callParent([loadedRecord, function() {
        Terrasoft.MessageBox.showMessage("onLoadRecord");
         var panelItems = this.getView().getPanel().getItems();
         var primaryColumnSet = panelItems.first();
 
		//Кнопка
		var controlbutton = this.getOurCustomButton(loadedRecord);
        controlbutton.on("tap", function () {
    		loadedRecord.set("UsrImgData","");
        }, this);
 
        primaryColumnSet.add(controlbutton); //если добавляем в конце панели
 
      }]);
    },
    getOurCustomButton: function(record) {
        return Ext.create('Ext.Button', {
              xtype: "button",
              cls: "x-button x-button-primary-blue",
              text: "Очистить"
            });
    },
 
});

 

Собственно, кнопки так и не появилось, сообщение showmessage тоже отсутствует. Версия приложения последняя, установил прямо с GooglePlay, проверяю всё непосредственно с телефона.

 

И ещё общий вопрос - что собственно, представляет собой приложение? Могу ли я туда выводить непосредственно html- или нативный javascript-код как в браузер? Будет ли при этом работать javascript-код на всех видах устройств?

Нравится

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

Добрый день, Денис!

А вы смотрели в dom дереве кнопка создалась? Может она есть, но просто не видна. Тогда придется поработать со стилями.

Приложение собой представляет одностраничное веб-приложение, т.е. html можно разве что в iframe'е попробовать вставить. А нативный JavaScript должен работать без проблем.

Золотарев Артем Андреевич,

Артём, спасибо за ответ.

Дело в том, что в приложении негде смотреть - консоли-то нету.. ну и потом, текст-то на кнопке хотя бы должен отобразиться. Где-нибудь есть эмулятор для 7.12?

html как-то добавляли в той теме по ссылке.

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

https://sun9-5.userapi.com/c830309/v830309684/143865/aieJi10t5ks.jpg (MobileContactPreviewPage)

https://sun9-7.userapi.com/c834401/v834401309/18b001/y7z3N8IY2FQ.jpg (UsrMobileContactPreviewPage)

Смородинов Денис,

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

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

Добрый вечер, коллеги. Такой вопрос: имеется раздел контактов и раздел профессий. Контакт содержит ФИО и номер телефона. При чем в гриде контактов - все номера телефонов идут как гиперссылка, при нажатии на которую идет звонок на этот номер телефона. В грид раздела "контакт в профессии" добавлен столбец "контакт.номер_телефона", но он уже отображается как обычная строка. Каким образом его можно сделать также гиперссылкой как и в разделе контакты?

Нравится

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

Вам в CtiLinkColumnUtility, там прописываются какие колонки в объекте считать гиперссылкой для вызовов.

Ну или переопределить addColumnLink в секции, отсеять по колонке и навешивать обработчик самостоятельно для колонки с телефоном

Вам в CtiLinkColumnUtility, там прописываются какие колонки в объекте считать гиперссылкой для вызовов.

Ну или переопределить addColumnLink в секции, отсеять по колонке и навешивать обработчик самостоятельно для колонки с телефоном

Спасибо! Все получилось!

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

Здравствуйте! Такой вопрос, могу ли я в серверном коде (с помощью C#) прочитать вьюху, через dblink Oracle? Используя например класс Select для запросов. Если да, то как ?

Спасибо.

Нравится

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

С точки зрения системы с view работают так же, как с таблицами. То есть Вы в базе сайта bpm'online пишете view с нужной логикой выборки данных с другого сервера, затем в конфигурации заводите схему с таким же названием, колонками и поставленной  в свойствах галочкой «Представление в базе данных». В этом случае за наличием view в базе и её структурой нужно следить самостоятельно.

А далее работаете с этой схемой как обычно, хоть из Select, хоть из EntitySchemaQuery.

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

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

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

На view тоже вполне могут быть II, IU и ID-триггеры, которые реализуют запись куда надо. В таком случае запись в эту view будет работать так же, как в таблицу.

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