1

ArticleItem と ArticlePageItem の 2 つのテンプレートがあります。ArticlePageItem には、ArticleItem にリンクする ReferenceField 'Content.Reference' があります。記事を作成するコードは次のとおりです。

Item articlePageItem = articlePageParentItem.Add(articleItem.Name, new TemplateItem(master.GetItem(ConstantString.ArticlePageTemplateID)));
using (new UserSwitcher(Sitecore.Context.User))
{
    articlePageItem.Editing.BeginEdit();
    articlePageItem.Fields["Content.Reference"].Value = articleItem.ID.ToString();
    articlePageItem.Editing.EndEdit();
}

Globals.LinkDatabase.GetReferences(articlePageItem)しかし、上記のコードを実行した後、 を使用しても、 を介して ArticleItem 参照を取得できませんGlobals.LinkDatabase.UpdateReference(articlePageItem)

これを実装する方法を知っている人はいますか?

[更新] 以下は私たちの環境です: 私たちは Sitecore に基づいた Web サイトを持っており、記事管理を簡素化することを目的とした別のシステムを開発しています。.NET 4 と ASP.NET MVC 3 を使用してこのシステムを実装し、Sitecore.Kernal.dll と Sitecore.Client.dll をプロジェクトに参照します。しかし、サイトコアのバージョンは 6.2 で .NET 4 と互換性がないため、構成の一部をコピーしただけです。不完全なweb.configが原因であると思います。

4

1 に答える 1

1

上記のコードを実行している場合は、アイテムの変更を公開することも検討する必要があります。

これは、次のコードスニペットを使用して実行できます。

// publish all changed content
Database webDatabase = Sitecore.Configuration.Factory.GetDatabase("web");
PublishOptions publishOptions = new PublishOptions(masterDatabase, webDatabase, PublishMode.Smart, Sitecore.Context.Language, DateTime.Now);

publishOptions.RootItem = vacatureRoot;

publishOptions.Deep = true;
Publisher publisher = new Publisher(publishOptions);
publisher.Publish();

ここで、「vacatureRoot」はルートです->あなたのケースではarticlePageParentItem公開後、参照は自動的に設定され、フィールドを取得する通常の方法を使用して取得できる必要があります。

ReferenceFieldを使用しているように見えるため、コードは次のようになります。

ReferenceField rfRef = Sitecore.Context.Item.Fields["Content.Reference"];

if(rfRef != null && rfRef.TargetItem != null) 
{
 //Your logic here
}

コメントへの回答:

次のコードフラグメントを使用するのが最適だと思います->

Sitecore.Globals.LinkDatabase.UpdateReferences(articlePageItem);

私はこれが名前が言うことをするだろうと思います、このアイテムの参照を更新してください。これがあなたのために働くことを願っています!

于 2012-05-29T13:06:21.000 に答える