(マスターデータベースなど)から読み取る必要があり、アイテムを公開したくない場合に、これを回避する方法を見つけました。ContentDatabase
これは、たとえば、ユーザーが生成したコンテンツである可能性があります。アクティブ コマースでは、プレビューまたはステージングされていない環境で常にマスターから読み取られ、ステージングされた環境で Web サービスを介してアクセスされるウィッシュ リストなどのコンテンツでこれに遭遇します。
に設定Sitecore.Context.Site.DisableFiltering
するtrue
と、非公開アイテムのフィルタリングが無効になります。IDisposable
オプションの条件を使用して、フィルタリングを一時的に無効にできる単純なものを実装しました。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ActiveCommerce.SitecoreX
{
public class ItemFilteringDisabler : IDisposable
{
private readonly bool _disableCondition = true;
public ItemFilteringDisabler()
{
Sitecore.Context.Site.DisableFiltering = true;
}
public ItemFilteringDisabler(bool disableCondition)
{
_disableCondition = disableCondition;
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = true;
}
}
public void Dispose()
{
if (_disableCondition)
{
Sitecore.Context.Site.DisableFiltering = false;
}
}
}
}
使用例:
using (new ItemFilteringDisabler(!Sitecore.Context.PageMode.IsNormal))
{
Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}");
}