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のバージョンによって実装されている機能が異なります。