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

Подскажите, пожалуйста, как сделать, чтобы при открытии проекта, записи детали "Структура" были развернуты по умолчанию?

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

Нравится

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

Добрый день!



Хотелось бы получить консультацию по CSS стилям.

Цель: необходимо изменить стиль одного единственного конкретного поля



1) создаю новый модуль, где пишу в LESS

.Test { color: #7FFF00;  }

2) в схеме делаю привязку к модулю через css!

3) в нужном поле прописываю 

 

"labelWrapConfig": {"classes": {"wrapClassName": ["Test"]}},

Помогите разобраться в задаче

Нравится

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

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

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

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

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

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

define("CasePage", ["ProcessModuleUtilities", "CasePageResources",
		"ServiceDeskConstants", "BusinessRuleModule", "ConfigurationConstants", "GeneralDetails", "css!UsrColorChangeCSS"],
	function(ProcessModuleUtilities, resources, ServiceDeskConstants, BusinessRuleModule, ConfigurationConstants) {
		return {
			entitySchemaName: "Case",
			details: /**SCHEMA_DETAILS*/{ куча всего }
		}/**SCHEMA_DETAILS*/,
			modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
			dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
			businessRules: /**SCHEMA_BUSINESS_RULES*/{ куча всего }/**SCHEMA_BUSINESS_RULES*/,
				diff: /**SCHEMA_DIFF*/[
 
            {
				"operation": "insert",
				"name": "UsrCostd7f9ba80-586e-48b5-9c7f-bbeb266c6f28",
				"values": {
					"labelWrapConfig": {"classes": {"wrapClassName": ["Test"]}},
					"layout": {
						"colSpan": 12,
						"rowSpan": 1,
						"column": 0,
						"row": 6,
						"layoutName": "SolutionTab_gridLayout"
					},
					"bindTo": "UsrCost"
				},
				"parentName": "SolutionTab_gridLayout",
				"propertyName": "items",
				"index": 9
			}

код модуля css в первом посте

Попробуйте в values

вставить вместо labelWrapConfig

classes: {

            labelClass: ["Test"]

        }

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

не вышло 

Уточните className для вашего поля,  для label должен быть

className: "Terrasoft.Label",

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

Добрый день!



Существует проблема следующего характера. На предприятии с большим количеством сотрудников для работы с CRM применяется NTLM аутентификация. Почта в CRM привязана к учетной записи в Exchange. И все вроде бы хорошо, ввел один раз пароль и работаешь.

Но! В в целях безопасности раз в 30 дней сотрудник должен менять пароль от учетной записи. Соответственно пароль от почты автоматически меняется на аналогичный пароль. Авторизация в CRM проходит успешно, но вот для синхронизации почты приходится лезть в настройки и менять пароль. Некоторым пользователям это лень делать, некоторые боятся что-нибудь испортить и т.д. Но это пол беды, из-за того что от пользователя поступает слишком много запросов на авторизацию с неверными данными он блокируется в Active Directory

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

Нравится

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

Алексей Следь,

И я с таким неоднократно сталкивалась crying

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

Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.

Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.

Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.

Тимур, здравствуйте!

Проговорил описанную проблему с аналитиками продукта. Синхронизация почты в bpmonline работает так, что она сохраняет учетные данные для почтового ящика в базе данных (оригинальное имя пользователя и зашифрованный пароль). Да, на текущий момент система работает так, что после смены пароля пользователя в AD/NTLM нужно менять вручную изменить пароль в bpmonline для почтовых ящиков, чтобы синхронизация почты работала дальше.



Мы зарегистрировали проблему по вашему обращению и передали на анализ команде разработки продукта.

На данный момент в коммуникационной панели отображается соответствующее сообщение если пароль невалидный (см. Рис. 1).

Рис. 1

Вильшанский Дмитрий,

Дмитрий, спасибо за ответ! 

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

И как долго ждать релиза с данным исправлением?

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

Прошло почти полгода. Ответ тот же

Сами тоже пока не решили этот вопрос.

Пикулик Тимур,

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

Алексей Следь,

И я с таким неоднократно сталкивалась crying

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

Если честно, когда постоянно получаешь такие ответы, то понимаешь, что писать какие бы то ни было пожелания нет смысла.

Думаю, что многие пользователи из-за такого подхода уже 'забили' писать свои пожелания и идеи.

Хорошо, что появился маркетплейс bpm'online, и много чего полезного теперь можно найти бесплатно или за небольшие деньги.

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

Sales Enterprise

Версия 7.13.3.481

Настраиваю новое правило поиска дублей по полю  "Основной телефон" согласно инструкции:

https://academy.terrasoft.ru/documents/technic-sdk/7-13/dobavlenie-pravila-poiska-dubley

Признак "Использовать правило при сохранении" установлен: https://yadi.sk/i/546AVOF8xgA95A

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



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

 

Нравится

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

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

Правило отрабатывает корректно при глобальном поиске.

Дополнительных настроек кроме признака "Использовать при сохранении" в академии не нашёл.

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

Так же выявлено, что и базовые правила не отрабатывают при сохранении

Базовые правила должны отрабатывать при сохранении контакта и контрагента.

О сохранении Контрагента и идёт речь

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

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

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

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

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

 

Нравится

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

Посмотри пример добавления вложений в письмо EmailMessagePublisherPage

define("EmailMessagePublisherPage", ["EmailMessagePublisherPageResources", "LookupUtilities", "EmailImageMixin",
		 "ConfigurationConstants", "MaskHelper", "ExchangeNUIConstants", "EmailActionsMixin", "MacrosUtilities",
		"ExtendedHtmlEditModuleUtilities", "ExtendedHtmlEditModule", "MessagePublisherAttachmentUtilities",
		"MacrosHelperServiceRequest", "EntityResponseValidationMixin", "css!HtmlEditModule",
		"css!EmailMessagePublisherModule"],
		function(resources, LookupUtilities, EmailImageMixin, ConfigurationConstants, MaskHelper, ExchangeNUIConstants) {
			return {
				entitySchemaName: "Activity",
 
{
	"operation": "insert",
	"name": "AttachFileButton",
	"propertyName": "items",
	"parentName": "PublisherBottomContainer",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.BUTTON,
		"style": this.Terrasoft.controls.ButtonEnums.style.DEFAULT,
		"iconAlign": this.Terrasoft.controls.ButtonEnums.iconAlign.LEFT,
		"imageConfig": {
			"bindTo": "getAttachFileButtonImageConfig"
		},
		"tag": "attachFileButton",
		"fileUpload": true,
		"filesSelected": {"bindTo": "onAttachFileSelected"},
		"enabled": {
			"bindTo": "IsPublishButtonEnabled"
		},
		"click": {
			"bindTo": "onAttachFileButtonClick"
		},
 

В MessagePublisherAttachmentUtilities в методе onAttachFileSelected выполняется загрузка файла а метод onComplete вызывается после окончания загрузки вот туда можно вставить вызов твоего сервиса по импорту данных и передать ему fileId загруженного файла.

В более сложном варианте можно обойтись без загрузки файла в БД но для этого тебе нужно по аналогии с FileApiService написать свой сервис обработки файлового потока и вызывать его

 

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

Почти 2 года назад озвучивала здесь это пожелание Возможность сохранения настроек импорта из Microsoft Excel. Но из-за того, что потребность в данной функциональности у пользователей bpm'online crm низкая, она до сих пор не реализована.

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

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

Если вы часто выполняете импорт может стоить подумать о других механизмах а не Экселе. Импорт из экселя задумывался для разового переноса/наполнения системы. Использование его оправадано если данных сравнительно немного и их вручную нужно просматривать/фильтровать менять.

Если вы постоянно выполняете обновления то можно использовать интеграции с вэб сервисами или инструменты интеграции на уровне БД (Например на основе мастера экспорта импорта MSSQL Managment Studio можно создать свой пакет сохранив туда все настройки и использовать его для автоматизации процесса переноса записей)

 

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

Импорт с Экселя оправдан т.к. данные вносятся туда вручную и их не так уж и много. 

Что было бы лучше? 1. Копаться в базовом импорте с Эксель и пробовать через этот способ сделать. 2. Сделать программу которая импортировала данны прямо в БД, но тогда мне неизвестно будет ли отрабатываться процессы на уровне Entity. 3. Сделать все как в 2 пункте только в БД специально созданной для этого случая и потом как-то синхронизировать её(эту БД) с bpmonline.

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

Идею поддержал.

По поводу своего преднастроенного импорта. Если делать его через отдельную программу на C# , то будет ли срабатывать событийные процессы на уровне Entity?

Андреев Андрей Сергеевич,

Я бы написал свой БП или лучше сервис для импорта данных в bpm. Чтобы срабатывали событийные процессы для вставки данных используй esq

Как то так

var _caseFile = new Terrasoft.Configuration.CaseFile(UserConnection);
    _caseFile.SetDefColumnValues();
    _caseFile.SetColumnValue("Name", url);
    _caseFile.SetColumnValue("TypeId", FileConsts.LinkTypeUId);
    _caseFile.Save();

 

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

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

ServiceHelper.callService(config);

Что-бы там его получить и уже как-то занести в БД?

Посмотри пример добавления вложений в письмо EmailMessagePublisherPage

define("EmailMessagePublisherPage", ["EmailMessagePublisherPageResources", "LookupUtilities", "EmailImageMixin",
		 "ConfigurationConstants", "MaskHelper", "ExchangeNUIConstants", "EmailActionsMixin", "MacrosUtilities",
		"ExtendedHtmlEditModuleUtilities", "ExtendedHtmlEditModule", "MessagePublisherAttachmentUtilities",
		"MacrosHelperServiceRequest", "EntityResponseValidationMixin", "css!HtmlEditModule",
		"css!EmailMessagePublisherModule"],
		function(resources, LookupUtilities, EmailImageMixin, ConfigurationConstants, MaskHelper, ExchangeNUIConstants) {
			return {
				entitySchemaName: "Activity",
 
{
	"operation": "insert",
	"name": "AttachFileButton",
	"propertyName": "items",
	"parentName": "PublisherBottomContainer",
	"values": {
		"itemType": this.Terrasoft.ViewItemType.BUTTON,
		"style": this.Terrasoft.controls.ButtonEnums.style.DEFAULT,
		"iconAlign": this.Terrasoft.controls.ButtonEnums.iconAlign.LEFT,
		"imageConfig": {
			"bindTo": "getAttachFileButtonImageConfig"
		},
		"tag": "attachFileButton",
		"fileUpload": true,
		"filesSelected": {"bindTo": "onAttachFileSelected"},
		"enabled": {
			"bindTo": "IsPublishButtonEnabled"
		},
		"click": {
			"bindTo": "onAttachFileButtonClick"
		},
 

В MessagePublisherAttachmentUtilities в методе onAttachFileSelected выполняется загрузка файла а метод onComplete вызывается после окончания загрузки вот туда можно вставить вызов твоего сервиса по импорту данных и передать ему fileId загруженного файла.

В более сложном варианте можно обойтись без загрузки файла в БД но для этого тебе нужно по аналогии с FileApiService написать свой сервис обработки файлового потока и вызывать его

 

Еще проще по нажатию кнопки вызвать

selectFile(event) {
    event.preventDefault();
 
    file_input = document.createElement('input');
    file_input.addEventListener("change", uploadFile, false);
    file_input.type = 'file';
    file_input.click();
},
 
uploadFile() {
    //отправка file_input.files[0]) например используя  XMLHttpRequest post
}

 

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

Добрый день!

При вызове скрипта генерирования печатной формы в бизнес-процессе он падает с ошибкой:

System.NullReferenceException: Object reference not set to an instance of an object.

   at Terrasoft.Configuration.ReportService.ReportService.GetSchemaNameByTemplateId(Guid templateId)

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

Вопросы: как можно заменить Supervisor на другого пользователя? Или может посоветуете как получить UserConnection другого пользователя для выполнения ReportService? Возможно ли обойтись в ReportService без UserConnection?

Спасибо!

Нравится

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

а как происходит инициализация ReportService в бп?

Ранее тема обсуждалась тут и тут. В ReportService в логике функций GenerateMSWordReport или GenerateDevExpressReport есть фрагменты, которые позволяют его запускать только при работе из браузера, но не в фоновом режиме с сервера, когда UserConnection нет. В комментариях один из участников рассказал, что в итоге переделал этот сервис, чтобы не использовать UserConnection. А другой предложил запускать от имени какого-то пользователя посредством ProcessEngineService, так работает нормально.

Варфоломеев Данила,

Процесс запускается через задание-сценарий вызовом 

GenerateMSWordReport, в который передаются параметры бизнес-процесса и UserConnection

 

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

Спасибо вам за информацию!

Мы заметили, что новый функционал в 7.13.2 "Фоновое выполнение операции" предназначен для запуска фоновых задач, которые требуют UserConnection. Я правильно понимаю, что с помощью этого функционала можно создать UserConnection для передачи в GenerateMSWordReport? (https://academy.terrasoft.ru/documents/technic-sdk/7-13/fonovoe-vypolne…)

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

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

Дело не в том, что это конкретно Supervisor. Если под Supervisor зайти в систему и по действию построить отчёт, всё отработает.

Варианты по ссылкам предлагались ещё до появления 7.13.2, можете проверить и этот механизм.

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

Добрый день!

Установил расширение, которое по таймеру показывает всплывающие изображения (https://marketplace.terrasoft.ru/app/new-year-motivation-bpmonline)

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

var sender = "ShowImageScreen";

var userConnection = Get("UserConnection");

var messageText = string.Format("\"number\":{0}", UsrNumber.ToString());

messageText = '{' + messageText + '}';

            MsgChannelUtilities.PostMessage(userConnection, sender, messageText);

return true;

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

Заранее благодарю!

Нравится

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

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

В клиентском модуле необходимо подписаться на данное сообщение. Например данное сообщение необходимо выводить в карточке контакта ContactPageV2

Тогда в данном модуле необходимо прописать следующее:

 

define("ContactPageV2", [],
function() {
	return {
		entitySchemaName: "Contact",
		attributes: {},
		modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/,
		messages:{},
		methods: {
			init: function () {
				this.callParent(arguments);
				this.subscriptionFunction();
			},			
			subscriptionFunction: function() {
				this.callParent(arguments);
				Terrasoft.ServerChannel.on(Terrasoft.EventName.ON_MESSAGE,
				this.onWebSocketListener, this);
			},
			onWebSocketListener: function(scope, message) {
				if (message && message.Header.Sender === "ShowImageScreen") {
					var message2 = message.Body;
					if (!this.Ext.isEmpty(message2)) {
						this.Terrasoft.showInformation(message2);
					}
					return;
				} 
			},
 
		},
		dataModels: /**SCHEMA_DATA_MODELS*/{}/**SCHEMA_DATA_MODELS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/
	};
});

 

Нигрескул Алексей,

в нашем случае сообщение всплывает поверх всех открытых окон в bpm. Задача не стоит конкретно отображать сообщение в каком-либо разделе (в Вашем примере в контактах), а в самом скрипте прописать параметр, в который мы бы и задавали пользователя для отображения сообщения.

Насколько понимаю, MsgChannelUtilities.PostMessage взаимодействует только с текущим пользователем, выполняющим процесс. Ещё есть MsgChannelUtilities.PostMessageToAll(string sender, string message), см. обсуждение.

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

Всем доброго времени суток!

Столкнулся с такой проблемой при разработке в ФС сжирается все ОЗУ и ПК тупо зависает.

ОЗУ 16 Гб. При компиляции загружается под 100%. Где можно настроить ограничение ресурсов ОЗУ при компиляции?

Заранее благодарен.

Нравится

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

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

- ос

- версия нет фрєймворка

- версия sql сервера (для MS SQL то что возвращает select @version)

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

- какие доп сборки включены в конфигурацию

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

- ос

- версия нет фрєймворка

- версия sql сервера (для MS SQL то что возвращает select @version)

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

- какие доп сборки включены в конфигурацию

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

ОС: Windows 10, версия 1803

.Net framework: http://prntscr.com/mpr4ys

версия sql сервера: Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)   Apr 29 2016 23:23:58   Copyright (c) Microsoft Corporation  Enterprise Edition (64-bit) on Windows 10 Pro 6.3 <X64> (Build 17134: ) 

Компилировал и через VS и через конфигурацию, память загружается под 100%

 Сборки: Sales, Marketing, Service

 

Нажал публикацию объекта:

http://prntscr.com/mpruc6

данный процесс съедает почти 4 гб озу

У меня компилятор 3 Гб выедает. Но при 64-х воткнутых в сервер это не проблема :)

Алексей-Карягин,

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

VBCSCompiler.exe — это компилятор от Microsoft. Сайт bpm'online его просто запускает с нужными параметрами.

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

Или на компьютере отключен или слишком маленький файл подкачки, в результате чего при нехватке памяти система падает, а не использует жёсткий диск.

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

Отключен файл подкачки т.к. использую SSD

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

Поставил файл подкачки проблема пропала

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

Добрый день!

Настроил систему на разработку в файловой системе. Все делал по инструкции с академии. Но при отладки когда проставляю точку останова то она не работает - http://prntscr.com/mon7s3

Второй метод дебага что описан в статье мне не подходит.

Подскажите из- за чего может быть такое поведение?

Заранее благодарен

Нравится

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

Как вариант - посмотреть настройки отладчика в VS.

 

 

Как вариант - посмотреть настройки отладчика в VS.

 

 

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

Добрый день.

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

 

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

Нравится

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

такая же история была. просто скрывал ошибку и фиксировал 2 раз. все без проблем переносилось.

Варфоломеев Данила,

Скрытие не помогает, к сожалению.

По SVN и 720002 обсуждают тут. Также, хорошо было бы найти в логах текст красного сообщения в правильной кодировке и почитать, что же хочет система.

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