フィールド値を変更して保存した際、フィールド値に不正な値が入っていないか確認し、不正な値があればそれを取り除いて保存したいということがあると思います。
実装方法
まず、App_Config/Include配下に以下のようなconfigを任意の名前で作成します。
こちらのconfigを作成することで、保存の処理が走るたびにFieldCheck.csのTestHandlerメソッドが実行されるようになります。
しかし、ここで注意したいのが"item:saved"を設定すると、パブリッシュや編集ボタンを押した時にも裏側では保存の処理が走ってしまうということです。
そのため、TestHandlerメソッド内では細かく条件を指定し、不要な場合は処理を走らせないようにする必要があります。
特定のフィールドが変更&保存された時のみ処理を走らせたい場合は、EventArgsを使用することで判別が可能になります。
FieldCheck.cs
public class ItemEventHandler
{
public void TestHandler(object sender, EventArgs args)
{
SitecoreEventArgs eventArgs = args as SitecoreEventArgs;
Sitecore.Diagnostics.Assert.IsNotNull(eventArgs, "eventArgs");
Item item = eventArgs.Parameters[0] as Item;
var itemChanges = eventArgs.Parameters[1] as ItemChanges;
//対象のフィールド(TestField とする)が変更されている場合
if (itemChanges.FieldChanges.Contains(TestField))
{
//値チェックの処理
//正しい値をフィールドに保存する処理
}
}
}
12行目のitemchanges.FieldChangesで、値が変更されたフィールドを取得することができます。
itemchanges.FieldChangesの中に対象のフィールドが含まれているか確認することで、特定のフィールドが変更されたかどうかを判別することが可能となります。
後はフィールドの値に不正な値が入っていないかチェックし、入っていれば取り除いた値をフィールドに保存するという処理をif文の中で書けば完了です。
実装後イメージ
『ひらがな』のみを保存したい場合、上の画像の状態で、保存ボタンを押すと下の画像のように『ひらがな以外』の文字が取り除かれて保存されます。
※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。