Вопрос

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

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 версию отправляемой рассылки. 

У меня такой же вопрос

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

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

Скорее всего, он имеет в виду страницу предпросмотра в дизайнере шаблонов писем. Насколько понял из кода схемы 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

У меня такой же вопрос

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

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

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

Илья,

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

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

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

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

Привет,

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

Версия: 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 в описанном формате по нему не получится.

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

Спасибо!

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

Привет,

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

Версия: 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,

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

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

Добрый день!

Нужен совет экспертов по bpm'online marketing.

Сравниваем статистику по лидам от Google Analytics и bpm'online marketing. И заметили одно расхождение:

bpm'online marketing источником всегда ставит источник последнего входа на сайт.

Google analytics тоже всегда ставит источник последнего (за 6 месяцев) не прямого входа на сайт (причем, прямым входом Google считает даже Organic search). 

Подскажите, пожалуйста:

1. Можно ли исправить данное поведение bpm'online marketing?

2. Можно ли реализовать multi-touch модель, чтобы фиксировать все источники входа контакта на сайт (трекинг событий сайта позволяет фиксировать источники?)

У меня такой же вопрос

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

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

Google Analytics устроена значительно сложнее и её поведение может отличаться.

Когда есть utm-метки, вопросов не возникает.

Они появляются, когда utm-меток нет. Стандартный пример:

1. Посетитель перешёл на сайт по платной рекламе (paid search), посмотрел, добавил сайт в закладки.

2. Затем по закладке перешёл на сайт и заполнил контактную форму.

В итоге Google Analytics разумно посчитает, что лид пришёл по источнику paid search, а bpm'online не сможет определить источник лида, что искажает результаты работы маркетинга

В таком случае, можете реализовать анализ самостоятельно на стороне своего сайта.

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