Вопрос

В элементах маркетинговых кампаний есть такой элемент "Добавить по триггеру", есть какая-то инструкция как работает данный элемент?

Нравится

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

NothingHappen,

По этой ссылке на Академии есть небольшой пример.

Хотя в целом информации по работе с данным элементом практически нет.

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

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

Это немного не то, мне нужно описание функционала данного элемента, что-то вроде такого:https://academy.terrasoft.ru/documents/marketing/7-14/element-dobavlenie-iz-gruppy?document=marketing

NothingHappen,

По этой ссылке на Академии есть небольшой пример.

Хотя в целом информации по работе с данным элементом практически нет.

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

Посмотрите эту статью в академии

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

Это не та ссылка((( Там только упоминание...

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

Добрый день, при попытке слияния двух контаков, если у проигравшего есть заказ, то процесс дедупликации падает с ошибкой: 

System.Data.SqlClient.SqlException (0x80131904): Конфликт инструкции DELETE с ограничением REFERENCE "FKZt10BIrUNMXjPYmQeSNwKs8aI". 

Конфликт произошел в базе данных "ClarinsInstall", таблица "dbo.Order", column 'ContactId'.

При отладке не увидела ContactId, среди ключей таблицы Order, по которым идет перепривязка данных (есть только CreatedById и OwnerId),

подскажите, с чем это может быть вызвано?

Нравится

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

Зверев Александр пишет:

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

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

Иначе проблема может воспроизвестись при следующем слиянии дублей.

Это как раз и значит наличие записи в Order, ссылающееся полем ContactId на сливаемый контакт. Проверьте Order в дизайнере объектов, там должно быть такое справочное поле. А если нет, то было и его удалили в объекте, но по какой-то причине осталось в базе (возможно, объект не скомпилировали). В таком случае, если есть возможность, подключитесь к БД, найдите эту запись и замените значение ContactId на null.

Зверев Александр пишет:

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

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

Иначе проблема может воспроизвестись при следующем слиянии дублей.

Кстати, не уверен, что повторное добавление поля в объект пройдёт успешно без последствий. У колонки в базе прописывается GUID в Extended Properties, он будет уже другим.

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

Привет,

Работаю с версией 7.13.4.638.

Подскажите пожалуйста, где я могу взять документацию по diff? Это мешает мне делать задачи вида:

Есть страница, на странице есть 2 контейнера типа Terrasoft.ViewItemType.GRID_LAYOUT. Необходимо перенести из одного контейнера в другой элемент.

Однако, проблема в том, что move не позволяет мне указать layout для нового контейнера, поэтому перемещение происходит, но верстка ломается.

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

Нравится

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

Насколько я знаю, какой-то внятной документации по этой теме не существует. Могу посоветовать только смотреть примеры в коде и статьях на академии.

Насколько я знаю, какой-то внятной документации по этой теме не существует. Могу посоветовать только смотреть примеры в коде и статьях на академии.

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

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

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

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

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

В частности как отправить контакту список его заказов за последние 30 дней или список обращений, на которые от него не получен ответ?

На сколько я понимаю в 7.13 есть возможность вставки только одной колонки, но никак не табличных данных. 

Нравится

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

Стандартно такой возможности нет и в маркете ничего подходящего не вижу.

Как вариант, можно попробовать программно формировать содержимое списка в специально созданном текстовом поле объекта, а потом выводить в шаблон его.

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

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

Добрый день!

Коллеги, подскажите как получить ссылку на html версию отправляемой рассылки. 

Нравится

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

Что вы имеете в виду, поясните? На что именно вы хотите получить ссылку?

Скорее всего, он имеет в виду страницу предпросмотра в дизайнере шаблонов писем. Насколько понял из кода схемы BulkEmailContentBuilder, эта информация не хранится по какому-то URL, а на ходу формируется в функции openPreviewModule:

openPreviewModule: function() {
	var config = this.getContentBuilderConfig();
	var configItems = config && config.Items;
	if (configItems && configItems.length > 0) {
		BulkEmailTemplateHelper.checkNeedUnsubscribeLink(config, function(needUnsubscribeLink, html) {
			this.needUnsubscribeLinkCallback(needUnsubscribeLink, config, html, this.openPreview);
		}, this);
	} else {
		var emailContentExporter = Ext.create("Terrasoft.EmailContentExporter");
		var emptyHtml = emailContentExporter.exportData(config);
		this.openPreview(config, emptyHtml);
	}
},
openPreview: function(config, html) {
	var previewWindow = window.open("", "printwin");
	previewWindow.document.write(html);
	previewWindow.document.close();
},

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

Не так глубоко.

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

В различных сервисах, в том же unione (через который рассылает bpmonline) для этого есть тег {{WebLetterUrl}}.  

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

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

Спасибо. 

Если подключён эластик, то можно вставить тег {{View}} на href ссылки и будет работать, но только на эластик, это их макрос.

Здравствуйте! Интересует положение дел с указанным макросом. 

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

Здравствуйте! Интересует положение дел с указанным макросом. Появился ли он в системе? 

Ничего не менялось.

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

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

Используйте приветствия

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

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

Сегментируйте подписчиков

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

  1. География подписчиков является наиболее универсальным критерием сегментации. Используйте распределение подписчиков по городам/областям/странам для формирования персонализированных предложений.

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

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

Используйте сплит-тестирование

Регулярно проводите сплит-тесты, чтобы определить, какое сообщение лучше всего подходит вашим подписчикам. Это обеспечит постоянное улучшение контента рассылок. Например, создайте два идентичных шаблона рассылки с различным текстом в теме письма, чтобы определить, какой из них привлечет больше внимания.

Постоянный анализ результатов сплит-тестов и совершенствование контента рассылок — наиболее быстрый и эффективный способ повышения как вовлеченности аудитории, так и конверсий.

Подробнее о том, как настроить и провести сплит-тест, читайте тут: 

https://academy.terrasoft.ru/documents/marketing/7-14/split-testy?document=marketing

Используйте триггерные рассылки

Триггерная рассылка реагирует на поведение подписчика. Благодаря персонализированному подходу, использование триггерных рассылок повысит вероятность фактического взаимодействия подписчика с вашими письмами.

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

Подробная информация о триггерных рассылках:

https://academy.terrasoft.ru/documents/marketing/7-14/triggernye-pisma?document=marketing

Идентифицируйте неактивных подписчиков и проводите кампании по их повторному вовлечению

Неактивных подписчиков можно идентифицировать по следующим признакам:

  1. Один и более откликов о проблемах с доставкой (“bounce”).
  2. Подписчик пожаловался на спам.
  3. Подписчик отписался от рассылки.
  4. Подписчик не взаимодействовал с письмами более месяца.

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

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

Адаптируйте верстку писем для мобильных устройств

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

Нравится

Поделиться

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

Привет,

Столкнулся с проблемой:

Версия: 7.13.4.638_SalesEnterprise_Marketing

Действие: Отладка бизнес процесса

Описание:

Версия Visual Studio - 2017 Pro

В процессе отладки серверного кода бизнес процесса столкнулся с проблемой, уже ранее описанной в теме https://community.terrasoft.ua/taxonomy/term/7738. Хотелось бы понять, для версии 7.13 возможно ли каким либо образом решить проблему просмотра переменных в режиме дебага без ошибки Cannot obtain value of the local variable or argument because it is not available at this instruction pointer, possibly because it has been optimized away, либо это невозможно. Дело в том, что невозможность посмотреть значение переменных замедляет разработку.

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

Что не помогло:

1. Заново выполнить Attach to Process.

2. Установка Suppress JIT optimization on module load в настройках дебага.

3. В Build проекта снята галка Optimize code и Debugging information = Full

Нравится

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

Alex, здравствуйте!



Вам необходимо в Options-Debugging-General также отключить флаг Enable Just My Code.

Илья,

Спасибо за ответ, 

Данная опция помогла мне чтобы устанавливались breakpoints. Я задавал ранее вопрос, https://community.terrasoft.ru/questions/neaktivnye-breakpoints-pri-otladke-biznes-processa

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

Alex, добрый день! Скажите, пожалуйста, смогли ли Вы справиться с проблемой? После обновления с 7.12 до 7.15 столкнулся с тем же самым, ничего не помогает

Вот более свежий случай, причём от него же. Судя по молчанию автора, он таки решил свой вопрос или нашёл какой-то обходной способ.

Добавить комментарий

Иван Небеддаг,

Да, справиться удалось.

Я отказался от работы с Workspace. Enable Just My Code у меня включена. Конфигурационный проект содержит только разрешенные assemblies, например Terrasoft.Common, Terrasoft.Core и тд.

Алгоритм работы, при котором работает отладка у меня:

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

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

3. Написать в студии логику, нажать на сохранить все.

4. Нажать на компилировать измененное в конфигураторе. 

5. Подключиться дебаггером к процессу IIS, установить точки останова.

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

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

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

Надеюсь, помог. Если не помог, и Ваше решение отличается от моего, напишите его суда, пожалуйста. Для истории будет полезно.

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

Привет,

Столкнулся с проблемой:

Версия: 7.13.4.638_SalesEnterprise_Marketing

Действие: Отладки бизнес процесса

Описание:

Создал бизнес процесс. В нем определил задание-сценарий. Мне нужно его отладить. Для этих целей выполнил все шаги, описанные в инструкции https://academy.terrasoft.ua/documents/technic-sdk/7-13/otladka-servernogo-koda

Столкнулся с проблемой, - все установленные мной точки останова неактивны The breakpoint will not currently be hit. 

No symbols have been loaded for this document.

Выполнил шаги по устранению этой проблемы, описанные в инструкции, однако проблема осталась актуальной.

Так же:

Версия IDE - vs2017 pro.

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

Для старта БП отправляю POST запрос при помощи postman. Запрос вида:

http://{адрес}/0/ServiceModel/ProcessEngineService.svc/RunProcess

JSON:

{

  "parameterValues": 

  [

      {"name": "IdString", "value": "A9CF364A-CE81-453E-B85D-001F788A41ED"},

      {"name": "TypeString", "value": "68E23EAE-62A2-43FE-AE33-8F41376AFBED"},

      {"name": "ID_Boss", "value": "123"}, 

      {"name": "ID_Navision", "value": "88706"},

      {"name": "DeliveryAddress", "value": "TEST"},

      {"name": "SearchName", "value": "6"},

      {"name": "name", "value": "улица, 6"},

      {"name": "OwnerId", "value": "center"}

  ],

  "schemaUId": "e18ae725-4f32-44c1-ba33-3ae749c40ed0",

  "schemaName": "UsrImportOrUpdateAccount"

}

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

pdb файлы находятся в той же папке, где и *.cs файлы.

UPD1: при открытии в IDE .cs файла бизнес процесса подсказчик IDE указывает на то, что многие классы не определены, к примеру, почеркивается ProcessSchemaManager, using Terrasoft.Core.Entities; и тд, но, как я понял, при данном виде отладки это ок и мне не нужно делать build проекта с прикрепленными к нему файлами, которые нужно отладить.

Проект использует .NET Framework 4.7

Нравится

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

Для решения проблемы попробуйте в Visual Studio изменить следующие настройки:

1) в Options->Debugging->General: Enable Just My Code - выключить

2) Suppress JIT optimization - включить

Для решения проблемы попробуйте в Visual Studio изменить следующие настройки:

1) в Options->Debugging->General: Enable Just My Code - выключить

