Добрый день!
Есть одна очень неприятная проблема.

Есть 10 пользователей в Террасофте.
Есть 2 общие почты, к которым эти пользователи подключены (разрешено многопользовательское использование)

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

Очень срочный вопрос.

Нравится

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

Михаил, а какая версия системы Terrasoft и какая почтовая программа используется?

7.8

Стандартный Google Mail

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

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

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

Добрый день!

Столкнулся с такой проблемой: пытаюсь отправить письмо из бизнес процесса, а получаю ошибку.
Ошибка следующая:
Terrasoft.Mail.Sender.EmailException: Плохие данные.
---> System.Security.Cryptography.CryptographicException: Плохие данные.

в System.Security.Cryptography.CryptographicException.ThrowCryptographicException(Int32 hr)
в System.Security.Cryptography.Utils._DecryptData(SafeKeyHandle hKey, Byte[] data, Int32 ib, Int32 cb, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode PaddingMode, Boolean fDone)
в System.Security.Cryptography.CryptoAPITransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount)
в System.Security.Cryptography.CryptoStream.FlushFinalBlock()
в System.Security.Cryptography.CryptoStream.Dispose(Boolean disposing)
в System.IO.Stream.Close()
в Terrasoft.Core.SecureTextDataValueType.GetValueForLoad(UserConnection userConnection, Object value)
в Terrasoft.Core.Entities.EntityColumnValue.LoadValue(Object value)
в Terrasoft.Core.Entities.EntityColumnValueCollection.ForceLoadColumnValue(String name, Object value)
в Terrasoft.Core.Entities.Entity.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap)
в Terrasoft.Core.Entities.EntityCollection.LoadShallow(IDataReader dataReader, Dictionary`2 columnMap, Boolean needClear)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntitySchemaEntityCollection(UserConnection userConnection, IDataReader dataReader)
в Terrasoft.Core.Entities.EntitySchemaQuery.GetEntityCollection(UserConnection userConnection)
в Terrasoft.Mail.SmtpClient.CreateMailCredentialByAddress(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.CreateSmtp(String address, Boolean ignoreRights)
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
--- Конец трассировки внутреннего стека исключений ---
в Terrasoft.Mail.SmtpClient.Send(EmailMessage emailMessage, Boolean ignoreRights)
в Terrasoft.Core.Process.Configuration.AutoEmailUserTaskSender.Execute(IEmailUserTaskMessageProvider messageProvider, ProcessExecutingContext context)
в Terrasoft.Core.Process.Configuration.EmailTemplateUserTask.InternalExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)

При разборе полётов определил что исключение вываливается в методе CreateMailCredentialByAddress класса SmtpClient, строка mailboxESQ.GetEntityCollection(_userConnection);

private MailCredentials CreateMailCredentialByAddress(string address, bool ignoreRights = false) {
var mailboxESQ = new EntitySchemaQuery(_userConnection.EntitySchemaManager, "MailboxSyncSettings");
EntitySchemaQueryColumn userNameColumn = mailboxESQ.AddColumn("UserName");
EntitySchemaQueryColumn userPasswordColumn = mailboxESQ.AddColumn("UserPassword");
EntitySchemaQueryColumn isAnonymousAuthentication = mailboxESQ.AddColumn("IsAnonymousAuthentication");
EntitySchemaQueryColumn sendEmailsViaThisAccountColumn = mailboxESQ.AddColumn("SendEmailsViaThisAccount");
EntitySchemaQueryColumn smtpHostColumn = mailboxESQ.AddColumn("MailServer.SMTPServerAddress");
EntitySchemaQueryColumn smtpPortColumn = mailboxESQ.AddColumn("MailServer.SMTPPort");
EntitySchemaQueryColumn smtpSslColumn = mailboxESQ.AddColumn("MailServer.UseSSLforSending");
EntitySchemaQueryColumn smtpTimeoutColumn = mailboxESQ.AddColumn("MailServer.SMTPServerTimeout");
IEntitySchemaQueryFilterItem senderEmailAddressFilter = mailboxESQ
.CreateFilterWithParameters(FilterComparisonType.Equal, "SenderEmailAddress", address);
mailboxESQ.Filters.Add(senderEmailAddressFilter);
if (ignoreRights) {
mailboxESQ.UseAdminRights = false;
} else {
mailboxESQ.AddRightsFilters(_userConnection.CurrentUser.Id);
}
EntityCollection mailboxEntities = mailboxESQ.GetEntityCollection(_userConnection);
var mailCredentials = new MailCredentials();
if (mailboxEntities.Count == 0) {
throw new Sender.EmailException("ErrorOnSend", MailboxDoesNotExist);
}

Entity mailbox = mailboxEntities[0];
if (!mailbox.GetTypedColumnValue(sendEmailsViaThisAccountColumn.Name)) {
throw new Sender.EmailException("ErrorOnSend", NotAllowedSendingFromThisMailbox);
}
mailCredentials.Host = mailbox.GetTypedColumnValue(smtpHostColumn.Name);
mailCredentials.Port = mailbox.GetTypedColumnValue(smtpPortColumn.Name);
mailCredentials.UserName = mailbox.GetTypedColumnValue(userNameColumn.Name);
mailCredentials.UserPassword = mailbox.GetTypedColumnValue(userPasswordColumn.Name);
mailCredentials.UseSsl = mailbox.GetTypedColumnValue(smtpSslColumn.Name);
mailCredentials.Timeout = mailbox.GetTypedColumnValue(smtpTimeoutColumn.Name) * 1000;
mailCredentials.IsAnonymousAuthentication = mailbox.GetTypedColumnValue(isAnonymousAuthentication.Name);
return mailCredentials;
}

Нравится

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

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

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

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

А по поводу алгоритма получения хэша можете сориентировать?

"Сурмачевский Евгений Александрович" написал:

А по поводу алгоритма получения хэша можете сориентировать?


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

Данные колонки необходимо использовать исключительно через EntitySchemaQuery используя формат "Secure Text"

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

Нужно в БП формировать письмо по шаблону, а также добавить туда вложение пдф файл и открыть карточку для редактирования и отправки письма.

Возникла проблема при добавлении вложения.
элементом "Добавить данные" создал активность, и потом при добавлении файла в активность(файл находится в Базе знаний, копирую оттуда) выбивает ошибка при компиляции: 'The type or namespace name 'Stream' could not be found (are you missing a using directive or an assembly reference?)'
на строке:

internal FuncStream> _recordDefValues_Data;

 

Нравится

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

Using System.IO добавили в контекст процесса?

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

Виталий, здравтсвуйте!

Вам необходимо заполнить значения полей:

  • Тело
  • Тело письма в формате HTML

В поле "Тело" необходимо задать html код письма, добавив значения необходимых параметров из процесса. Единственная сложность - двойные кавычки в html необходимо экранировать (так, как C# будет считать кавычки окончанием строки).

Быстрого способа и сформировать письмо и добавить вложение, к сожалению, нет. Для заполнения поля "Тело" можно сделать приблизительно следующее:
1) Создать шаблон
2) Выполнить запрос к таблице EmailTemplate для получения значения поля Body созданного шаблона
3) Перенести значение этого поля, заменив макросы на параметры процесса и экранировав кавычки.

Здравствуйте! а есть ограничение по объему вложенных файлов? в рамках процесса нужно будет отправлять письма с вложенными файлами и там их большое число. боюсь упереться в ограничения при отправке

Zaitova Liubov,

Здравствуйте, Любовь!

Ограничение на объем файлов регулируется в системной настройке - 

Максимальный размер загружаемого файла.

С помощью данной системной настройке ВЫ можете увеличить или уменьшить ограничение на загружаемые файлы.

В 7.17.1 добавится возможность без кода, действиями в БП манипулировать с файлами, находящимися на деталях, в том числе и формировать письма со вложениями.

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

 Подскажите каким именно способом это делать

Максим, см. описания релизов.

7.17.1:

  • Появилась возможность автоматизировать управление файлами в бизнес-процессах. Для этого реализован элемент бизнес-процесса [Обработать файл], который позволяет вычитывать и копировать файлы, которые находятся на детали [Файлы и ссылки]. Вычитанные файлы формируют исходящую коллекцию, которую можно использовать далее в процессе. Например, элемент [Отправить email] может добавлять нужные файлы в виде вложений в письмо.

    Данный элемент работает только с теми файлами, которые хранятся в базе данных приложения. Если у вас настроено хранение файлов в стороннем хранилище (в файловой системе или облаке), то данный элемент не сможет с ними работать. API для работы с файлами из сторонних хранилищ появится в ближайших релизах.

    Пример использования элемента [Обработать файл]

    business_process_process_file

     

  • Добавлен новый параметр процесса “Файл”. Этот параметр хранит информацию о файле и предназначен для передачи этой информации между элементами и бизнес-процессами. 
  • В элементе [Отправить email] реализована возможность добавлять вложенные файлы в отправляемые письма. Для этого в элемент необходимо добавить параметр и указать в качестве источника данных необходимые файлы. Список файлов можно получить из элемента [Обработать файл]. 

7.17.2

  • Реализована возможность пользовательскими инструментами настроить генерацию отчетов Word и Fast Report в элементе бизнес-процесса [Обработать файл]. Сгенерированные отчеты можно добавить в любую запись на деталь [Файлы и ссылки] или использовать далее в процессе, например, отправить вложением по email.

Зверев Александр А есть уже какая-то подробная инструкция или статья на эти тему с подробно расписанным примером?

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

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

Подскажите пожалуйста, можно ли в bpm настроить интервал синхронизации с почтой? Например, подключено несколько почтовых ящиков (ящик1@mail.ru, ящик2@mail.ru). Мне нужно, чтобы письма с ящика ящик1@mail.ru синхронизировались в течении 1 минуты, а ящик2@mail.ru - 60 минут.
Присутствует системная настройка "Интервал синхронизации с почтовым ящиком", но эта настройка применяется, как я понимаю, для всех ящиков.

Нравится

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

Здравствуйте, Елена!

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

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

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

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

Нравится

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

"Гольфельд Елена Андреевна" написал:где отображаются все эти письма?

По-сути коммуникационная панель и есть раздел для писем. Все письма хранятся как активности с типом "email". Так что можно в теории можно:
а) убрать/подредактировать фильтр в активностях, чтобы выводились письма
б) создать доп раздел, забиндить его на "Activity", установить фильтры: активности с типом email и для, допустим, текущего контакта

"Варфоломеев Данила" написал:По-сути коммуникационная панель и есть раздел для писем.

Согласна с вами, но хотелось бы иметь именно раздел в панели слева.

"Варфоломеев Данила" написал:а) убрать/подредактировать фильтр в активностях, чтобы выводились письма

Пробовала делать фильтр в активностях, в котором указывала Тип = Email, система ничего не находит по данному фильтру. Хотя письма в системе есть.

"Варфоломеев Данила" написал:б) создать доп раздел, забиндить его на "Activity", установить фильтры: активности с типом email и для, допустим, текущего контакта

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

"Варфоломеев Данила" написал:забиндить его на "Activity"

Не подскажите, как это сделать?

"Гольфельд Елена Андреевна" написал:Пробовала делать фильтр в активностях, в котором указывала Тип = Email

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

getFilters: function() {
	//гора кода
	filters.add("NotEmailFilter", Terrasoft.createColumnFilterWithParameter(
		Terrasoft.ComparisonType.NOT_EQUAL, 
		"Type", 
		ConfigurationConstants.Activity.Type.Email));
	//...еще хуже
},

"Гольфельд Елена Андреевна" написал:как-то стандартными средствами.

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

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

"Варфоломеев Данила" написал:Ну вот как-то так. На скорую руку, получилось на удивление быстро. Однако всё равно требуется полазить по конфигурации, написать совсем немного кода)

Вы молодец! Это новый раздел? Не поделитесь как вы реализовали данный функционал?

"Гольфельд Елена Андреевна" написал:Не поделитесь как вы реализовали данный функционал?

1) Создать через мастер разделов новый раздел (заполняете заголовок, код, рабочее место, сохраняете). Вкладку "страница" трогать не нужно
2) Зайти в конфигурацию, найти 2 только что созданных схемы. У меня раздел назывался Emails, соответственно и названия у схем похожие
pic
3) Поменять код схемы раздела на

define("TmEmails1Section" /*вместо TmEmails1Section название схемы раздела*/, ["ConfigurationConstants"], function(ConfigurationConstants) {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {
			getFilters: function() {
				var filters = this.callParent(arguments);
				filters.add("NotEmailFilter", this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL, "Type", ConfigurationConstants.Activity.Type.Email
					));
				return filters;
			}
		}
	};
});

4) Поменять код схемы страницы на

define("TmEmails1Page" /*вместо TmEmails1Page название схемы страницы*/, [], function() {
	return {
		entitySchemaName: "Activity",
		details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
		diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
		methods: {},
		rules: {}
	};
});

Важный момент: справа внизу в свойствах надо указать родительский объект "Страница редактирования активности ( UIv2 )"
5) все. почистить кеш, перезайти, появится развел в указанном ранее рабочем месте. Осталось только настроить колонки

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

"Владимир Соколов" написал:Вроде получилось быстро. Но при этом находясь в новом разделе, все равно выделение слева происходит на раздел Activity.

Ну можно создать представление VwActivity и на основании представления сделать уже раздел. Если в разделе нужно создавать/редактировать/удалять записи - повесьте на представление триггеры.

"Владимир Соколов" написал:И фильтры у разделов получаются общие.

Вполне логично - группы объекта Activity хранятся в объекте ActivityFolder.

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

Коллеги, добрый день!
При добавлении почтового провайдера https://yadi.sk/i/qAZFt6NZ3Ff5du возникает ошибка https://yadi.sk/d/b6BHLNEd3Ff66r На форуме нашла похожий кейс, где советуют обновиться до последней версии. Но эта ошибка возникает на последней версии тройного бандла 7.9.1
Буду рада всем идеям и предложениям! Спасибо

Нравится

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

Здравствуйте, Елена!

Данная проблема была выявлена в версии 7.9.1 и решена в 7.9.2.
Вы можете добавить почтовый провайдер в ручную через БД или обновиться до версии 7.9.2.
Скрипт с добавлением почтового провайдера прикрепляю.

INSERT INTO MailServer (
	CreatedById,
	ModifiedById,
	Name,
	Address,
	Port,
	UseSSL,
	EmailProtocolId,
	AllowEmailDownloading,
	AllowEmailSending,
	SMTPServerAddress,
	SMTPPort,
	SMTPServerTimeout,
	UseSSLforSending,
	TypeId,
	UseLogin,
	UseUserNameAsLogin,
	UseEmailAddressAsLogin)
VALUES(
	'410006E1-CA4E-4502-A9EC-E54D922D2C00',
	'410006E1-CA4E-4502-A9EC-E54D922D2C00',
	'name',
	'imap.xxxx.com',
	993,
	1,
	'65BEAF50-B599-4207-B6E2-586DFA9562A6',
	1,
	1,
	'smtp.xxxx.com',
	465,
	40,
	1,
	'844F0837-EAA0-4F40-B965-71F5DB9EAE6E',
	0,
	1,
	0)

Андрей, здравствуйте! Данное решение помогло, теперь вопрос следующий: все параметры для провайдера я указала (предоставил клиент), порты открыты, как говорит клиент, доступ к приложению открыт. Но добавить почту все равно не могу, ругается на неверный логин\пароль. Какие еще есть идеи есть на этот счет?

Здравствуйте, Елена!

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

Показать все комментарии
Часто клиенты присылают запрос в службу поддержки, указывая в копии людей, которые тоже должны быть проинформированы о ходе решения инцидента.Предлагаю в автоматических и создаваемых вручную ответах системы добавлять этих адресатов в получатели письма CC:
1 комментарий

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

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

Добрый день!

1. Подскажите, кто и как решил проблему по поиску писем?

2. Возможно ли в коммуникационной панели установить строку поиска писем по всем полям как в любом почтовом клиенте?

3. Если создать новый раздел E-MAIL, то как в нем настроить поиск писем по всем полям? Как отображать в этом разделе только письма текущего пользователя?

Нравится

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

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

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

2. Да, это возможно сделать. Для решения требуется реализовать соответствующую логику в схеме CommunicationPanelEmail:
1) Добавить строку поиска
2) Добавить кнопку поиска
3) Добавить логику фильтрации записей при нажатии на кнопку по значению, введенному в строку поиска.

3. Новый раздел на основании объекта Activity можно создать, например, через объект представления, в котором будут только письма. Далее в созданном разделе необходимо настроить доп. фильтрацию по текущему пользователю. Также необходимо реализовать корректное отображение тела письма.
Фильтровать записи (поиск по всем полям) можно использованием фильтров созданного раздела (базовый функционал).

"Новак Руслан" написал:

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

Где можно посмотреть результат отдельной реализации функционала поиска?

Здравствуйте, Евгений!

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

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

Добрый день.

Создали в "Средствах связи" в карточке контакта новый тип средства связи - "Доп.email".
В профиле карточки контакта создали поле "Доп. email" куда хотим выводить доп.email из средств связи.
Но, как видно из прикрепленного скриншота, в профиль контакта в поле "Доп. email" ничего не выводится, хотя в средствах связи указан "Доп.email" контакта.
Как подтягивать в профиль контакта "Доп.email" из средств связи, аналогично другим средствам связи?

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

Нравится

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

Здравствуйте,
Дело в том, что деталь, это отдельный объект в системе. В вашем случае объект детали "средства связи контакта": «ContactCommunication». А сама карточка контакта, другой объект (таблица в бд): "Contact", в которой самые основные средства связи продублированы, к примеру, как вы продублировали, создав поле "Доп. email". Но что бы оно заполнялось, необходимо написать соответствующую логику. К примеру, вы можете создать бизнес-процесс для этой цели, по событию создания экземпляра ContactCommunication, и в связанный контакт при этом, элементом «изменение данных», записывать сохраняемый дополнительный E-mail из детали в контакт. Подробнее про БП читайте в цикле статей на академии:
https://academy.terrasoft.ua/documents/technic-bpms/7-8/obzor-vozmozhno…

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

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

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

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

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

Добрый день!
В sales enterprice 7.8 нужно в шаблоне email выводить список продуктов с детали Продукты. Как это можно сделать? На данный момент получается выводить только отдельные колонки из карточки раздела, а нужно выводить записи с деталей.

Нравится

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

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

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