Добрый день!
Мы выбираем CRM-систему, на базе которой будем реализовывать свой функционал.
Сейчас есть 2 вопроса:
1. Можете поделиться произвольным выгруженным пакетом с помощью WorkspaceConsole? Нас интересует структура архива, а выгрузить с демо-версии к сожалению возможности нет.
2. Подскажите, при создании нового объекта в системе создается ли реальный C# класс уровня ORM (слоя доступа к данным)?
Разделы документации по работе с данными видели, но интересует именно наличие ORM-объекта.
Спасибо!

Нравится

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

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

Отвечу на Ваши вопросы по порядку:

  1. 1. Не понятно зачем Вам структура, ведь ее изменять нельзя. Результат получение ресурсов схем при помощи WorkspaceConsole командой:

    Terrasoft.Tools.WorkspaceConsole.exe -workspaceName=Default -operation=SaveDBContent -contentTypes=Resources -destinationPath=D:\Resources -fileName=Resources.xml -cultureName=ru-RU -logPath=C:\TEMP

    Результат находится в файле Resources.zip

  2. 2. Ответ простой - да. Посмотреть класс для объекта можете в конфигурации. Для этого на объекте нажмите правую кнопку мыши и выполните команду Исходный код -> Открыть

resources.zip

Спасибо за помощь!

По работе с пакетами еще возникли вопросы:
1. В документации рекомендуется следующая команда для переноса пакетов из одного приложения в другое:

[Путь к WorkspaceConsole]\Terrasoft.Tools.WorkspaceConsole.exe -operation=SaveDBContent -contentTypes=Repository -workspaceName=[Название рабочего пространства] -destinationPath=[Путь к локальному каталогу]

В Вашей команде -contentTypes=Resources, а значит это выгрузка только ресурсов и в этом случае мы НЕ получаем архив с пакетом, который можно перенести на другое приложение (там его еще нет) и там установить.
Вы могли бы предоставить выгрузку любого пакета с contentTypes=Repository (то есть не только ресурсы)?

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

Спасибо!

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

Не понятно зачем Вам знать структуру выгруженного пакета, если его нельзя изменять вручную.
Пример выгрузки пакета Base

Как создается новый branch? - создается при фиксации изменений в SVN. Стандартный механизм работы с SVN.

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

Мне необходимо сохранить определенную строку в системе, чтобы она была доступна всем пользователям. Как это лучше сделать?

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

Нравится

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

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

Вам стоит смотреть в сторону проверки при помощи esq наличия в бд в таблице SysSettings нужного Вам значения. Если значения нет - создавать его insert-ом. Если же оно есть - изменять значение при помощи примерно следующего кода:

var config = {
	sysSettingsValues: {},
	isPersonal: false
};
 
config.sysSettingsValues['test'] = 'DONE';
 
 
Terrasoft.SysSettings.postSysSettingsValues(config, function(result){
	/some code
}, this);

"Мотков Илья" написал:

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

Вам стоит смотреть в сторону проверки при помощи esq наличия в бд в таблице SysSettings нужного Вам значения. Если значения нет - создавать его insert-ом. Если же оно есть - изменять значение при помощи примерно следующего кода:

var config = {

        sysSettingsValues: {},

        isPersonal: false

};



config.sysSettingsValues['test'] = 'DONE';





Terrasoft.SysSettings.postSysSettingsValues(config, function(result){

        /some code

}, this);


Спасибо за ваш ответ. Как изменять/считывать понятно из системных настроек понятно. Больше нет никакой возможности хранить глобальные параметры кроме системных настроек?

У меня следующая задача, например в bpmonline есть интеграция с mandrill. Так вот для подключения этого сервиса мы вводим apiKey, который сохранится в системных настройках. Вот я аналогичную интеграцию делаю с другим сервисом и встал такой же вопрос, как лучше/проще всего хранить apiKey?

"ta4" написал:как лучше/проще всего хранить apiKey

В любом случае в БД. Следовательно либо системная настройка, либо, создайте свой объект и храните там, плюс своего объекта = можете настроить ему права доступа.

