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

カスタムパイプライン

新藤

新藤

General LinkフィールドやFileフィールドでスペースが入力された場合の対処法

General LinkフィールドやFileフィールドに “スペース” が入力された場合、通常以下のようなRow値になってしまいます。

・General Linkフィールド
<link url=" " linktype="internal" id="{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}" />
・Fileフィールド
<file mediapath="" mediaid="{3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1}" src="/-/media/3D6658D8A0BF4E75B3E2D050FABCF4E1.ashx" />

※ちなみに「{0DE95AE4-41AB-4D01-9EB0-67441B7C2450}」は「/sitecore/content」アイテムで、「{3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1}」は「/sitecore/media library」アイテムになります。

これを回避するソースコードがSitecoreから提供されたので、以下の手順で適用してください。

using Sitecore.Data.Items;
using Sitecore.Pipelines.Save;
using Sitecore.Shell.Applications.ContentEditor;
using System;

namespace Sitecore.Support.Pipelines.Save
{
    public class RemoveSpaces
    {
        public void Process(SaveArgs args)
        {
            SaveArgs.SaveItem[] items = args.Items;
            for (int i = 0; i < items.Length; i++)
            {
                SaveArgs.SaveItem saveItem = items[i];
                SaveArgs.SaveField[] fields = saveItem.Fields;
                for (int j = 0; j < fields.Length; j++)
                {
                    SaveArgs.SaveField saveField = fields[j];
                    Item item = Context.ContentDatabase.Items[saveItem.ID, saveItem.Language, saveItem.Version];
                    if (item.Fields[saveField.ID].Type == "File")
                    {
                        if (saveField.Value.Contains("mediapath"))
                        {
                            XmlValue xmlValue = new XmlValue(saveField.Value, "File");
                            string attribute = xmlValue.GetAttribute("mediapath");
                            if (attribute.Trim() == string.Empty)
                            {
                                saveField.Value = string.Empty;
                            }
                        }
                    }
                    if (item.Fields[saveField.ID].Type == "General Link")
                    {
                        XmlValue xmlValue = new XmlValue(saveField.Value, "General link");
                        string attribute2 = xmlValue.GetAttribute("url");
                        if (attribute2.Trim() == string.Empty)
                        {
                            saveField.Value = string.Empty;
                        }
                    }
                }
            }
        }
    }
}

=======================================================
1.上記コードをビルドし、作成されたdllファイルをbinフォルダに配置します。
2.Web.config の<processor mode=”on” type=”Sitecore.Pipelines.Save.Save, Sitecore.Kernel” />
の直前に以下の定義を追加します。

  <processor mode=”on” type=”Sitecore.Support.Pipelines.Save.RemoveSpaces, (dllの名前)” />
==========================================================

以上です。



※エントリーの内容・画像等は、公開時点での情報に基づきます。
※Sitecoreのバージョンによって実装されている機能が異なります。

この記事を読んだ人はこちらの記事も読んでます

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

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

Sitecoreの運用問題を解決する

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