Добрый день!



Нужен совет экспертов по 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 не сможет определить источник лида, что искажает результаты работы маркетинга

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

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

Изображение удалено.

О компании

LvBS – школа с европейскими ценностями и подходами, которая развивает открытое и ответственное бизнес-сообщество. Цель Львовской бизнес-школы — содействовать развитию визионеров, которые будут строить украинскую бизнес-среду. Основываясь на уникальном симбиозе бизнес-школы и католического университета, Львовская бизнес-школа берет за основу международность как главный принцип школы, с фокусом на личностном развитии каждого участника программ и мероприятий.

 

Предпосылки внедрения

До внедрения bpm’online сотрудники компании использовали несколько закрытых разрозненных клиентских баз. Это создавало хаотичность хранения информации и делало невозможным стандартизацию процесса. Сложно было собрать информацию об участниках мероприятия, за которое отвечало несколько менеджеров.  Кроме того, это влияло на взаимодействие с клиентами: сотрудники не могли оперативно начать коммуникацию, так как затрачивали дополнительное время на сбор и подготовку информации.

 

Для создания единой среды для обработки информации о взаимодействии с клиентами, ведения мероприятий, сделок и маркетинговых активностей была выбрана платформа bpm’online. Львовская бизнес-школа сделала выбор в пользу сразу двух продуктов — bpm’online sales и bpm’online marketing.

 

Основные задачи внедрения bpm’online:  

  • автоматизация процесса получения новых потребностей клиентов;
  • ведение длинных сделок;
  • выполнение маркетинговых кампаний и рассылок;
  • систематизация наследования информации сотрудниками при смене позиции в компании;
  • составление общей картины работы бизнес-школы для разработки стратегии развития.

 

Выполненные настройки

В первую очередь кастомизирован раздел [Контакты]. С помощью дизайнера страниц созданы колонки для фиксации стоимости обучения для клиента и его реквизиты. Добавлена специальная колонка для менеджеров, в которой содержится информации о правилах расчета и внесения платежей. Добавлены детали «Паспортные данные», «Программы обучения» для добавления информации о программах обучения, стоимости программ, сумме оплаты и остатке необходимого платежа. Деталь «Платежи» позволяет вносить информацию об оплатах клиента.

Изображение удалено.

Деталь «История обучения» собирает всю информацию о курсах и программах клиента, а также их статусы.

Изображение удалено.

Раздел лиды содержит три кейса, которые реализованы с помощью инструмента Case Management. Кейсы реализованы для таких потребностей: короткие программы обучения, долгосрочные программы и подписка на рассылки.

Изображение удалено.

Короткая продажа предусматривает работу только с лидом, а по кейсу долгосрочного обучения, кроме кейса в лиде, реализован кейс в разделе [Продажи]. Кроме этого, bpm’online автоматически создает продажу на соответствующей стадии лида в зависимости от кейса. 

Case Management призван упрощать работу пользователей. Благодаря этому инструменту при выборе той или иной потребности менеджер знает, что в bpm’online будет предусмотрен алгоритм действий.

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

Изображение удалено.

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

 

В продукте marketing используются рассылки и кампании, а также настроены web-формы для получения информации из посадочных страниц сайта компании в bpm’online с последующим автоматическим созданием лида. Благодаря всем этим инструментам упрощен процесс взаимодействия и информирования клиента.

 

Результат

В результате внедрения bpm’online Львовская бизнес-школа получила возможность использовать инструменты продаж и маркетинга в единой ИТ-экосистеме, что решает задачу объединения результатов работы из разных систем. Теперь в истории клиентов содержится как информация о сделках и потребностях клиента, так и об источниках потребностей и другая маркетинговая информация.

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

 

Нравится

Поделиться

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

Коллеги, а как настроить Lead source URL, чтобы определялся source=google при переходе с любого google.com, google.ru и других сайтов (которые, по идее не являются поддоменами)?

Нравится

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

А что туда попадает при нынешних настройках? Если в разных адресах есть одинаковая часть «google», можно написать какой-нибудь процесс, который при сохранении лида считывает и заменяет нужным значением то же или другое поле объекта. В процессе указать список слов-подстрок, по упоминанию которых определяет источник-поисковик.

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

А что туда попадает при нынешних настройках? Если в разных адресах есть одинаковая часть «google», можно написать какой-нибудь процесс, который при сохранении лида считывает и заменяет нужным значением то же или другое поле объекта. В процессе указать список слов-подстрок, по упоминанию которых определяет источник-поисковик.

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