"Максим Шевченко" написал:
ta4 пишет:

как лучше/проще всего хранить apiKey

В любом случае в БД. Следовательно либо системная настройка, либо, создайте свой объект и храните там, плюс своего объекта = можете настроить ему права доступа.


Спасибо за ответ Максим.
А есть какой-нибудь пример, как добавить системную настройку программно? (через конфигурацию)

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

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

Коллеги, добрый вечер!

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

Скрин полосы во вложении. Может кто сталкивался с таким кейсом.

Нравится

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

Здравствуйте, Дмитрий!

Дизайн, указанной функциональности, присутствовал в более ранних версиях продуктов.
Он был изменен в последующих релизах. Вариантом решения задачи, в Вашем случае, является обновление приложения на более новую версию.
Запросить информацию/инструкции о обновлении приложения, Вы можете обратившись в службу поддержки support@terrasoft.ru.

Илья, добрый день!

У нас версия 7.9 сейчас.

Дмитрий, отображение скролл-бара зависит от браузера и его версии. На последних версиях браузеров GoogleChrome, Mozilla, Edge, указанный скрол-бар, в приложении версии 7.9 выглядит как показано на скриншотах.

Подскажите, пожалуйста, название Вашей OS, название браузера и его версию.

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

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

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

Нравится

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

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

Задачу можно решить с помощью бизнес-процесса. Дизайн процесса будет выглядеть следующим образом:
1. Стартовый сигнал по добавлению записи в объект Лид.
2. Читать данные в лиде, где Id = Пункт 1. Id
3. Читать данные в контакте, где Id = Пункт 2. Ответственный. Подразумевается, что ответственный в лиде и есть менеджер, которому необходимо отправить уведомление.
4. Отправить письмо, в поле Кому указать Пункт 3. Email.
5. Добавить активность, в активности указать Лид = Пункт 2. Id
6. Элемент “Исключающее ИЛИ по событиям”. От этого элемента выходит два потока:
- первый поток ведет к элементу “Таймер”. В таймере указать 60 минут. После таймера добавить элемент “Изменить данные” в активности, где Id = Пункт 5. Id созданной записи, установить нужное состояние активности (в данном случае Просрочена)
- второй поток ведет к элементу “Обработка сигнала”. Элемент будет ожидать изменение состояния активности, где Id = Пункт 5. Id созданной записи, с фильтром Состояние = Выполнена.

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

