В WFFM есть опция, благодаря которой, когда кто-то отказывается от формы, любые данные, которые были введены в самой форме, записываются и должны быть доступны через отчет об исключении.
У меня есть WFFM, для которого я включил аналитику и функцию исключения. К сожалению, я не вижу никаких данных, записываемых в БД, а отчет об удалении виден, но пуст.
Из кода javascript, включенного в папку WFFM, я вижу, что серия вызовов AJAX предназначена для сохранения полей в событиях размытия - с вызовами модулей /sitecore/web/Web Forms for Marketers/Tracking.aspx.
Я попытался отладить код Javascript, но метод, который должен публиковать информацию в /sitecore modules/web/Web Forms for Marketers/Tracking.aspx, никогда не вызывается. Можете ли вы назвать какие-либо причины, по которым этот код не работает? Кроме того, кто-нибудь знает, в какую таблицу эта информация должна быть записана? Это таблица полей в базе данных WFFM?
Наконец, несмотря на то, что я включил аналитику в этой конкретной форме WFFM и связал кампанию и цель с отправкой формы, ничего из этого не записывается. Я вижу, что данные, введенные в форму, успешно сохранены и отображаются в отчете о данных, но информация о кампании и цели не записывается в БД.
Я даже проверил вручную непосредственно в работающей БД DMS:
select top 10
p.DateTime, p.UrlText, cp.CampaignName
,i.Url, vi.VisitId
from pages p
inner join ItemUrls i on p.ItemId = i.ItemId
inner join Visits vi on vi.VisitId = p.VisitId
inner join GeoIps g on vi.Ip = g.Ip
left join Campaigns cp on cp.CampaignId = vi.CampaignId
order by p.DateTime desc
Это показывает, что страница, на которой отображается форма, посещается, но никакая кампания не связана с посещением.
Затем я попробовал следующее:
select pe.datetime, ped.Name, pg.UrlText from PageEvents pe
inner join PageEventDefinitions ped on ped.PageEventDefinitionId = pe.PageEventDefinitionId
inner join Pages pg on pg.PageId = pe.PageId
order by pe.DateTime desc
Но я не вижу записей ни для этой конкретной кампании, ни для цели (в то время как я вижу записи для других кампаний и целей, связанных с элементами Sitecore, не относящимися к WFFM).
Любой совет будет принят с благодарностью!
Спасибо,
Франческо
ИЗМЕНИТЬ
Файл sc.webform.js содержит этот метод:
_create: function () {
var self = this,
options = this.options;
if (options.tracking) {
this.element.find("input[type!='submit'], select, textarea")
.bind('focus', function (e) { self.onFocusField(e, this) })
.bind('blur change', function (e) { self.onBlurField(e, this) });
this.element.find("select")
.change(function () { $scw.webform.controls.updateAnalyticsListValue(this) });
this.element.find("input[type='checkbox'], input[type='radio']")
.click(function () { $scw.webform.controls.updateAnalyticsListValue(this) });
}
this.element.find(".scfDatePickerTextBox").each(function () { $scw.webform.controls.datePicker(this) });
},
Предполагается, что это вызывается формой при инициализации виджета sc.webform. Он должен привязывать события изменения фокуса и размытия для всех полей ввода, раскрывающихся списков и текстовых областей. К сожалению, когда я попытался поставить точку останова внутри этого метода, он так и не был вызван.
ВТОРАЯ ПРАВКА
Интересный. Я понял, что все должно начинаться с этой строки кода Javascript, встроенной в страницу, содержащую форму WFFM:
<script type="text/javascript">
$scwhead.ready(function() {
$scw('#form_A8BF483419174F97A2830E12CBCF7E4F').webform({formId: "{A8BF4834-1917-4F97-A283-0E12CBCF7E4F}",pageId: "{21C24144-B964-4FBA-8388-D9B90EBBC17C}",eventCountId: "pagecolumns_0_columncontent_0_bottomrow_0_form_A8BF483419174F97A2830E12CBCF7E4F_form_A8BF483419174F97A2830E12CBCF7E4F_eventcount",tracking: true})
});
</script>
Как только я поставил здесь точку останова, я, наконец, смог проследить метод _create виджета jQuery.UI, определенного в sc.webform.js. Код, который вызывает _create, на самом деле находится внутри библиотеки jQuery.UI. Вроде смысл есть, да?
Наконец, выполняется код внутри _create, события размытия привязываются к методу TrackEvents, также определенному в виджете:
_trackEvents: function(events) {
$scw.ajax({
type: 'POST',
url: "/sitecore modules/web/Web Forms for Marketers/Tracking.aspx" + location.search,
data: {track: JSON.stringify(events)},
dataType: 'json'
});
Что не имеет смысла, так это то, что теперь, хотя я, наконец, вижу, что trackEvents вызывается всякий раз, когда я переключаюсь между полями в форме WFFM (почему это не работало раньше, для меня загадка), я не вижу никаких данные, записанные в БД WFFM. Я даже попробовал быстрый запрос в БД:
select f.Timestamp, f.StorageName, fi.Value, fi.FieldName
from Form f
inner join Field fi on f.Id = fi.FormId
order by f.Timestamp desc, FieldName
Кто-нибудь знает, где Tracking.aspx должен сохранять информацию о захваченных полях?