Добрый день!

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

Нравится

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

Я бы завязался на событие добавления записи Файл и ссылка активности. И если активность =email, то начинаем обработку, иначе выход из процесса. Далее получить размер файла из БД, если он равен нулю, то ждем 15 сек. и повторяем. Если больше нуля, то уже делаем что хотели с файлом.

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

Добрый день коллеги. Был ли у кого опыт используя стандартный функционал "Веб сервис" передавать вложение из Creatio внешней системе.

Нравится

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

Добрый день!

Уточните, пожалуйста, с какой проблемой Вы столкнулись?

Требовалось нативно передавать вложения через БП

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

Добрый день . 

Есть стандартный БП Запуск процесса Отправка email сообщения группе о назначении обращения. Работает отлично. Но начиная с версии 7.17 можно отправлять вложения в  ходе БП.

Кто подскажет как модернизировать стандартный БП, что бы вложения отправлялись ? 

 

UserConnection userConnection = UserConnection;

if (userConnection.CurrentUser.ConnectionType == UserType.SSP) {

    userConnection = userConnection.AppConnection.SystemUserConnection;

}

var senderEmail = Terrasoft.Core.Configuration.SysSettings.GetValue(userConnection, 

    "SupportServiceEmail", string.Empty);

if (userConnection.GetIsFeatureEnabled("EmailMessageMultiLanguage") || userConnection.GetIsFeatureEnabled("EmailMessageMultiLanguageV2")) {

    var caseRecordId = (StartSignal1.RecordId != Guid.Empty)

        ? StartSignal1.RecordId 

        : StartSignal2.RecordId;

    var esq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "Case");

    esq.AddColumn("Group");

    var caseEntity = esq.GetEntity(userConnection, caseRecordId);

    if (caseEntity != null) {

        var adminUnitEsq = new EntitySchemaQuery(userConnection.EntitySchemaManager, "SysAdminUnit");

        adminUnitEsq.UseAdminRights = false;

        var emailColumnName = adminUnitEsq.AddColumn("Contact.Email").Name;

        var groupId = caseEntity.GetTypedColumnValue("GroupId");

        adminUnitEsq.Filters.Add(adminUnitEsq.CreateFilterWithParameters(FilterComparisonType.Equal, "[SysUserInRole:SysUser].SysRole", groupId));

        var collection = adminUnitEsq.GetEntityCollection(userConnection);

        var result = string.Join(";", collection.Select(e => e.GetTypedColumnValue(emailColumnName)));

        if (!string.IsNullOrWhiteSpace(result)) {

            var emailTemplateSender = new Terrasoft.Configuration.EmailWithMacrosManager(userConnection);

            var emailTemplateId = Terrasoft.Configuration.CaseConsts.GroupTemplateId;

            if (userConnection.GetIsFeatureEnabled("EmailMessageMultiLanguageV2")) {

                emailTemplateSender.SendEmailFromTo(caseRecordId, emailTemplateId, senderEmail, result);

                return true;

            } else {

                var emailTemplateStore = new Terrasoft.Configuration.EmailTemplateStore(userConnection);

                var emailTemplateLanguageHelper = new Terrasoft.Configuration.EmailTemplateLanguageHelper(caseRecordId, userConnection);

                var languageId = emailTemplateLanguageHelper.GetLanguageId(emailTemplateId);

                var templateEntity = emailTemplateStore.GetTemplate(emailTemplateId, languageId);

                emailTemplateSender.SendEmailFromTo(caseRecordId, templateEntity.PrimaryColumnValue, senderEmail, result);

            }

        }

    }

} else {

    Guid sendEmailToCaseGroup = new Guid("C68F5A4E-AD06-4C83-88C4-040D2480FACB");

    var manager = userConnection.ProcessSchemaManager;

    var processSchema = manager.GetInstanceByUId(sendEmailToCaseGroup);

    if (ProcessSchemaManager.GetCanUseFlowEngine(userConnection, processSchema)) {

        var flowEngine = new FlowEngine(userConnection);

        Dictionary parameter = new Dictionary();

        parameter.Add("CaseRecordId", CaseRecordId.ToString());

        flowEngine.RunProcess(processSchema, parameter);

    } else {

        var moduleProcess = processSchema.CreateProcess(userConnection);

        if (processSchema.Parameters.ExistsByName("CaseRecordId")) {

            moduleProcess.SetPropertyValue("CaseRecordId", CaseRecordId);

        }

        moduleProcess.Execute(userConnection);

    }

}

return true;

Прикрепленные файлы

Нравится

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

Добрый день.

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

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

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

На странице лендинга клиент может вложить файл. Нужно передать этот файл в лид как вложение на деталь Файлы и Ссылки.

Что то никак не можем записать его в облачную систему.

Подскажите,  какие варианты есть. Спасибо!

Нравится

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

По идее, если на сайте перед отправкой, преобразовать файл в BLOB, то никаких проблем со вставкой в BPM возникнуть уже не должно

Как вариант, можно не использовать механизм лендингов, а по веб-форме, не связанной с bpm'online, генерировать и отправлять письмо со вложениями.

Затем в bpm'online его разбирать как обычное письмо со вложениями. Подробнее см. обсуждение похожего вопроса.

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

Коллеги, спасибо!  Таки уже реализовали через лендинг). Проблема была, что лендинг только с одной табл.работает. Только преобразование файла в BLOB результата не дает. Нужно  положить файл в другую табл. Трудоемко конечно получилось, но работает).

Елена К,

Елена, добрый день! Нам тоже необходимо передавать файл в лиде, поделитесь, пожалуйста, деталями настройки)

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

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

На Marketplace опубликовано новое дополнение, расширяющее стандартные возможности системы bpm'online по работе с вложениями.

Дополнение создано командой компании "Аплана.Бизнес-решения", входящей в ГК "АйТи".

В числе новых возможностей:

- добавление детали файлового менеджера на страницу любого раздела системы с помощью редактора страницы;

- управление файловым каталогом и настройка прав доступа к нему;

- загрузка, перемещение и удаление как одного файла, так и коллекции файлов в один клик;

- установка типа хранения файлов с указанием локального сервера или базы данных;

- хранение нескольких версий файлов;

- предпросмотр файлов в окне на странице по двойному клику;

- управление доступом к файловым директориям.

Более подробная информация о дополнении доступна по ссылке: https://marketplace.terrasoft.ru/app/file-manager-bpmonline

Нравится

Поделиться

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

Лично видел как это работает. Очень круто! 

Рекомендую к установке в каждый проект.

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

Добрый день.

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

Если ли возможность добавить поля для вложения документов в объект?
Если нет, то как это можно сделать?

Нравится

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

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

Предположим речь идет о продаже (объект Продажа) и 3 документах в продаже (объект Файл и ссылка продажи). Наличие документов получится определить только по названию вложенных файлов.
Подход к решению:
1. Читать данные в “Продажа”, где Id = Id целевой продажи
2. Читать кол-во записей в “Файл и ссылка продажи”, где (Продажа = Пункт 1. Id) && (Название содержит “Первый документ” || Название содержит “Второй документ”…)
От пункт 2 условный поток: Пункт 2. Кол-во записей = 3. В таком случае изменить стадию продажи.

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

Как в BPM 5.4 on-site в разделе файлы и ссылки сделать чтобы добавленные файлы типа jpg и png отображались в виде изображений?

Сейчас же файлы, чтобы просмотреть необходимо сначала скачать.

Нравится

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

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

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

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

Требуется, добавить отдельную деталь, на страницу детали добавляем контрол Imagebox, на PageLoadComplete устанавливаем в этот контрол изображение.

Пример кода.