Описанная задача может быть решена созданием бизнес-процесса. Логика процесса:
1) Стартовый сигнал по событию добавления записи в объект "Лид"
2) Элемент "Добавить данные" для создания записи в объекте "Активность". Необходимо заполнить поля:
Тип
Категория
Ответственный
Заголовок
Дата начала
Дата завершения
Лид
3) Элемент "Добавить данные" для создания уведомления. Необходимо заполнить следующие поля:
NotificationType: [#Справочник.Тип уведомлений.Reminding#]
Время: [#Системная переменная.Текущее значение даты и времени#]
Кому: [#Ответственный#]
Объект: [#Справочник.Объект раздела (представление).Активность#]
Уникальный идентификатор заголовка: [#Создать активность.Id созданной записи#]
4) Конец процесса.

В результате при создании лида будет запущен созданный процесс, который создаст активность и уведомление по активности

Большое спасибо за помощь. :smile:
Еще такой вопрос: если создавать активность и по активности выводить уведомление в панель - все отлично работает. Но если я вывожу уведомление по созданию нового контакта без активности, то уведомление как бы приходит, но в таком виде: 30 и звоночек не появляется.
ContactNotficationProvider в схемах присутствует. В чем может быть проблема?

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

А провайдер зарегистрирован? Подобная тема обсуждалась здесь.

Добрый вечер, спасибо за отклик.
ContactNotificationProvider шел изначально в сборке
, его тоже необходимо дополнительно регистрировать?
Не подскажите какими средствами осуществлять запуск sql скриптов в bpmonline 7.9, чтобы осуществить регистрацию?

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

Для выполнения sql запросов в системе Вы можете воспользоваться партнерским решением https://marketplace.terrasoft.ru/app/49

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

Добрый день!
Пользуемся Вашим продуктом (Sales) второй год, разрабатываем собственные схемы бизнес-процессов под нужды предприятия. Назрела проблема с отработкой бизнес-процессов пользователями, а именно в их желании вернуться на предыдущий этап (активность) в связи с тем, что завершили ее "случайно", либо ситуация требует корректировки бизнес-процесса "задним числом".
Можете поделиться какими-нибудь наработанными решениями по данному вопросу?
Нами было проработано два варианта решения задачи.
1. С помощью стадий, как в процессе «Управление лидом».
Выявленные минусы:
- отсутствие наглядности схемы бизнес-процесса, если процесс нелинейный
- при большом количестве стадий процесс становится трудоемким в разработке (стандартный процесс содержит 15-17 стадий-активностей)
2. Реализация возвратов на предыдущий этап с помощью соответствующего результата в Активности.
Выявленные минусы:
- утяжеление схемы бизнес-процесса из-за дополнительных связей
- необходимость дополнительных условий в случае, если процесс имеет несколько веток, в итоге соединяющихся в один результирующий элемент
- отсутствие возможности вернуться на любую стадию процесса
В идеале хотелось бы по сигналу запускать бизнес-процесс, который бы менял активный элемент в конкретном экземпляре уже запущенного бизнес-процесса. Однако возможно ли реализовать такой подход, чтобы при этом приложение работало стабильно?
P.S. прошу прощения, если подобный вопрос уже был. Если так, прошу указать на него ответ. Заранее спасибо.

Нравится

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

Катерина, здравствуйте!

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

Рекомендую углубится в первый предложенный вариант – “ 1. С помощью стадий, как в процессе «Управление лидом»”.
“стандартный процесс содержит 15-17 стадий-активностей” – разделить на несколько логических блоков. Каждый блок привязать к определенной стадии. Каждый блок в результате будет состоять условно из 3-4 активностей.
Далее реализовать один из подходов:
Вариант 1. С помощью модели: Один родительский процесс и множество подпроцессов. (пример – базовый процесс управления лидом).
Вариант 2. С помощью модели: Стартовый сигнал по изменению стадии – в конце БП изменять стадию на следующую.
Вариант 3. С помощью DCM/Кейс менеджмента (вариант доступен начиная с версии 7.9)

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

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

Добрый день!

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

Спасибо

Нравится

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

Добрый!

Ниже метод реализующий отправку E-mail с вложением, файл берется из детали файлы и ссылки раздела.

		public static bool SendMail(string mailto, string caption, string message, Guid FileId, string SchemaName, UserConnection userConn) {
			SchemaName+="File";
			string smtpServer = Terrasoft.Core.Configuration.SysSettings.GetValue(userConn, "SFsmtpServer").ToString();
			string from = Terrasoft.Core.Configuration.SysSettings.GetValue(userConn, "SFFrom").ToString();
			string password = Terrasoft.Core.Configuration.SysSettings.GetValue(userConn, "SFPassword").ToString();
			Stream FileA = null;
			string Fname = "";
			var esq = new EntitySchemaQuery(userConn.EntitySchemaManager, SchemaName);
			esq.AddAllSchemaColumns();
			esq.Filters.Add(esq.CreateFilterWithParameters(FilterComparisonType.Equal, "Id",FileId));
			var coll = esq.GetEntityCollection(userConn);
			foreach(var ent in coll) {
				FileA = ent.GetStreamValue("Data");
				Fname = ent.GetTypedColumnValue<string>("Name");
				break;
			}
			try {
				MailMessage mail = new MailMessage();
				mail.From = new MailAddress(from);
				mail.To.Add(new MailAddress(mailto));
				mail.Subject = caption;
				mail.Body = message;
				mail.IsBodyHtml = true;
				if (FileA != null)
					mail.Attachments.Add(new Attachment(FileA, Fname));
				SmtpClient client = new SmtpClient();
				client.Host = smtpServer;
				client.Port = 587;
 
				client.EnableSsl = true;
				client.Credentials = new NetworkCredential(from.Split('@')[0], password);
				client.DeliveryMethod = SmtpDeliveryMethod.Network;
 
				client.Send(mail);
				mail.Dispose();
				return true;
			} catch(Exception e) {
				throw new Exception("Mail.Send: " + e.Message);
			}
		}
Показать все комментарии

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

Столкнулись с проблемой работы таймера в процессе.
Сначала реализовывали все на 7.6, как вышла версия 7.9, перешли на нее. Когда работали на 7.6 таймеры работали отлично. После перехода на 7.9 таймер то срабатывает, то не срабатывает и процесс стопорится на нем (не срабатывает намного чаще). Уже пол месяца боремся с решением этой проблемы при участии тех поддержки, но все никак.
Может кто сталкивался с такой проблемой при переходе на новую версию?

С уважением,
Дмитрий

Нравится

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

Здравствуйте, Дмитрий.

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

Сергей, добрый день.

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

E нас тоже возникают проблемы с таймерами. Я зациклила процесс через таймер. Он 1 раз срабатывает иногда 2, а потом просто висит на нем и все. Ничего не происходит. Решения пока нет.

Катерина, добрый день!

Трудно определить источник проблемы по описанию. Напишите в support для детального анализа.

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

Есть код для детальки которая фильтруется по одному полю
{
name: 'activity',
schemaName: 'ActivityDetail',
type: Terrasoft.ViewModelSchemaItem.DETAIL,
filterPath: 'Participant',
filterValuePath: 'Id',
caption: resources.localizableStrings.ActivityDetailCaption,
visible: true,
leftWidth: '60%',
rightWidth: '40%'
},

Можно сделать фильтрацию по нескольким полям
Для примера не только по Participant но и для типа (Type)??

Нравится

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

Добрый день!
Такая функциональность появилась начиная с версии 7.7.
Для реализации возможности добавлять быстрые фильтры на деталь используется модуль QuickFilterModuleV2, инициализирующий конфигурацию фильтров, использующий внутри себя утилитный модуль CustomFilterViewModelV2.
Для формирования коллекции фильтров используется метод getSimpleFilter().
Базовый функционал более ранних версий не предусматривает такой функциональности, соответственно, нет готовых примеров реализации для более ранних версий системы.

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

Возникла проблема, прошу уточнить метод лечения. Справочник "Годовой оборот", содержащий записи с вилками категорий предприятий по годовому обороту имеет ограничение в 2 147 483 647 базовой валюты.
Поскольку более половины предприятий клиентов у нас имеет годовой оборот выше, чем в 2 миллиарда, ограничение (int_max) выглядит нелепым.
Что можно сделать?
Просьба полумеры не предлагать, навроде считать данные в справочнике тыс. или миллионами руб. Необходим способ, как избавиться от ограничения размера целочисленного значения определенной разрядности.

Нравится

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

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

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

Добрый день!
При попытке в VisualStudio 2012 сделать Attach к процессу "w3wp.exe", в окне Output появляются сообщения вида:

The thread '' (0x2aac) has exited with code 0 (0x0).
The thread '' (0x1c14) has exited with code 0 (0x0).
The thread '' (0x14a0) has exited with code 0 (0x0).

Attach не происходит - пустая точка останова
Пожалуйста помогите разобраться!

Нравится

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

Здравствуйте, Антон.

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

"Сергей Кy6риш" написал:

Здравствуйте, Антон.

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

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

С уважением,

Группа компаний Terrasoft

Здравствуйте Сергей!
У меня в списке всего один процесс "w3wp.exe", сделал чтобы он запускается под тем пользователем под которым выполнен вход в систему. Теперь Attach проходит дальше, но всё равно не до конца, всё также появляются сообщения вида

The thread '' (0x24f0) has exited with code 0 (0x0).
The thread '' (0x1b30) has exited with code 0 (0x0).
The thread '' (0x2544) has exited with code 0 (0x0).

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

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

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