Сейчас копаем код и думаем, как это исправить.



Но, возможно, всё должно решаться как-то проще. Задача-то стандартная 

Тут пишут, что Google и Yandex можно определять по “gclid” и “yclid”, но это только для рекламных ссылок.

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

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

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

Да, нужно добавить много разных доменных имён google.



https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B4%D0%BE%D0%BC%D0%B5%D0%BD%D0%BE%D0%B2_Google



И ещё подозреваю, что он постоянно изменяется и пополняется

Тогда это будет сложно автоматизировать, разве что парсить Википедию. Или все ранее неизвестные домены заносить в список и потом обрабатывать их вручную.

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

Новинки релиза 7.14.0
Лидеры разработки Террасофт презентовали улучшения в маркетинге

 

Нравится

Поделиться

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

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

При использование триггерных писем есть возможность добавлять в письмо только колонки, которые находятся на карточке контакта. Возможно ли добавлять в триггерные письма колонки из других объектов системы?

Спасибо!

Нравится

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

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

img_section_email_macro_subject.gif

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

Дорогие, сертифицированные коллеги!

Вопрос по вопросам сертификации:

В чем разница между массовыми и триггерными рассылками?

  1. Массовая рассылка отправляется всем получателям без исключения, триггерная рассылка отправляется только получателям, ответившим на письма массовой рассылки.
  2. Массовые рассылки могут рассылаться в bpm’online независимо от кампаний, тогда как триггерные письма - только в рамках кампаний.
  3. Массовая рассылка генерируется автоматически, триггерная рассылка может отправляться получателям индивидуально.

Немного двоякие ответы получаются:

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

А какие галки ставили вы, отвечая на данный вопрос?

 

Нравится

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

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

В чем суть вопроса?

На Community не представляются ответы по сертификации и подобным тестам, которые проходят в компании. Рекомендуем рассчитывать на свои знания и внимательно читать инструкцию на Академии. Также можете для тестов использовать trial сайты.

Вильшанский Дмитрий пишет: В чем суть вопроса?

Дмитрий, спасибо за ответ!

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

Поэтому хочется так же немного рассчитывать и на сертифицированное сообщество знатоков!

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

Изображение удалено.

О компании

Компания «Ирбис Моторс» является производителем мототехники. 

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

Предпосылки внедрения

Ранее сотрудники компании «Ирбис Моторс» фиксировали всю полезную информацию о взаимодействии с клиентом в индивидуальных таблицах, которая находилась в учетной системе 1С и личном кабинете клиента (web-площадка b2b для дилеров). Такая ситуация значительно усложняла возможность оперативно проанализировать работу как отдельного сотрудника, так и отдела в целом. Более того, при увольнении сотрудника продолжать работу в его «файле» очень сложно, так как каждый менеджер работал со своими клиентами в удобном для него формате. Важная информация о клиенте могла потеряться.

Для объединения информации в единой системе и автоматизации процессов была выбрана bpm’online.  

 

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

 

Выполненные настройки

Первым шагом в адаптации системы стало определение требований к карточкам основных разделов. Далее на страницы разделов [Лиды], [Контакты], [Контрагенты], [Заказы] и [Продукты] через мастер раздела добавлены необходимые поля и справочники. Так, например, на страницу продукта добавлены такие поля: Марка и Тип транспортного средства, Технические характеристики и др.

 

Следующий шаг — приведение данных клиентской базе к единому представлению, после чего информация была импортирована в bpm’online. Важно отметить, что предыдущие заказы и активности также были импортированы, что позволило менеджерам иметь историю взаимодействия с клиентами для ведения работы в системе. После этого был настроен обмен данными, при котором заказы из учетной системы попадали в CRM и обратно в учетную систему. Это позволило централизировать процесс управления заказами.

 

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

 

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

 

После стандартных коммуникаций с клиентом, в рамках лида, менеджер принимает решение о создании заказа или оставляет клиента на этапе «Взращивание», в крайних случаях — дисквалифицирует лид. Под взращиванием клиента подразумеваются периодические коммуникации с клиентом (телефонные звонки, личные встречи) с целью расположить его к продуктам компании. Кроме этого, контакты, у которых есть лиды на стадии «Взращивание», попадают в аудиторию e-mail рассылок, где происходит оповещение клиентов о специальных предложениях.

 

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

 

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

 

Результат

