SITECORE MANIA 開発者向け技術ブログ

その他

小武内

小武内

フィールドに不正な値が入っていた場合、取り除いて保存する方法

フィールド値を変更して保存した際、フィールド値に不正な値が入っていないか確認し、不正な値があればそれを取り除いて保存したいということがあると思います。

実装方法

まず、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のバージョンによって実装されている機能が異なります。
この記事を読んだ人はこちらの記事も読んでます

Sitecore導入に関するご相談・資料ダウンロード

導入をご検討・ご依頼の方や、サービスについてご不明点がございましたらお気軽にお問い合わせください。

Sitecoreの運用問題を解決する

既にSitecoreを導入しているお客様向けサービス