WFFM には、誰かがフォームを放棄したときに、フォーム自体に入力されたデータが記録され、ドロップアウト レポートからアクセスできるようにするオプションがあります。
Analytics をオンにし、ドロップアウト機能をオンにした WFFM があります。残念ながら、DB に記録されているデータは見られず、ドロップアウト レポートは表示されますが、空です。
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 フォームで分析を有効にし、キャンペーンと目標をフォームの送信に関連付けましたが、これらはどれも記録されていません。フォームに入力されたデータは正常に保存され、データ レポートに表示されていますが、キャンペーンや目標に関する情報が DB に記録されていません。
実行中の 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 サイトコア アイテムに関連付けられた他のキャンペーンや目標のエントリは表示されます)。
どんなアドバイスでも大歓迎です!
ありがとう、
フランチェスコ
編集
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 ウィジェットの初期化時にフォームによって呼び出されることになっています。すべての入力フィールド、ドロップダウン、およびテキスト領域のフォーカスとぼかしの変更イベントをバインドする必要があります。残念ながら、このメソッド内にブレーク ポイントを配置しようとすると、呼び出されません。
2回目の編集
面白い。WFFM フォームを含むページに埋め込まれた Javascript コードの次の行からすべてを開始する必要があることがわかりました。
<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 ライブラリ内にあります。ちょっと理にかなっていますよね?
最後に、_create 内のコードが実行され、blur イベントが 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に記録されたデータ。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 がキャプチャされたフィールド情報を保存する場所を知っている人はいますか?