//получение файла
var facilityFileESQ = new EntitySchemaQuery(UserConnection.EntitySchemaManager, "FacilityFile");
var nameColumn = facilityFileESQ.AddColumn("Name").Name;
var imageWidthXHeightColumn = facilityFileESQ.AddColumn("ImageWidthXHeight").Name;
var entity = facilityFileESQ.GetEntity(UserConnection, recordId);
if (entity == null) {
          return true;
}
 
string pageSchemaCaption = entity.GetTypedColumnValue<string>(nameColumn);
string imageWidthXHeight = entity.GetTypedColumnValue<string>(imageWidthXHeightColumn);
//установка заголовка окна
Page.AddScript(string.Format("document.title = \"{0}\""""

"Романов Евгений Владимирович" написал:PageLoadComplete

PageLoadComplete - это процедура? Где она находится, не могу найти.

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

PageLoadComplete это событие которое есть на каждой странице.

Вот скриншот на примере страници Звонка.

День добрый уважаемые коллеги!!!

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

Я так понял, что надо внести изменения на страницу "Базовая страница файла и ссылки", но там нельзя добавить элемент типа Imagebox.
Вот скриншот: http://joxi.ru/IsRyUxjKTJChRkY7Sgc

Михаил Викторович.
Данный функционал реализован в нашем продукте BPMonline Realty. Функционал протестировали, замедлений выявлено не было.

Илья Андреевич.

Данный контрол стоит добавлять на новую страницу. (рис 1)

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

Далие следует добавить новую деталь. (рис 2)

А как создать вкладку новой детали? Я нашел несколько разных базовых страниц для деталей и не могу выбрать.

Доброе утро, Илья Андреевич

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

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

Здравствуйте,
можно ли программно присоединить к создаваемому по шаблону е-мэйлу файл, как вложение.

Е-мэйл создается с помощью стандартной ф-ии:
function SendEmailByAddress(MailUtils, TemplateFileName, Address, Subject) {
// by default 'false' means immediate message sending
// 'true' means putting message to 'Outbox' Outlook folders
var SendResult = MailUtils.SendMessage(TemplateFileName, Address,
Subject, false);
if (!SendResult) {
SendResult = false;
}
return SendResult;
}

Или может быть есть другие решения задачи?

Версия Terrasoft CRM 3.0.2.245 под Firebird.

Нравится

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

Здравствуйте Юрий,
Попробуйте воспользоватся советама в теме http://www.community.terrasoft.com.ua/forum/topic/6788

Действительно в случае с MailUtils.SendMessage(.......) получилось прикрепить вложение, добавив параметр Attachments.

Еще вопрос можно ли аналогичное действие реализовать при создании е-мэйла через MailUtils.CreateMessage(TemplateFileName, MailAddress, MailSubject).
Просто подстановка еще одного параметра Attachments не проходит, выдается ошибка (насчет, количество параметров не соответствует).

Используйте из scr_MailUtils

function CreateEmptyMessageWithAttachments(MailAddress, MailSubject, BodyFormat,
	CodePage, Importance, Attachments)

Евгений,
к сожалению в этой версии (3.0.2.245) в scr_MailUtils функции CreateEmptyMessageWithAttachments нет.
Есть только:

function CreateEmptyMessage(MailAddress, MailSubject) {
	var MailUtils = GetMailUtils();
	MailUtils.CreateEmptyMessage(MailAddress, MailSubject);
}
 
function CreateMessageFromTemplate(TemplateFileName, MailAddress, MailSubject) {
	var MailUtils = GetMailUtils();
	MailUtils.CreateMessage(TemplateFileName, MailAddress, MailSubject);
}

Вы можете выложить Текст скрипта scr_MailUtils?

Да, выкладываю.

Выложите именно текст скрипта а не сам сервис (чуть внимательнее ;))

Выкладываю, текст скрипта

Добавьте в скрипт этот код

function CreateEmptyMessageWithAttachments(MailAddress, MailSubject, BodyFormat,
	CodePage, Importance, Attachments) {
	if (!GetCanCreateMessage(true)) {
		return;
	}
	var MailUtils = GetMailUtilsWithoutMacroses();
	if (IsEmptyValue(MailAddress)) {
        MailAddress = '';
	}
   	if (IsEmptyValue(MailSubject)) {
        MailSubject = '';
	}
	if (IsEmptyValue(BodyFormat)) {
        BodyFormat = 1;
	}
   	if (IsEmptyValue(CodePage)) {
        CodePage = '';
	}
   	if (IsEmptyValue(Importance)) {
        Importance = 1;
	}
	MailUtils.CreateEmptyMessage(MailAddress, MailSubject, BodyFormat,
		CodePage, Importance, Attachments);
}

А потом попробуйте его вызвать.
50/50 что заработает т.к. непонятна версия вашей библиотеки TSOutlookLibrary

Чем всё закончилось?

На вызов:
MailUtils.CreateEmptyMessage(MailAddress, MailSubject, BodyFormat, CodePage, Importance, Attachments);
появляется ошибка:
Недопустимое число аргументов или присвоение значения свойства.

Эх....
Похоже в вашей версии этого нет.

Да, видимо так.
Похоже это добавили начиная с версий 3.0.4.

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

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

Инна Безверхняя,
II линия службы поддержки Terrasoft

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

Нередко при работе с Terrasoft CRM возникает необходимость отправить своему сотруднику оповещение о задаче (или инциденте). В стандартном приложении Terrasoft CRM подобный функционал реализован при помощи предварительного создания шаблона e-mail по задаче.
Но не менее удобный функционал также может пригодиться: отправка оповещения о задаче во вложении к письму с возможностью написания своему коллеге личное сообщение в самом теле письма.
Постараюсь как можно более подробно описать алгоритм реализации подобного функционала.

Предлагаю воспользоваться функцией, описанной в scr_mailUtils CreateEmptyMessageWithAttachments. Ниже приведен пример непосредственного создания сообщения.

1. Создать файл MSWord с расширением dot. Особенность этого файла - его структура - это закладки (BookMarks), которые используются для автоматической замены значений, которые можно вытянуть из выборки данных необходимых для формирования шаблона. В прикрепленном файле высылаю пример - это таблица, в которую будут заноситься данные из конкретной выборки.

2. На необходимое действие нужно добавить функционал по созданию сообщения с вложением. Например, этот функционал можно добавить на какую-либо кнопку. Лучше всего воспользоваться базовой функцией CreateEmptyMessageWithAttachments. Ниже приведен пример ее использования, а также динамическое редактирование файла-шаблона.
Пример открытия файла:

 var WordRecord = OpenWordTemplate('C:\\TestReport.dot');

Пример создания выборки данных:

var Datasets = GetNewDictionary();
var Dataset = Services.GetNewItemByUSI('ds_Contact');
//здесь можно наложить необходимые фильтры
Dataset.Open();
AddDatasetToDictionaryByUSI(Datasets, 'Contacts', Dataset);
return Datasets;

Для заполнения документа-шаблона можно использовать функцию ReplaceWordBookmarks(WordInfo, Datasets). Как параметры ей передаются файл и созданный датасет. Только в этой функции созданный документ с заполненными значениями открывается, а его можно сохранить во временных документах на диске, а после прикрепления к письму удалять.

Пример непосредственного использования функции CreateEmptyMessageWithAttachments:

var Attachments = System.CreateObject('TSObjectLibrary.StringsList');
Attachments.Add(// необходимо указать полный путь к сохраненному документу);
CreateEmptyMessageWithAttachments(MailAddress, MailSubject, BodyFormat, CodePage, Importance, Attachments);
DeleteFilesFromStringsList(Attachments);

Также можно использовать не только сохраненный на диске файл, но и загружать его из библиотеки, используя базовую функцию поиска файла по коду FindFileInLibraryByCode(Code)

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

С уважением,
Мельникова Екатерина

Нравится

Поделиться

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