В результате внедрения bpm’online компания «Ирбис Моторс» получила систему автоматизации процессов взаимодействия с клиентом, в которой можно вести прозрачную работу с клиентом, следить за историей взаимодействия, автоматизировать процессы выполнения заказов и составлять аналитику по ключевым показателям работы менеджеров и отдела в целом. Наличие единого центр коммуникации с клиентами (телефон, электронная почта, чат с площадкой b2b, социальные сети) позволяет сократить время на активности в других системах и уделять это время клиентам. Работа в bpmonline позволила повысить лояльность существующих клиентов к компании и улучшить процессы взаимодействия с новыми клиентами.

Нравится

Поделиться

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

Добрый день. Действовал по инструкции с академии по добавлению пользовательского элемента кампании и столкнулся со следующей проблемой: в метаданных кампании в описании моего элемента не отображаются поля, которые я объявил в элементе из-за чего при обновлении страницы пропадают все заполненные поля в моем элементе. То есть я создал файл BSDeliveryElementSchema

define("BSDeliveryElementSchema", ["BSDeliveryElementSchemaResources", "CampaignBaseCommunicationSchema"],
    function(resources) {
        Ext.define("Terrasoft.manager.BSDeliveryElementSchema", {
            // Родительская схема.
            extend: "Terrasoft.CampaignBaseCommunicationSchema",
            alternateClassName: "Terrasoft.BSDeliveryElementSchema",
            // Идентификатор менеджера. Должен быть уникальным.
            managerItemUId: "a1226f93-f3e3-4baa-89a6-11f2a9ab2d71",
            // Подключаемые миксины.
            mixins: {
                campaignElementMixin: "Terrasoft.CampaignElementMixin"
            },
            // Название элемента.
            name: "BSDelivery",
            // Привязка ресурсов.
            caption: resources.localizableStrings.Caption,
            titleImage: resources.localizableImages.TitleImage,
            largeImage: resources.localizableImages.LargeImage,
            smallImage: resources.localizableImages.SmallImage,
            // Имя схемы карточки редактирования.
            editPageSchemaName: "BSDeliveryElementPropertiesPage",
            // Тип элемента.
            elementType: "BSDelivery",
            // Полное имя класса, соответствующего данной схеме.
            typeName: "Terrasoft.Configuration.BSDeliveryElement, Terrasoft.Configuration",
            // Переопределение свойств стилей для отображения.
            color: "rgba(55, 119, 188, 1)",
            width: 69,
            height: 55,
            // Настройка специфических свойств элемента.
            deliveryId: null,
            // Определение типов связей, исходящих из элемента.
            getConnectionUserHandles: function() {
                return ["CampaignSequenceFlow", "CampaignConditionalSequenceFlow"];
            },
            // Расширение свойств для сериализации.
            getSerializableProperties: function() {
                var baseSerializableProperties = this.callParent(arguments);
                return Ext.Array.push(baseSerializableProperties, ["DeliveryId"]);
            },
            // Настройка отображения иконок на диаграмме кампании.
            getSmallImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.smallImage);
            },
            getLargeImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.largeImage);
            },
            getTitleImage: function() {
                return this.mixins.campaignElementMixin.getImage(this.titleImage);
            }
        });
        return Terrasoft.BSDeliveryElementSchema;
    });

Потом файл BSDeliveryElementPropertiesPage

define("BSDeliveryElementPropertiesPage", ["LookupUtilities"],
    function(LookupUtilities) {
        return {
            attributes: {
 
                "DeliveryId":{
                	"dataValueType": this.Terrasoft.DataValueType.LOOKUP,
                	"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
                	"referenceSchemaName": "BeesenderDelivery",
					"isRequired": true,
					"isLookup": true
                },
 
                "DeliveryCollection": {
					"dataValueType": this.Terrasoft.DataValueType.COLLECTION,
					"type": this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
				},
            },
            methods: {
                init: function() {
                    this.callParent(arguments);
                    this.initAcademyUrl(this.onAcademyUrlInitialized, this);
                },
 
                getContextHelpCode: function() {
                    return "CampaignBSDeliveryElement";
                },
 
                initParameters: function(element) {
                    this.callParent(arguments);
                    this.set("DeliveryId", element.deliveryId);
                },
 
                saveValues: function() {
                    this.callParent(arguments);
                    var element = this.get("ProcessElement");
                    element.deliveryId = this.getDelivery();
 
                },
 
                getDelivery: function(){
                	var delivery = this.get("DeliveryId");
                	return delivery ? delivery : "";
                },
 
 
                loadDeliverySchemaLookup: function() {
					var self = this;
					var config = this.getDeliveryLookupConfig();
					LookupUtilities.Open(this.sandbox, config, function(args) {
						var collection = args.selectedRows;
						if (collection.getCount() > 0) {
							var selectedItem = collection.getItems()[0];
							self.set("DeliveryId", selectedItem);
						}
					}, this, null, false, false);
				},
 
				/**
				 * Gets email lookup config
				 * @protected
				 * @return {object}
				 */
				getDeliveryLookupConfig: function() {
					var config = {
						entitySchemaName: "BeesenderDelivery",
						multiSelect: false,
						hideActions: true
					};
					return config;
				},
 
				prepareDeliveryList: function(filterParameter, list) {
					if (list && list instanceof Terrasoft.Collection) {
						list.clear();
					}
					var filters = null;
					this.prepareLookupList(filters, filterParameter, "BeesenderDelivery",
						"DeliveryCollection", this);
				},
 
 
            },
            diff: [
 
                {
                    "operation": "insert",
                    "name": "ContentContainer",
                    "propertyName": "items",
                    "parentName": "EditorsContainer",
                    "className": "Terrasoft.GridLayoutEdit",
                    "values": {
                        "itemType": Terrasoft.ViewItemType.GRID_LAYOUT,
                        "items": []
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "BSDeliveryLabel",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                        "layout": {
                            "column": 0,
                            "row": 0,
                            "colSpan": 24
                        },
                        "itemType": this.Terrasoft.ViewItemType.LABEL,
                        "caption": {
                            "bindTo": "Resources.Strings.BSDeliveryText"
                        },
                        "classes": {
                            "labelClass": ["t-title-label-proc"]
                        }
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "DeliveryLabel",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                        "layout": {
                            "column": 0,
                            "row": 3,
                            "colSpan": 24
                        },
                        "classes": {
                            "labelClass": ["t-title-label-proc"]
                        },
                        "itemType": this.Terrasoft.ViewItemType.LABEL,
                        "caption": {
                            "bindTo": "Resources.Strings.DeliveryCaption"
                        }
                    }
                },
 
                {
                    "operation": "insert",
                    "name": "DeliveryId",
                    "parentName": "ContentContainer",
                    "propertyName": "items",
                    "values": {
                    	"bindTo": "DeliveryId",
                        "labelConfig": {
                            "visible": false
                        },
                        "layout": {
                            "column": 0,
                            "row": 4,
                            "colSpan": 24
                        },
                        "itemType": this.Terrasoft.ViewItemType.LOOKUP,
                        "classes": {
                            "labelClass": ["feature-item-label"]
                        },
                        "controlConfig": { 
                        	"tag": "DeliveryId",
                        	"loadVocabulary": {
								"bindTo": "loadDeliverySchemaLookup"
							},
							"prepareList": {
								"bindTo": "prepareDeliveryList"
							},
							"list": {
								"bindTo": "DeliveryCollection"
							},
                        }
                    }
                }
            ]
        };
    }
);

Файл BSDeliveryElement. Код файла BSDeliveryCampaignProcessElement  приводить не стал, так как я понимаю, что он не относится к формированию метаданных. 

namespace Terrasoft.Configuration
{
    using System;
    using Terrasoft.Common;
    using Terrasoft.Core;
    using Terrasoft.Core.Campaign;
    using Terrasoft.Core.Process;
 
    [DesignModeProperty(Name = "DeliveryId",
        UsageType = DesignModeUsageType.NotVisible, MetaPropertyName = DeliveryPropertyName)]
    public class BSDeliveryElement : CampaignSchemaElement
    {
 
        private const string DeliveryPropertyName = "DeliveryId";
 
        public BSDeliveryElement() {
            ElementType = CampaignSchemaElementType.AsyncTask;
        }
 
        public BSDeliveryElement(BSDeliveryElement source)
                : base(source) {
            ElementType = CampaignSchemaElementType.AsyncTask;
            DeliveryId = source.DeliveryId;
        }
 
        // Идентификатор действия элемента.
        protected override Guid Action {
            get {
                return CampaignConsts.CampaignLogTypeMailing;
            }
        }
 
        //откуда это взять?
        [MetaTypeProperty("{D12151EF-672A-4F5F-BE2B-76F2501444D0}")]
        public Guid DeliveryId{
        	get;
        	set;
        }
 