2) Suppress JIT optimization - включить

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

Большое спасибо!

Мне помог пункт 1. Пункт 2 был выполнен по документации ранее.

AlexMatveev,

Рада была помочь!

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

Привет,

Есть вопрос

Версия: 7.13.4.638_SalesEnterprise_Marketing

Место: LDAP интеграция

Описание: Пишу интеграцию со сторонней системой.

Система передает набор данных в бизнес процесс. Среди данных есть SID формата S-1-5-21-1507001333-1204550764-1011284298-1003. В BPM настроена интеграция LDAP. В свойствах интеграции идентификатор пользователя задан как objectSid. Однако в БД в [LDAPElement].[LDAPEntryId] записана строка, по формату отличающаяся от SID. Я предполагаю, что в данное поле пишется SID, но перед этим он проходит обработку.

Вопрос: Есть ли в backend api Terrasoft метод/класс, позволяющий получить корректный SID пользователя? И если нет, то каким образом я могу выполнить преобразование из значения LDAPElement].[LDAPEntryId] в SID?

Нравится

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

Логика работы с LDAP реализована в БП SyncWithLDAPProcess, схемах LDAPSysSettingsService, SyncWithLDAPProcessHelper, LDAPUtility, LDAPUtilities. В последней встречается функция, вызывающая подозрение, что обработка заключается в банальном взятии хэша MD5:

private string GetEntryIdentityAttribute(SearchResultEntry entry, string attributeName) {
	object attributeValue = entry.Attributes[attributeName][0];
	if (!(attributeValue is byte[])) {
		return Convert.ChangeType(attributeValue, typeof(string)).ToString();
	}
	var hasher = MD5.Create();
	byte[] data = hasher.ComputeHash(attributeValue as byte[]);
	var sb = new StringBuilder(512);
	for (int i = 0; i < data.Length; i++) {
		sb.Append(data[i].ToString("x2"));
	}
	return sb.ToString();
}

Соответственно, получить обратно objectSid в описанном формате по нему не получится.

Логика работы с LDAP реализована в БП SyncWithLDAPProcess, схемах LDAPSysSettingsService, SyncWithLDAPProcessHelper, LDAPUtility, LDAPUtilities. В последней встречается функция, вызывающая подозрение, что обработка заключается в банальном взятии хэша MD5:

private string GetEntryIdentityAttribute(SearchResultEntry entry, string attributeName) {
	object attributeValue = entry.Attributes[attributeName][0];
	if (!(attributeValue is byte[])) {
		return Convert.ChangeType(attributeValue, typeof(string)).ToString();
	}
	var hasher = MD5.Create();
	byte[] data = hasher.ComputeHash(attributeValue as byte[]);
	var sb = new StringBuilder(512);
	for (int i = 0; i < data.Length; i++) {
		sb.Append(data[i].ToString("x2"));
	}
	return sb.ToString();
}

