在WFFM中,有一个选项,以便当有人放弃表单时,会记录在表单本身中输入的所有数据,并且应该可以通过“辍学报告”访问这些数据。
我有一个WFFM,已为此打开了Google Analytics(分析)并打开了辍学功能。不幸的是,我没有看到任何记录在数据库中的数据,并且Dropout Report是可见的,但为空。
我从WFFM文件夹中包含的javascript代码中看到,应该进行一系列AJAX调用来保存模糊事件中的字段-调用/sitecore modules/web/Web Forms for Marketers/Tracking.aspx
我尝试调试Javascript代码,但是从未调用过将信息发布到/sitecore modules/web/Web Forms for Marketers/Tracking.aspx的方法。您能想到导致此代码无法正常工作的任何原因吗?另外,有人知道该信息应该记录在哪个表中吗?它是WFFM DB中的字段表吗?
最后,即使我已在此特定WFFM表单上启用了分析功能,并且已将事件和目标与提交表单相关联,但均未记录任何内容。我看到在表单中输入的数据已成功存储并显示在数据报告中,但是数据库中没有记录有关Campaign或Goal的信息。
我什至直接在运行的DMS DB中手动检查:
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
但是我看不到该特定广告系列或目标的任何条目(而我看到了与非WFFM Sitecore项相关的其他广告系列和目标的条目)
任何建议将不胜感激!
谢谢,
弗朗切斯科
编辑
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小部件初始化上的表单调用。它应该绑定(bind)焦点并模糊所有输入字段,下拉列表和文本区域的更改事件。不幸的是,当我尝试在此方法中放置一个断点时,它从未被调用。
第二编辑
有趣的。我发现整个事情应该从嵌入WFFM表单的页面中的这一行Java代码开始:
<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>
一旦在这里放置了一个断点,我终于可以追溯到sc.webform.js中定义的jQuery.UI小部件的_create方法。调用_create的代码实际上位于jQuery.UI库中。 Kinda有道理吧?
最后,执行 _create 内部的代码,将模糊事件绑定(bind)到也在小部件中定义的 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'
});
现在没有意义的是,即使我终于可以看到无论何时我以WFFM格式在字段之间切换时都被调用trackEvents(为什么在我感到困惑之前为什么不起作用),我什么也看不到WFFM DB中记录的数据。我什至在数据库中尝试了快速查询:
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应该在哪里保存捕获的字段信息吗?
最佳答案
这可能很愚蠢,但是您是否为WFFM正确配置了数据源?我的意思是,显然,您使用的是WFFM ..,但是它是设置为使用SQL还是使用WFFM默认作为数据库使用的"file"。
像这样使用SQL:
<!-- MSSQL-->
<formsDataProvider type="Sitecore.Forms.Data.DataProviders.WFMDataProvider,Sitecore.Forms.Core">
<param desc="connection string">Database=Sitecore_WebForms;Data Source=xxx;user id=xxx;password=xxx;Connect Timeout=30</param>
</formsDataProvider>
<!-- SQLite -->
<!--<formsDataProvider type="Sitecore.Forms.Data.DataProviders.SQLite.SQLiteWFMDataProvider,Sitecore.Forms.Core">
<param desc="connection string">Data Source=/data/sitecore_webforms.db;version=3;BinaryGUID=true</param>
</formsDataProvider>-->
如果您没有正确配置,我想知道是否以某种方式在一个地方记录了数据,而不是在另一个地方?另外,我要问的另一个问题是这是否是开发环境,您是否在实时模式下运行Webforms?在我看来,这是一个配置问题。
关于适用于营销人员和DMS的Sitecore Web表单-不记录广告系列,目标和辍学信息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9195895/