8

サイトコア 6.6.0 (rev. 120918) を使用しています。Sitecore 管理ポータルから、アイテムのPublishableフラグをオフにします (画像を参照)。

ここに画像の説明を入力

この後、nullSitecore.Data.Database.GetDatabase("master").GetItem("{itemID}")を返します。

Publishable フラグを再度オンにするとGetItem()、正しいアイテムが返されます。この動作の理由は何ですか? 発行可能設定は、Web データベースに発行する機能を制御します。GetItem()master データベースへの API 呼び出しに影響するのはなぜですか?

4

2 に答える 2

11

(マスターデータベースなど)から読み取る必要があり、アイテムを公開したくない場合に、これを回避する方法を見つけました。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}");
}
于 2013-12-05T03:01:48.753 に答える
2

その理由はサイトコアのプレビュー機能にあることがわかりました。以前のチェックで、GetItem()たまたま以前にサイトコア管理者としてプレビュー機能を使用していました。その後、私の公開サイト全体がプレビュー モードになり (少し面倒です)、アイテムにアクセスできなくなります (マスター データベース API 呼び出しを介しても)。

私が発見したことから、これらはルールです:

  • アイテムが公開可能でなく、Web サイトがプレビュー モードの場合は、 Sitecore.Data.Database.GetDatabase("master").GetItem("{itemID}") null を返します。

  • 非公開アイテムもプレビューできません。Sitecore はアイテムのサブレイアウトをロードしていないようです。

プレビュー機能が公開できないアイテムにそのような制限を課す理由については、別の質問でお尋ねします。

于 2013-05-31T12:20:40.713 に答える