SitecoreでWFFMフォームを作成して、セッションに保存されている現在のユーザーのプロファイルを編集しようとしています(とは異なりますSitecore.Context.User.Profile
)。この目的のために、セッションからのプロファイルデータをフォームのフィールドにプリロードする方法を探しています。
これはできますか?SitecoreCMS6.5とWFFM2.3を使用しています。
SitecoreでWFFMフォームを作成して、セッションに保存されている現在のユーザーのプロファイルを編集しようとしています(とは異なりますSitecore.Context.User.Profile
)。この目的のために、セッションからのプロファイルデータをフォームのフィールドにプリロードする方法を探しています。
これはできますか?SitecoreCMS6.5とWFFM2.3を使用しています。
WFFMは、これをそのままでは実行できません。問題を解決するために別のアプローチを選択しました。下のフォームレンダリングには、フォームをレンダリングするためのカスタムユーザーコントロールを使用してパラメーターを追加できる/sitecore/layout/Renderings/Modules/Web Forms for Marketers/Form
フィールドがあります。Parameters
FormTemplate
FormTemplate=/sitecore modules/web/Web Forms for Marketers/Control/CustomSimpleFormAscx.ascx
このユーザーコントロールでは、各フィールドをループし、ユーザーのカスタムプロパティに基づいて入力フィールドの値を設定します。もちろん、これをselectなどの他のフィールドに拡張することもできます。サンプルコードを次に示します。
public partial class CustomSimpleFormAscx : SitecoreSimpleFormAscx
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
FillInUserData(this.FieldContainer);
}
private void FillInUserData(System.Web.UI.Control control)
{
foreach (System.Web.UI.Control child in control.Controls)
{
if (child is BaseControl)
{
if (child is InputControl)
{
InputControl field = (InputControl)child;
field.Text = Sitecore.Context.User.Profile.GetCustomProperty(field.ControlName);
}
}
FillInUserData(child);
}
}
}
FormRenderer
WebControlを逆コンパイルし、これを行う独自のWebControlを構築することをお勧めします。これは、WFFMモジュールを介してフォームをレンダリングするための標準のプレゼンテーションコントロールです。
問題の解決策はもう少し複雑だったようです。まず、すべてのプロファイル情報をセッションからのに移動しましSitecore.Context.User
たProfile
。これを行うには、カスタムユーザープロファイルクラスを実装する必要がありました。このアプローチを使用すると、セッションではなく、このカスタムプロファイルからフォームフィールドをプリロードする必要があることがわかります。
これを行うために、コンテンツツリーの下に「プロファイル変数」というフォルダーを作成しました。このフォルダーは、読み取る必要のあるカスタムプロファイルプロパティをドット表記で表しています。例:{ DisplayName: "Home Telephone", Value: "ContactDetails.HomeTelephone" }
。
最後に、単一行テキストフィールドタイプに基づいてカスタムWFFMフィールドタイプを作成しました。これはPreloadField
、「プロファイル変数」ノードから値を取得して、もう1つのプロパティを取得し、カスタムフィールドタイプに基づいてOnInit
、コンテキストユーザーのプロファイルから読み取ります。に格納されているプロパティの値を反映しPreloadField
、テキストフィールドのText
プロパティをその値に設定します。
これが他の誰かが似たようなものを探すのに役立つことを願っています。
私は似たようなことをしたいと思っています。2.3バージョンのWFFMには、ユーザープロファイルからフィールドの値を設定できるルールアクションがいくつかあります。
「アクション:フォームフィールドを選択するときのルール」まで、「ユーザープロファイル固有のフィールドオプションのデフォルト値を使用する」を参照してください。
フルネーム、電子メール、コメント、またはその他のカスタムプロパティを使用できます。
含まれていない1つのフィールドは、UserNameフィールドです。ユーザー名フィールドを返すカスタムアクションを作成できます。