5

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 がキャプチャされたフィールド情報を保存する場所を知っている人はいますか?

4

3 に答える 3

1

ばかげた質問かもしれませんが、データ ソースを WFFM 用に正しく構成しましたか? つまり、明らかに、あなたはWFFMを使用しています..しかし、SQLを使用するように設定されていますか、それともWFFMがデフォルトでデータベースとして使用する「ファイル」を使用していますか。

次のように 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>-->

正しく設定しないと、ある場所にデータが記録されていて、別の場所に記録されていないのではないかと思います。また、もう 1 つの質問は、これが開発環境かどうかを尋ねることです。ライブ モードで Web フォームを実行していますか? これは構成の問題のように思えます。

于 2012-02-09T00:11:45.840 に答える
1

6.5 update 6 と WFFM 2.3.3 rev でまったく同じ問題が発生しています。111209. サーバーへの非同期呼び出しに、正しいイベントを含む適切な形式の json オブジェクトが含まれていることがわかります。

例:

track:[{"fieldId":"{E0A0BCDD-85E1-4D8D-9E76-5ABD240423C9}","type":"Field Completed","value":"test","formId":"{0F3B57C1-1B6A-43B9-A5A6-2E958C168B31}","pageId":"{025AFF68-62B9-42CE-B49F-0C36311E1976}","ticks":16}]

ただし、ドロップアウトがデータベースに到着することはありません...

于 2012-02-13T15:09:55.307 に答える
0

キャンペーンと目標が展開されていることを確認しましたか? データベースを切り替えた場合、そうではない可能性があります。再デプロイするには、次のようにします。

  1. システムの各目標について -> マーケティング センター -> 目標
  2. ワークフローの状態を下書きに変更する
  3. 保存
  4. 次に、レビュー リボンで [デプロイ] をクリックします。
  5. これにより、pageeventdefinition テーブルにエントリが作成され、クエリが可能になります。

キャンペーンについても同じことを忘れないでください。

于 2013-07-31T14:05:53.877 に答える