サイトコアで、フィールドやアイテムに対するカスタム検証ルールを作成することができます。今回、カスタムのアイテム検証ルールを作成してみます。
検証環境
- Sitecore CMS 6.6 Service Pack 1
今回はカスタムアイテムルールとして アイテム名に空白が含まれる場合にエラーとする検証ルールを作成してみます。
アイテム名にスペース(空白)が含まれないようにしたい場合は、Web.config の name="InvalidItemNameChars" となっている setting タグの value にスペースを設定すれば空白をアイテム名に含めないように設定することができます。
1. アイテム検証クラスを作成する
検証の定義アイテムと、検証を実装するクラスからなるので、最初に検証クラスを作成します。サンプルとして次のようにクラスを作成しました。
ItemNameCannotHaveSpaceValidator の実装はあとで記載します。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Runtime.Serialization;
using Sitecore.Data.Validators;
using Sitecore.Diagnostics;
namespace SCSample.Web.sample
{
[Serializable]
public class ItemNameCannotHaveSpaceValidator : Sitecore.Data.Validators.StandardValidator
{
public ItemNameCannotHaveSpaceValidator() { }
public ItemNameCannotHaveSpaceValidator(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
// Validatorの名前
public override string Name
{
get
{
return (GetType().ToString());
}
}
/// <summary>
/// 検証ルール定義アイテムのパラメーターフィールドに
/// Resultパラメータを設定することでコードで指定した最大
/// の検証エラーレベルを上書きできる。
/// </summary>
/// <returns></returns>
protected override ValidatorResult GetMaxValidatorResult()
{
return (GetFailedResult(ValidatorResult.Error));
}
protected override ValidatorResult Evaluate()
{
if (!string.IsNullOrEmpty(this.Parameters["Result"]))
{
Log.Info("Result-", this.Parameters["Result"]);
}
// フィールドバリデータの場合 ControlValidationValue で
// フィールドの値を参照できる
// GetFieldDisplayName()でフィールドの表示名を取得できる。
// アイテム検証ルールの場合
var item = this.GetItem();
if (item.Name.Contains(' '))
{
// Translate.Text メソッドでローカライズ対応する場合は、Coreデータベースの
// /sitecore/system/Dictionary 配下にDictionary Entry型のアイテムを登録し、Keyフィールドに
// Item name should not contain space. を設定して言語バージョンごとにPhraseフィールドに
// 翻訳用のテキストを設定する。
this.Text = base.GetText(Sitecore.Globalization.Translate.Text("Item name should not contain space."));
return GetFailedResult(ValidatorResult.Error);
}
return ValidatorResult.Valid;
}
}
}
プロジェクトをビルドして サイトコアのサイトの bin フォルダに dll をコピーします。
2.アイテム検証ルール定義アイテムを作成する
プログラムを作成したので、今度は検証の定義アイテムを作成します。アイテム用の検証ルール定義アイテムは下図のように /sitecore/システム/設定/検証ルール/アイテムルール 配下に作成します。今回は アイテムルール/アイテム 配下にカスタムのアイテム検証ルール定義アイテムを作成します。アイテムという名前のアイテムを選択して、ホームタブの挿入グループの検証ルール をクリックします。

ダイアログが表示されるので、 アイテム名を入力します。こんかいは ItemNameCannotHaveSpaceValidator という名前で検証ルール定義アイテムを作成しました。

作成したアイテムをコンテンツエディターで編集します。 タイトルや説明に下図のように検証ルールの説明を記述します。タイプにルールを実装したクラスのシグネチャを設定します。パラメーターフィールドに必要であればパラメーターを設定します。

カスタムアイテム検証ルール定義アイテムの作成ができました。あとは、アイテムに対してい検証ルールを追加します。今回は /sitecore/system/Settings/Validation Rules/Global Rules 定義アイテムに対して検証の設定を行うことですべてのアイテムに対して検証ルールが適用されるようにします。
今回は下図のように検証ボタンフィールドに先ほど作成した ItemNameCannotHaveSpaceValidator を追加しました。

あとは、実際にコンテンツのアイテムを選択して、レビュータブ→校正→検証 ボタンをクリックします。もしアイテム名に空白が含まれている場合、下図のように検証結果に検証エラーが表示されるようになります。

3.検証エラーのエラーレベルを検証ルール定義アイテムのパラメーターを使用して変更するには
お作法に従って検証ルールクラスを実装している場合、検証ルール定義アイテムのパラメーターフィールドに Result=<エラーレベル> を設定することで、検証結果問題ありと判定された場合のエラーレベルをプログラムのものとは別のレベルに上書きすることができます。下図では検証結果 問題が発生した場合 Warning エラーとなるように設定しています。

Result パラメーターに Warning を設定した場合、検証ボタンでアイテムを検証すると今度は 警告 レベルの検証結果になります(下図参照)。

検証結果のダイアログの右側に表示されるエラーはプログラムのコードの内容がそのまま出力されています。この文字列をローカライズ(今回は日本語化)するには、Coreデータベースの /sitecore/system/Dictionary/ アイテム配下に、ローカライズ用の Dictionary entry 型のアイテムを作成する必要があります。
今回は下図のようにDictionary entry を作成しました。 Key フィールドにプログラム内の Translate.Text("Item name should not contain space.") で指定している文字列を設定しています。Phrase フィールドに日本語用の文字列を設定しています。ローカライズしたい言語バージョンごとに アイテムのPhraseフィールドを設定すれば言語バージョンごとにローカライズできます。。

再度検証ボタンでアイテムを検証すると、いままでプログラムの文字列がそのまま出力されていたのが、 Phrase フィールドで設定した文字列が表示されるようになります。

4.まとめ
説明は以上です。カスタム検証ルールクラスとアイテムの検証ルール定義アイテムを作成する例を記載しました。
クライアント構成クックブックにはそのほか、 次のビルトインの 検証用コントロール(検証用クラス)を使用してカスタム検証ルールを作成する方法が紹介されています。
- 整数範囲フィールド検証コントロール
- 整数フィールド検証コントロール
- 最大長フィールド検証コントロール
さんのコメント: さんのコメント: