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

Нравится

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

Здравствуйте, Олег!

В версии 7.10 в системе будет возможность настраивать DCM для всех разделов в системе.

Это, конечно, здорово. Но ответ на вопрос хотелось бы получить. С переходом между стадиями разобрался (создал объект и наполнил его доступными переходами, по примеру раздела "Продажи"). Как сделать две финальных стадии на выбор? (Как в тех же продажах)

UPD: Разобрался. выгружаем md файл. Меняем в нем UId схемы, UId колонки стадии, имя самой схемы, загружаем обратно, открываем через мастер, делаем что душе угодно.

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

Версия приложения: 7.9.2
После настройки интеграции с LDAP - получаем информационное сообщение, что синхронизация выполняется в "фоновом режиме", по факту завершения вы получите уведомление.

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

Нравится

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

Добрый день.

Илья, запустить процесс синхронизации вы можете либо сохранив изменения в окне настроек синхронизации с LDAP, либо в разделе Организационная структура выполнив действие Синхронизировать с LDAP.

В случае если в Журнале процессов нет записей о запуске синхронизации, это может означать, что настройки синхронизации были выполнены не корректно. Рекомендуем проверить настройки синхронизации согласно инструкции (прилагаю).
При возникновении ошибок синхронизации вы сможете увидеть их описание в процессе синхронизации в Журнале процессов (если процесс будет в состоянии Ошибка, вы сможете скачать описание ошибки). В логах вы увидете более подробную информацию об ошибке. Прилагаю инструкцию по включению логирования LDAP.

Спасибо за предоставленные инструкции, подскажите пожалуйста существует ли способ кастомизации списка атрибутов импортируемых для контакта из LDAP
LDAP Integration Settings (по какой-то причине никак не удается вставить изображения в комментарий)
Список выглядит "конечным", очевидного способа как либо его расширить в интерфейсе не видно.
Хотя среди атрибутов AD есть еще множество данных, те же дополнительные контактные данные
AD Contact Info
(по какой-то причине никак не удается вставить изображения в комментарий)
Существует ли способ расширить набор полей интегрируемых с LDAP ?

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

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

Хотелось бы произвести каким либо способом - пакетный или массовый импорт схем выгруженных в формате MD-файлов. (т.к. их достаточно много)

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

Нравится

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

Здравствуйте, Илья.

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

Подробное описание работы с утилитой и примеры вы можете найти по данной ссылке: https://academy.terrasoft.ru/documents/technic-sdk/7-9/rabota-s-utilito….

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

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

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

У новых пользователях этот ящик отобразился в списке почтовых ящиков, однако синхронизация не происходит, появляется ошибка: ”Для принятия почты необходимо настроить синхронизацию с почтовым ящиком”,если просто отправить письмо -то оно отправляется, и в исходящих появляется, настройки для синхронизации выставлены:
!
,подскажите, пожалуйста в чем может быть проблема? :sad:

Нравится

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

Здравствйуте, Мария!

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

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

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

Здравствуйте, Мария!

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

Эту проблему можно решить с помощью бизнес процесса.

Пример реализации:

1) Стартовый сигнал – создание активности с типом «Email» и поле «Кому» содержит общий адрес службы поддержки;
2) Добавление Пользователя на деталь «Участник активности», заполнить поля:
- «Активность» = Id созданной активности;
- «Участник» = контакт необходимого пользователя;
- «Роль» = получатель;
3) В средствах связи Контакта пользователя должен быть добавлен ящик тех. поддержки.

Здравствуйте! Ранее пример бизнес процесса выше корректно работал, но недавно перестали добавляться активности на панель остальных пользователям, подскажите, пожалуйста, было ли какие-то изменения в плане логики e-mail активностей в 7.10, или в чем может быть причина, что перестали добавляться активности?

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

Начиная с версии 7.10.0 отображение писем в коммуникационной панели происходит не на основании записи в "Участники активности", а но основании записи в "Email message".

Для исправления ситуации необходимо изменить пункт 2 ранее предоставленной инструкции и добавлять того же контакта в объект "Email message" с ролью «Получатель».

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

Добрый день, Мария!

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

Рекомендую проверить фильтр в стартовом сигнале, обязательно должно присутствовать условие "Кому" содержит "email@yourdomain.com".

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

1. В стартовом сигнале вместо фильтра по "Кому" необходимо указать фильтр "От кого" содержит "email@yourdomain.com".
2. Добавление пользователя в объект "Email message" с ролью «Отправитель».

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

