ウォークスルー
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
このウォークスルーは「 プリフィルフォーム」ウォークスルーシリーズ の第1部で、登録ページの作成方法を説明しています。
このウォークスルーでは、以下の方法を説明します:
- Visual Studioプロジェクトをセットアップします
- レジスタユーザー提出アクションクラスを作成します
- ユーザーアクションエディターの登録項目を作成する
- テキストレンダリングパラメータを追加してください
- 登録ユーザー提出アクション項目を作成する
- 登録フォームを作成する
- MVCレイアウトを作成する
- ウェブページに登録フォームを追加してください
!注このウォークスルーの例に従うには、Sitecore Rocks Visual Studioプラグインが必要です。このプラグインはVisual Studio 2019以前のバージョンと互換性があります。
Visual Studioプロジェクトをセットアップします
まずはVisual Studioでサンプルプロジェクトを作成します。
Visual Studioプロジェクトを設定するには:
-
Visual Studioでは、ASP.NETウェブプロジェクトを作成し、ValueProviderSampleと名付けます。
-
以下の参考文献を加えます。
- Sitecore.ExperienceForms
- Sitecore.ExperienceForms.Mvc
- Sitecore.Kernel
- Sitecore.Analytics
- Sitecore.Mvc
- Sitecore.MVC.Analytics
このプロジェクトは プリフィルフォームシリーズのすべてのウォークスルーに使用されます。
レジスタユーザー提出アクションクラスを作成します
次に、すべてのカスタムサブミッション アクション実装用のフォルダを作成します。
レジスタユーザー submit action classを作成するには:
-
ValueProviderSampleプロジェクトでSubmitActionsというフォルダを追加します。
-
SubmitActionsフォルダに別のフォルダを作成し、名前をRegisterUserにします。
-
RegisterUserDataというクラスを作成し、RegisterUserフォルダに追加します。これは私たちのRegisterUser Submit Action実装で使われたデータ構造クラスです。
public class RegisterUserData { public Guid EmailFieldId { get; set; }
public Guid PasswordFieldId { get; set; }
public Guid FullNameFieldId { get; set; }
public string ProfileId { get; set; } }
-
プロジェクトのルートに行き、Helperという名前のフォルダを作成します。
-
静的FieldHelperクラスを作成し、作成したばかりのHelperフォルダに追加します。このヘルパークラスはフォームフィールドから値を取得するために使われます。
public static class FieldHelper
{
public static IViewModel GetFieldById(Guid id, IList
fields) {
return fields.FirstOrDefault(f => Guid.Parse(f.ItemId) == id);
}
public static string GetValue(object field)
{
return field?.GetType().GetProperty("Value")?.GetValue(field, null)?.ToString() ?? string.Empty;
}
-
RegisterUserクラスを作成し、RegisterUserフォルダに追加します。このクラスをSubmitActionBaseクラスから継承し、抽象Executeメソッドをオーバーライドします。
public class RegisterUser : SubmitActionBase
{ public RegisterUser(ISubmitActionData submitActionData) : base(submitActionData) { } protected override bool Execute(RegisterUserData data, FormSubmitContext formSubmitContext) { Assert.ArgumentNotNull(data, nameof(data)); Assert.ArgumentNotNull(formSubmitContext, nameof(formSubmitContext));
var fields = GetFormFields(data, formSubmitContext);
Assert.IsNotNull(fields, nameof(fields));
if (EmailOrPasswordFieldsIsNull(fields)) { return AbortForm(formSubmitContext); }
var values = fields.GetFieldValues();
if (EmailOrPasswordsIsNull(values)) { return AbortForm(formSubmitContext); }
var result = Register(values.Email, values.Password, values.FullName, data.ProfileId);
if (!result) { return AbortForm(formSubmitContext); }
return true; }
protected virtual bool Register(string email, string password, string name, string profileId) { Assert.ArgumentNotNullOrEmpty(email, nameof(email)); Assert.ArgumentNotNullOrEmpty(password, nameof(password));
try { var user = User.Create(Context.Domain.GetFullName(email), password); user.Profile.Email = email;
if (!string.IsNullOrEmpty(profileId)) { user.Profile.ProfileItemId = profileId; }
user.Profile.FullName = name; user.Profile.Save(); } catch (Exception ex) { Log.SingleError("Register user failed", ex); return false; }
return true; }
private RegisterUserFormFields GetFormFields(RegisterUserData data, FormSubmitContext formSubmitContext) { Assert.ArgumentNotNull(data, nameof(data)); Assert.ArgumentNotNull(formSubmitContext, nameof(formSubmitContext));
return new RegisterUserFormFields { Email = FieldHelper.GetFieldById(data.EmailFieldId, formSubmitContext.Fields), Password = FieldHelper.GetFieldById(data.PasswordFieldId, formSubmitContext.Fields), FullName = FieldHelper.GetFieldById(data.FullNameFieldId, formSubmitContext.Fields), }; }
private bool EmailOrPasswordFieldsIsNull(RegisterUserFormFields field) { Assert.ArgumentNotNull(field, nameof(field)); return field.Email == null || field.Password == null; }
private bool EmailOrPasswordsIsNull(RegisterUserFieldValues values) { Assert.ArgumentNotNull(values, nameof(values)); return string.IsNullOrEmpty(values.Email) || string.IsNullOrEmpty(values.Password); }
private bool AbortForm(FormSubmitContext formSubmitContext) { formSubmitContext.Abort(); return false; }
internal class RegisterUserFormFields { public IViewModel Email { get; set; } public IViewModel Password { get; set; } public IViewModel FullName { get; set; }
public RegisterUserFieldValues GetFieldValues() { return new RegisterUserFieldValues { Email = FieldHelper.GetValue(Email), Password = FieldHelper.GetValue(Password), FullName = FieldHelper.GetValue(FullName) }; } }
internal class RegisterUserFieldValues { public string Email { get; set; } public string Password { get; set; } public string FullName { get; set; } } }
ユーザーアクションエディターの登録項目を作成する
Register User Submitアクションアイテムを作成する前に、フォームフィールドをRegisterUserDataにマッピングするためのSPEAKコントロールエディターを作成しなければなりません。
!注このウォークスルーの例では、Sitecore Rocks Visual Studioプラグインが必要です。このプラグインはVisual Studio 2019以前のバージョンに対応しています。
ユーザーアクションエディタの登録項目を作成するには:
-
Visual Studioプロジェクトでフォルダを作成し、Scriptsと名付けてください。
-
JavaScriptファイルを作成し、RegisterUser.jsと名付けます。このファイルはRegister User Action Editorアイテムに使用されます。

-
以下のスクリプトをファイルにコピーします:
(function (speak) {
var parentApp = window.parent.Sitecore.Speak.app.findApplication('EditActionSubAppRenderer'),
designBoardApp = window.parent.Sitecore.Speak.app.findComponent('FormDesignBoard');
var getFields = function () {
var fields = designBoardApp.getFieldsData();
return _.reduce(fields,
function (memo, item) {
if (item && item.model && item.model.hasOwnProperty("value")) {
memo.push({
itemId: item.itemId,
name: item.model.name
});
}
return memo;
},
{
itemId: '',
name: ''
}
,
this);
};
speak.pageCode("underscore",
function (_) {
return {
initialized: function () {
this.on({
"loaded": this.loadDone
},
this);
this.Fields = getFields();
this.MapRegisterUserForm.children.forEach(function (control) {
if (control.deps && control.deps.indexOf("bclSelection") !== -1) {
control.IsSelectionRequired = false;
}
});
this.ItemTreeView.on("change
", this.changedSelectedItemId, this);if (parentApp) {
parentApp.loadDone(this, this.HeaderTitle.Text, this.HeaderSubtitle.Text);
parentApp.setSelectability(this, true);
}
},
changedSelectedItemId: function () {
parentApp.setSelectability(this, true, this.ItemTreeView.SelectedItemId);
},
setDynamicData: function (propKey) {
var componentName = this.MapRegisterUserForm.bindingConfigObjectpropKey.split(".")0;
var component = this.MapRegisterUserFormcomponentName;
var items = this.Fields.slice(0);
if (this.ParameterspropKey &&
!_.findWhere(items, { itemId: this.ParameterspropKey })) {
var currentField = {
itemId: this.ParameterspropKey,
name: this.ParameterspropKey +
" - " +
(this.ValueNotInListText.Text || "value not in the selection list")
};
items.splice(1, 0, currentField);
component.DynamicData = items;
$(component.el).find('option').eq(1).css("font-style", "italic");
} else {
component.DynamicData = items;
}
},
loadDone: function (parameters) {
this.Parameters = parameters || {};
_.keys(this.MapRegisterUserForm.bindingConfigObject).forEach(this.setDynamicData.bind(this));
this.MapRegisterUserForm.BindingTarget = this.Parameters;
this.ItemTreeView.SelectedItemId = this.Parameters.profileId;
},
getData: function () {
var formData = this.MapRegisterUserForm.getFormData(),
keys = _.keys(formData);
keys.forEach(function (propKey) {
if (formDatapropKey == null || formDatapropKey.length === 0) {
if (this.Parameters.hasOwnProperty(propKey)) {
delete this.ParameterspropKey;
}
} else {
this.ParameterspropKey = formDatapropKey;
}
}.bind(this));
this.Parameters.profileId = this.ItemTreeView.SelectedItemId;
return this.Parameters;
}
};
});
})(Sitecore.Speak);
-
Visual StudioでSitecoreエクスプローラーを開き、Sitecoreインスタンスへの接続を確立します。Sitecore Rocks Folder Syncを使って、RegisterUser.jsファイルを次のフォルダにあなたのウェブサイトにデプロイしてください: sitecore/shell/client/Applications/FormsBuilder/Layouts/Actions。

-
ユーザー アクションエディタSitecore登録を作成するには、Sitecoreエクスプローラーでコアデータベースを展開し、sitecore/shell/client/Applications/FormsBuilder/Layouts/Actionsに移動します。
-
アクションを 右クリックし、追加をクリックしてから 「新しいアイテム」をクリックします。
-
「新しいアイテムを追加」ダイアログボックスで「Speak-BasePage」を検索し、「RegisterUser」と名前を入力し、「**OK」**をクリックします。

-
作成したRegisterUserアイテムを右クリックして「 タスク」をクリックし、「 デザインレイアウト」をクリックしてください。
-
追加したアイテムの デザインレイアウトタブで、レイアウト フィールドをSpeak-FlexLayoutに更新してください。
-
左上で「 レンダリングを追加」をクリックし、PageCodeレンダリングを挿入します。

-
PageCodeレンダリングのプロパティウィンドウを開きます。PageCodeScriptFileName値をRegisterUser.jsファイルのファイル位置に更新します。例えば:
/sitecore/shell/client/Applications/FormsBuilder/Layouts/Actions/RegisterUser.js .
-
SpeakCoreVersion値をSPEAK 2-xに更新してください。

-
その後、デザインレイアウト ウィンドウでこれらのレンダリングに進みます。

テキストレンダリングパラメータを追加してください
テキストレンダリングパラメータを追加すると:
-
作成したRegisterUser Action Editorアイテムに移動し、PageSettingsアイテムを追加してください。
-
PageSettingsアイテムに移動し、「テキストパラメータレンダリング」を検索してクリックし、「追加」をクリックすると、HeaderTitle、HeaderSubtitle、ValueNotInListTextの3つのアイテムが追加されます。
!注あなたはsitecore/client/Business Component Library/version2
-
3つの項目それぞれをクリックして、以下のフィールドを編集してください:
-
IsVisible – 選択解除
-
本文を編集:
HeaderTitle - フォームフィールドをユーザー登録データにマッピングする。
HeaderSubtitle - フォーム内のフィールドをユーザープロファイルの詳細にマッピングします。
ValueNotInListText - 選択リストにない値。
-
-
PageSettingsアイテムに移動し、フォルダを追加し、名前をMapRegisterUserFormにしてください。
-
Search FormDropList Parametersをクリックし、追加をクリックして追加します:
- メール
- パスワード
- フルネーム
-
これらの項目のフィールド値は以下の表に従って更新してください:
FormDropList パラメータ
ValueFieldName
ディスプレイフィールドネーム
フォームラベル
BindingConfiguration
メール
itemId
名称
メール
emailFieldId/SelectedValue
パスワード
itemId
名称
パスワード
passwordFieldId/SelectedValue
フルネーム
itemId
名称
フルネーム
fullNameFieldId/SelectedValue
-
Sitecore ExplorerでPageSettingsアイテムに移動し、ItemTreeView Parameters項目を追加し、ItemTreeViewと名付けます。
-
ItemTreeViewアイテムのStaticDataフィールド値を「Browse」をクリックして更新してください。
-
/sitecore/system/Setttings/Security/Profilesに移動し、ProfilesフォルダをクリックしてOKをクリックします。

-
データベースフィールドの値をコアに設定してください。
-
最後に、Page-Stylesheet-Fileアイテムを追加し、Stylesheetと名付けます。スタイルシートフィールドの値を/sitecore/shell/client/Applications/FormsBuilder/Layouts/Actions/Actions.cssに更新します。

レンダリングリストは以下のようになります:

登録ユーザー提出アクションアイテムを作成してください
登録ユーザーを作成するには、アクションアイテムを送信してください:
-
コンテンツエディターでsitecore/System/Settings/Forms/Submit Actionsへ行ってください。
-
右クリックで 「アクションを送信」をクリックし、「 挿入」をクリックし、「テンプレートから挿入」をクリックします。
-
/System/Forms/Submit Actionテンプレートをクリックし、アイテム名欄で名前Register Userを入力し、「挿入」をクリックします。

-
作成したアイテムにアクセスし、設定 セクションのModel Typeフィールドで値をRegisterUserクラスタイプ名に設定します
.SubmitActions.RegisterUser.RegisterUser -
エラーメッセージ欄に「Register user failed!」というエラーメッセージを入力してください。
-
エディターフィールドで、作成したエディタをクリックしてください
。
-
アイテムを保存してください。
登録フォームを作成する
フォームを作成するには:
-
フォームダッシュボードで 「作成」をクリックします。
-
以下のフィールドでフォームを作成します:
種類
レーベル
フィールド名
CSSクラス
単行テキスト
フルネーム
フルネーム
フォームコントロール
メール
メール
メール
フォームコントロール
パスワード確認
パスワード
パスワード確認
フォームコントロール
送信ボタン
登録
送信ボタン
BTN BTN-デフォルト
-
オプションで、フォームフィールドをグループ化するためのセクションを追加することもできます:
フィールド名
フォームフィールド/セクション
CSSクラス
ユーザーデータセクション
メールセクション、パスワードセクション
フォームグループ col-MD-6
メールセクション
氏名、メールアドレス
フォーム群
パスワードセクション
(パスワード確認)
フォーム群
サブミットセクション
送信ボタン
形態群 col-md-12
フォームは次のようになります:

-
フォームに「送信」ボタンを追加するには、「 フォーム要素 」ペインの 構造 セクションで「 送信」ボタン 要素をフォームにドラッグします。
-
「 アクションを送信 」をクリックし、「 ユーザー登録」をクリックします。

-
Mapフォームの欄からユーザー登録データへのダイアログボックスで、対応するフォームフィールドを選択します。
-
ツリービューを展開し、「ユーザーノード」をクリックして**「OK」**をクリックします。

-
フォームを保存し、名前を「 Register Form」と名付けてください。
MVCレイアウトを作成する
フォームをウェブページに追加する前に、まずMVCレイアウトを作成しなければなりません。
MVCレイアウトを作成するには:
-
ウェブサイトのViewsフォルダ内にフォルダを作成し、ValueProviderと名付けてください。

-
コンテンツエディターでLayout/Layoutsに移動し、レイアウトフォルダを挿入し、名前をValue Providerにします。

-
Value Providerフォルダを右クリックして「挿入」とレイアウトMVCをクリックします。
-
レイアウト名MVC Layoutと名付け、先に作成したValue Providerフォルダに入れてください。
-
Visual Studioプロジェクトに移動し、Viewsという名前のフォルダを作成してください。
-
モデルを使わずに空のビューを作成してくださいMVC Layout.cshtml。ビューの名前は、コンテンツエディターで作成したMVCレイアウトの名前と同じでなければなりません。
@using Sitecore.Mvc
@{
Layout = "~/Views/Mvc OuterLayout.cshtml";
}
@RenderPage("~/Views/_LoginPartial.cshtml")
@Html.Sitecore().Placeholder("main")
-
_LoginPartial.cshtmlという名前の別の空のビューを作成し、以下のコードをコピーします。
@using Sitecore.Mvc @if (Request.IsAuthenticated) { var fullname = "Hello " + Sitecore.Context.User.Profile.FullName + "!";
- @fullname
- @Html.Sitecore().Placeholder("logout")
}
-
同じフォルダ内に「 Mvc OuterLayout.cshtml 」という名前のファイルを作成し、以下のコードをコピーします。
@using Sitecore.Mvc
@using Sitecore.ExperienceForms.Mvc.Html
@using Sitecore.Mvc.Analytics.Extensions
@{
Layout = null;
}
@Html.Sitecore().VisitorIdentification()
@Html.RenderFormStyles()
@Html.RenderFormScripts()
@RenderBody()
あなたのViewsフォルダーはこんな感じです:

-
すべてのViewsをViews/ValueProviderフォルダにRock Folder Syncを使って展開Sitecore
ウェブページに登録フォームを追加してください
ウェブページに登録フォームを追加するには:
-
/sitecore/Contentに移動し、ホームを右クリックして「挿入」をクリックし、「サンプルアイテム」をクリックします。
-
Registerを入力してOKをクリックします。
-
プレゼンテーションタブで「詳細」をクリックします。レイアウト詳細ダイアログボックスで、デフォルトのレイアウトをクリックして変更してください。
-
デバイスエディターのダイアログボックスのドロップダウンリストからLayouts/MVC Layoutをクリックします。
-
コントロールタブですべてのレンダリングを削除し、「追加」をクリックします。
-
Renderings/System/Formsに行き、Mvcフォームをクリックします。レンダリングを選択するダイアログボックスの「プレイスホルダーに追加」欄で「main」を入力し、「Select」をクリックします。
-
コントロールタブでMVCフォームコントロールをクリックし、編集をクリックします。データソースフィールドで「ブラウズ」をクリックし、ページに追加したいフォームを選択します。この例では、「フォーム登録」をクリックします。
-
前のステップで、フォーム、レイアウト、項目と子どもたちを公開してください。
!注アイテムのワークフロー状態が「 Approved 」状態であることを確認しましょう。
-
ブラウザでレジスターページを読み込み、ユーザーを登録します。

次のウォークスルーでログイン・ログアウトページの作成方法を学びましょう。