Соответственно, получить обратно objectSid в описанном формате по нему не получится.

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

Спасибо!

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

Привет,

Столкнулся с проблемой:

Версия: 7.13.4.638_SalesEnterprise_Marketing

Место: Конфигурация

Действие: https://academy.terrasoft.ru/documents/technic-sdk/7-13/perenos-izmeneniy-pri-pomoshchi-eksporta-i-importa-shem

Описание: Выбираю пакет, пытаюсь импортировать в него бизнес процесс, находящийся в *.md файле. Нажимаю на импорт из файла, выбираю файл, подтверждаю действие. Получаю сообщение, "Элемент был импортирован в пакет Custom". При этом выбранный мной в таблице пакетов пакет не custom. Решение с установкой пакета по умолчанию не помогло.

 

Нравится

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

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

Вы можете загрузить процесс в пакет Custom, а потом уже в параметрах самого бизнес-процесса внести изменения, указав Ваш пакет.

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

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

Вы можете загрузить процесс в пакет Custom, а потом уже в параметрах самого бизнес-процесса внести изменения, указав Ваш пакет.

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

Алла Савельева пишет:

Вы можете загрузить процесс в пакет Custom, а потом уже в параметрах самого бизнес-процесса внести изменения, указав Ваш пакет.

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

AlexMatveev,

Для БП пакет можно изменить в настройках, смотрите скриншот ниже:

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