        protected override void ApplyMetaDataValue(DataReader reader) {
            base.ApplyMetaDataValue(reader);
            switch (reader.CurrentName) {
                case DeliveryPropertyName:
                	DeliveryId = reader.GetGuidValue();
                	break;
                default:
                	break;
            }
        }
 
        public override void WriteMetaData(DataWriter writer) {
            base.WriteMetaData(writer);
            writer.WriteValue(DeliveryPropertyName, DeliveryId, Guid.Empty);
        }
        public override object Clone() {
            return new BSDeliveryElement(this);
        }
 
        public override ProcessFlowElement CreateProcessFlowElement(UserConnection userConnection) {
            var executableElement = new BSDeliveryCampaignProcessElement {
                UserConnection = userConnection,
                DeliveryId = DeliveryId
            };
            InitializeCampaignProcessFlowElement(executableElement);
            return executableElement;
        }
    }
}

После сохранения/публикации схем мой элемент успешно появился в списке элементов кампании и без проблем добавляется/сохраняется в кампании. Но после обновления страницы я вижу, что поле Delivery остается не заполненным и его надо заново заполнять. Решил проверить метаданные этой кампании. Заметил, что в сравнении с элементом кампании Email-рассылка в метаданных моего элемента отсутствует DeliveryId, хотя все сделано по инструкции и по аналогии с Email-рассылкой. Также интересно, откуда в примере берется заполнение MetaTypeProperty для SmsText и PhoneNumber?

{
  "MetaData": {
    "Schema": {
      "ManagerName": "CampaignSchemaManager",
      "UId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
      "Name": "Campaign1",
      "CreatedInPackageId": "ecf839d6-c220-43d4-8eaf-f342565ddec6",
      "Methods": [],
      "LocalizableStrings": [],
      "Usings": [],
      "PackageUId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
      "CreatedInVersion": "7.13.0.284",
      "Parameters": [],
      "IsLogging": false,
      "ParentSchemaUId": "371c5d61-06ed-4bda-a905-c00ea6d19551",
      "EntitySchemaUId": "1f9bb71a-eb9c-4220-a40e-9b623eacfec8",
      "Mappings": [],
      "NotificationCaption": {
        "TypeName": "Terrasoft.Core.Process.ProcessSchemaParameter",
        "UId": "cdd58be7-2dba-4a5e-869b-1ad5d6d7513a",
        "Name": "NotificationCaption",
        "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
        "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
        "DataValueType": "8b3f29bb-ea14-4ce5-a5c5-293a929b6ba2",
        "SourceValue": {
          "Source": 3,
          "Value": "[#[PropertyValue:Caption]#]"
        }
      },
      "FlowElements": [
        {
          "TypeName": "Terrasoft.Configuration.MarketingEmailElement, Terrasoft.Configuration",
          "UId": "2fc1fc81-629d-4c83-9932-0fa0609d7754",
          "Name": "MarketingEmail1",
          "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "CreatedInPackageId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
          "ContainerUId": "bd0ac34a-1036-48d7-b196-79707e0ad01a",
          "Position": "240;225",
          "Size": "69;55",
          "MarketingEmailId": "2371319a-ceb4-420a-82a1-a1a64fa8f342"
        },
        {
          "TypeName": "Terrasoft.Configuration.BSDeliveryElement, Terrasoft.Configuration",
          "UId": "c3cc6526-de41-474f-a6fc-bc89ec4159a6",
          "Name": "BSDelivery1",
          "CreatedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "ModifiedInSchemaUId": "68e7407a-2b0c-4d74-a64d-d9538cfdac09",
          "CreatedInPackageId": "b9e0a92c-eb1e-4b05-ae29-0d4845242e29",
          "ContainerUId": "bd0ac34a-1036-48d7-b196-79707e0ad01a",
          "Position": "462;241",
          "Size": "69;55"
        }
      ],
      "EntityId": "65e2191f-6ad3-412b-96d6-e89202afaca7"
    }
  }
}

 

Нравится

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

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

Значение поля может не сохранятся если:

1. Неправильно реализованы методы ApplyMetaDataValue или WriteMetaData 

2. Обязательно наличие атрибута для поля

3. Неправильно указан тип поля

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

Demchenko Olha пишет:

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

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

Есть такой метод:

addRecords: function(detailColumnName, segmentName, isEditableSegment) {

            var masterId = this.get("MasterRecordId");

            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                rootSchemaName: this.entitySchemaName

            });

            esq.addColumn(segmentName);

            esq.filters.add("masterFilter", Terrasoft.createColumnFilterWithParameter(

                this.Terrasoft.ComparisonType.EQUAL, detailColumnName, masterId));

            esq.filters.add("isDeletedFilter", Terrasoft.createColumnFilterWithParameter(

                this.Terrasoft.ComparisonType.EQUAL, "IsDeleted", false));

            esq.getEntityCollection(function(result) {

                var existsContactsCollection = [];

                if (result.success) {

                    result.collection.each(function(item) {

                        existsContactsCollection.push(item.get(segmentName).value);

                    });

                }

                var config = {

                    entitySchemaName: segmentName,

                    multiSelect: true,

                    columns: ["Type"]

                };

                

                var isAccount;

                if (segmentName === "Account") {

                    config.filters = Ext.create("Terrasoft.FilterGroup");

                    config.filters.add("first", Terrasoft.createColumnFilterWithParameter(

                        Terrasoft.ComparisonType.EQUAL, "Type", "b32e9350-aac5-47ca-89c5-b987205a510f"));

                    isAccount = true;

                }

                if (existsContactsCollection.length > 0) {

                    var existsFilter = Terrasoft.createColumnInFilterWithParameters("Id", existsContactsCollection);

                    existsFilter.comparisonType = Terrasoft.ComparisonType.NOT_EQUAL;


                    existsFilter.Name = "existsFilter";

                    if (isAccount) {

                        config.filters.add("second", existsFilter);

                    } else {

                        config.filters = existsFilter;

                    }

                }

                this.openLookup(config, function(config) {

                    methods.addRecordsCallback.call(this, config, detailColumnName, segmentName);

                }, this);

            }, this);

        },

где detailColumnName = "Campaing",

segmentName = "Product",

entitySchemaName = "ProductUsage"

В ProductUsage есть идентификатор родительского объекта (Campaing) и идентификатор продукта (Product)

Он нужен для того, чтобы лукап выводил только те записи, которых нет в детали для этого объекта и отрабатывает корректно, но вот когда на детали больше записей, чем 2100, БД SQL выдает ошибку, что конструкция IN принимает максимум 2100 параметров, поэтому я решил переделать запрос под конструкцию NotExists.

Изменил этот метод с фильтрами на следующий:

addNotExistsRecords: function(detailColumnName, segmentName, isEditableSegment) {

            var masterId = this.get("MasterRecordId");

            var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {

                rootSchemaName: this.entitySchemaName

            });

            esq.addColumn(segmentName);

            esq.filters.add("masterFilter", Terrasoft.createColumnFilterWithParameter(

                this.Terrasoft.ComparisonType.EQUAL, detailColumnName, masterId));

            esq.filters.add("isDeletedFilter", Terrasoft.createColumnFilterWithParameter(

                this.Terrasoft.ComparisonType.EQUAL, "IsDeleted", false));

            esq.filters.add("isEqualsTo", Terrasoft.createColumnFilterWithParameter(

                this.Terrasoft.ComparisonType.EQUAL, "Product.Id", "ProductId"));

                

            var config = {

                entitySchemaName: segmentName,

                multiSelect: true,

                columns: ["Type"]

            };

            

            var isAccount;

            if (segmentName === "Account") {

                config.filters = Ext.create("Terrasoft.FilterGroup");

                config.filters.add("first", Terrasoft.createColumnFilterWithParameter(

                    Terrasoft.ComparisonType.EQUAL, "Type", "b32e9350-aac5-47ca-89c5-b987205a510f"));

                isAccount = true;

            }

            

            var existsFilter = Terrasoft.createNotExistsFilter("Id", esq);

            existsFilter.Name = "existsFilter";

            if (isAccount) {

                config.filters.add("second", existsFilter);

            } else {

                config.filters = existsFilter;

            }

            

            this.openLookup(config, function(config) {

                methods.addRecordsCallback.call(this, config, detailColumnName, segmentName);

            }, this);

        },

 

Однако при выполнении происходит ошибка errorCode: "NotSupportedException", message: "None", stackTrace: undefined, errors: Array(0)

Где я ошибся при построении фильтров?

По сути нужно повторить такой запрос:

select Id from Product where NOT EXISTS(select Id from ProductUsage where CampaignId = 'f39db115-d2f4-4936-b415-bf6543187463' AND IsDeleted = 'false' AND Product.Id = ProductId)

 

Нравится

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

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

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

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

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

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

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

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

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

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

Нравится

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

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

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

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

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

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

Елена К,

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

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

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