SITECORE MANIA 技術ブログ

2015.05.07 カスタムパイプライン

author

新藤

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の名前)” />
==========================================================

以上です。

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

お問い合わせ・資料請求

LYZONにご相談下さい

ご依頼ご質問等まずは私達にお気軽にご相談下さい。

お電話でのお問い合わせ

03-5803-0587平日9:00~18:00