Здравствуйте, коллеги!

Начиная с версии 7.11.2 необходимо внести изменения в данный процесс: при добавлении записи в "Email message" необходимо также заполнять поле "MailboxSyncSettings" = почтовому ящику, который синхронизируется.

Пример реализации:

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

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

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

Передаю dlData.Dataset.ValAsDateTime('CreatedOn') как параметр sql функции.
Тип параметра sql функции-datetime.
Посмотрела запрос с передаваемыми параметрами в SQL Profiler.

передается в формате: ‘WED MAR 15 14:02:42 UTC+0400 2017’

Возможно ли конвертировать CreatedOn для передачи в качестве параметра в формате datetime (‘2017-03-15 14:02:42.000’)?

Версия 3.2.0.90

Спасибо.

Нравится

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

У меня вызов процедуры с параметром-датой работает так:

	var DepartmentID = edtDepartment.Value;
	var DateFrom = dlDatePeriod.Dataset('DateFrom');
	var DateTo = dlDatePeriod.Dataset('DateTo');
	var SpecialityID = dlSpeciality.Dataset('ID');
	RefreshAchievmentBoardRSETable(ContactIDs,	DepartmentID, SpecialityID,	
		DateFrom, DateTo);
//...
 
function RefreshAchievmentBoardRSETable(ContactIDs,	DepartmentID, SpecialityID,	
	DateFrom, DateTo){
   	var Params = System.CreateObject('TSObjectLibrary.Parameters');
	AddParameter(Params, pdtUnicodeString, ContactIDs).Name = 'ContactIDs';
	AddParameter(Params, pdtGUID, DepartmentID).Name = 'DepartmentID';
	AddParameter(Params, pdtGUID, SpecialityID).Name = 'SpecialityID';
	AddParameter(Params, pdtDateTime, DateFrom).Name = 'DateFrom';
	Params.ItemsByName('DateFrom').DateTimeKind = dtkDate
	AddParameter(Params, pdtDateTime, DateTo).Name = 'DateTo';
	Params.ItemsByName('DateTo').DateTimeKind = dtkDate
	var SQL = 'exec dbo.tsp_PrepareAchievmentBoardRSE :ContactIDs, :DepartmentID, :SpecialityID, :DateFrom, :DateTo ';
	Connector.DBEngine.ExecuteCustomSQL(SQL, Params);	
}

Здравстсуйте Алексанр.

У меня тоже есть(работающий) пример процедуры.
Есть ли пример table-valued функции ?

Есть ли функции конвертации дат, как в SQL?

Спасибо.

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

О работе с датами см. тут.

Здравствуйте Александр.

"О работе с датами см. тут." - очень помогло. Работает.
"переделанный sq." - этот вариант тоже попробую.

Спасибо !

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

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

Нравится

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

"Коновалов Игорь" написал:ContainerContainer

Ну если это контейнер, то наверняка он описан в diff-е. К нему можно приписать св-во visible, забиндить на атрибут, атрибут задавать в onEntityInitialized через функцию. Дефолт, как бы)

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

У ActionsDashboardModule есть свойство headerVisible (отвечает за отображение панели стадий), которое по умолчанию true. Можно это свойство забиндить на метод, в котором возвращать true/false в зависимости от необходимого условия.

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

Кто сталкивался с тем, что необходимо настроить , допустим, обязательность заполнения поля А по одному из нескольких значений поля В?
Т.е. поле А становится обязательным для заполнения если в поле В выбирается либо В1, В2 или В3 значения.
Каким образом реализовать такую логику? Как создать массив для данных значений?

"RequiredА": {
        "ruleType": BusinessRuleModule.enums.RuleType.BINDPARAMETER,
        "property": BusinessRuleModule.enums.Property.REQUIRED,
        "conditions": [
                {
                        "leftExpression": {
                                "type": BusinessRuleModule.enums.ValueType.ATTRIBUTE,
                                "attribute": "В"
                        },
                        "comparisonType": Terrasoft.ComparisonType.EQUAL,
                        "rightExpression": {
                                "type": BusinessRuleModule.enums.ValueType.CONSTANT,
                                "value": "В1"
                        }
                }
        ]
}

Нравится

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

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

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

В системе есть справочник, например, "Состояние активности". В нем есть поле "Конечное". На странице редактирования активности, которая создана по процессу, при выборе в поле "Состояние" значения, у которого указан признак "Конечное", система делает поле "Результат" обязательным для заполнения.

Пример можно найти в схеме ActivityPageV2 в правиле BindParameterRequiredResultToStatus.

Алексей, благодарю:wink:

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

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

У нас записи звонков выкладываются на ftp сервер с авторизацией. Нам нужно чтобы эти аудиозаписи можно было прослушать из bpm. Мы пробовали добавить в адрес логин и пароль, но при первом прослушивании браузер всё равно выводит форму авторизации. Возможно есть способ авторизоваться в фоне при входе пользователя?

Нравится

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

Здравствуйте, Богдан!

Насколько знаю стандартные интеграции работают не через FTP, но для такого кейса можно рассмотреть написание дополнительного модуля авторизации с использованием возможностей bpm, например такого: http://www.csharpcoderr.com/2012/08/autorized-ftp-server.html

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

Версия 7.9.2.2410
Нужно сделать несколько похожих запросов выбора контакта и если какой то вернет ID запустить БП.
Как я понял запросы можно сделать и в БП.
Вот пример запроса:
Выбрать контакта у которого поле1 > значение1
и есть активности где активность.поле1 = значение2
Много запросов я не строил но документации есть полно.
Решил строить и выполнять запрос при нажатии на кнопку,

var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
rootSchemaName: "Contact"});
esq.addAggregationSchemaColumn("Id", Terrasoft.AggregationType.COUNT, "Id");

var exists = this.Terrasoft.createExistsFilter("[Activity:Contact].Name");
                                       
esq.filters.addItem(exists);

для проверки Запроса должна работать функция esq.GetSelectQuery(), но выдает - esq.getSelectQuery is not a function
будет 4-8 запросов, меняться будет только значение1 и значение2

Нравится

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

Добрый день, Виталий!

К сожалению, GetSelectQuery - это серверная функция, вызвать ее можно только в C# коде. На клиентской стороне получить текст запроса в данный момент нельзя.

Используйте метод executeQuery.

"Мотков Илья" написал:К сожалению, GetSelectQuery - это серверная функция, вызвать ее можно только в C# коде.

Подозревал это, а как продебажить код С# в БП?
"Мотков Илья" написал:Используйте метод executeQuery.

Примера я не нашел нигде, ни здесь ни в гугле не нашел примеров и через отладчик.

Делаю через БП, будет 1 запрос, остальное кодом переберу, проблема в добавлении дополнительных фильтров, вот что сейчас есть:

UserConnection userConnection = Get<UserConnection>("UserConnection");
var esqContact = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
esqContact.AddColumn("Name");
var exists = esqContact.CreateExistsFilter("[Activity:Contact:Id].Id");
var subQueryFilters = new EntitySchemaQueryFilterCollection(esqContact, LogicalOperationStrict.Or);
subQueryFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal, "Result", "b85afbbc-8c0b-472a-8808-680911ceec75"));
exists.SubFilters.AddItem(subQueryFilters);
 
esqContact.Filters.Add(exists);
 
var esqOptions = new EntitySchemaQueryOptions()
{
    PageableDirection = PageableSelectDirection.First,
    PageableRowCount = 1,
    PageableConditionValues = new Dictionary<string, object>()
};
 
var Contact = esqContact.GetEntityCollection(userConnection, esqOptions);
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "CreateActivityForContact", esqContact.GetSelectQuery(userConnection).GetSqlText());
return true;

ошибку выбивает на .SubFilters.AddItem, но я видел примеры таких решений на комюнити и в академии

Решил, если написать так:

UserConnection userConnection = Get<UserConnection>("UserConnection");
var esqContact = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
esqContact.AddColumn("Name");
 
var GroupFilters = new EntitySchemaQueryFilterCollection(esqContact, LogicalOperationStrict.Or);
GroupFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "[Activity:Contact:Id].Result", "b85afbbc-8c0b-472a-8808-680911ceec75"));
GroupFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "[Activity:Contact:Id].Result",  "6e6b0240-dd96-4db7-b549-2d4c468ae035"));
GroupFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "[Activity:Contact:Id].Result",  "2394c81b-cad7-4bd0-9404-4b72772a8f83"));
GroupFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "[Activity:Contact:Id].Result",  "608a810c-396d-49fd-851b-9e7f39b9dbf7"));
 GroupFilters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "[Activity:Contact:Id].Result",  "c73d5e1f-978c-4f62-9a3f-80d24a5d389d"));
esqContact.Filters.Add(GroupFilters);
 
var Contact = esqContact.GetEntityCollection(userConnection);
Terrasoft.Configuration.MsgChannelUtilities.PostMessage(userConnection, "CreateActivityForContact", esqContact.GetSelectQuery(userConnection).GetSqlText());
return true;

то получится это:

SELECT
	[Contact].[Name] [Name]
FROM
	[dbo].[Contact] [Contact] WITH(NOLOCK)
WHERE
	EXISTS (
SELECT
	[Activity].[Id] [Id]
FROM
	[dbo].[Activity] [Activity] WITH(NOLOCK)
WHERE
	[Contact].[Id] = [Activity].[ContactId]
	AND ([Activity].[ResultId] = @P1
	OR [Activity].[ResultId] = @P2
	OR [Activity].[ResultId] = @P3
	OR [Activity].[ResultId] = @P4
	OR [Activity].[ResultId] = @P5))

как объяснить ошибку?
если я прописал

var esqContact = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
esqContact.AddColumn("Name");
esqContact.AddColumn("Id");
....
foreach(var Contact in Contacts) {
	 var Contact = Contact.GetTypedColumnValue<Guid>("Id");
}
....

другие поля нормально видит и выбирает

"Радчук Виталий Владимирович" написал:как объяснить ошибку
если я прописал

Приведите весь код, вероятно ошибка не в esqContact.AddColumn("Id");, а в моменте получения данных по этой колонке, и стоит использовать алиас. var contactIdColumnName = esqContact.AddColumn("Name");
и уже вот имя записанное тут contactIdColumnName использовать при получении.

"Радчук Виталий Владимирович" написал:как объяснить ошибку
если я прописал

Приведите весь код, вероятно ошибка не в esqContact.AddColumn("Id");, а в моменте получения данных по этой колонке, и стоит использовать алиас. var contactIdColumnName = esqContact.AddColumn("Name");
и уже вот имя записанное тут contactIdColumnName использовать при получении.

вот код

UserConnection userConnection = Get<UserConnection>("UserConnection");
var esqContact = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Contact");
esqContact.AddColumn("Name");
esqContact.AddColumn("Id");
var UsrCounterTOLLColumn = esqContact.AddColumn("UsrCounterTOLL");
UsrCounterTOLLColumn.OrderByAsc(1);
var CreatedOnLColumn = esqContact.AddColumn("CreatedOn");
CreatedOnLColumn.OrderByAsc(2);
 
esqContact.Filters.Add(esqContact.CreateFilterWithParameters(FilterComparisonType.Equal,
 "UsrContactStage", "b9f5501f-d028-4547-b694-ea7c2dbf8006"));
фильтры
var Contacts = esqContact.GetEntityCollection(userConnection);
foreach(var Contact in Contacts) {
	 var contact = Contact.GetTypedColumnValue<Guid>("Id");
}

нужна именно айдишка для дальнейшего выполнения БП

все получилось:

var IdColumnName = esqContact.AddColumn("Id").Name;
...
Set("Contact",  Contact.GetTypedColumnValue<string>(IdColumnName));
Показать все комментарии

Добрый день!

Кто разбирается одновременно в bpm'online и лицензировании Microsoft?

Помогите посчитать количество необходимых CAL-лицензий, если bpm'online устанавливается on-site на Windows Server и MS SQL Server?

Спасибо!

Нравится

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

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

Вам необходима будет одна cal лицензия для пользователя, от которого будет происходить подключение к БД. Количество пользователей приложения bpm'online значения не имеет.

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

Это с точки зрения здравого смысла и "разумной экономии" достаточно одной лицензии. С точки зрения инфоцентра Microsoft для каждого пользователя или устройства, которое пользуется WinServer или SQL Server нужна своя пользовательская или на устройство лицензия.

Правильнее обращаться в инфоцентр Microsoft, если вопрос конечно не просто умозрительный, а нужно проработать полную лицензионную чистоту.

"Галанин Артур Николаевич" написал:Правильнее обращаться в инфоцентр Microsoft

инфоцентр Microsoft ничего не знает про bpm'online :(

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

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

"Галанин Артур Николаевич" написал:Тут нужно исходить не из здравого смысла сторонних советчиков, а только из прямого мнения первоисточника. По крайней мере я советую так делать.

Спасибо! Я потому и спросил, что уверен, что кто-то выяснял уже :)

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

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